import time from pathlib import Path from device.LaminaAdapter import LaminaAdapter from device.LaminaAdapter import GeneratePackage_SLCP001_p4a0, GeneratePackage_SLCP101_p460, GeneratePackage_DLSY001_p460 from device.LaminaAdapter import GeneratePackage_SLCP102_p460 from device.tools.ByteConv import trans_list_to_str, trans_str_to_list def test_communication(time_out=2): """ 通信成功率测试 """ time_start = time.time() param_saved = dev_lamina.flag_print, dev_lamina.retry, dev_lamina.time_out dev_lamina.flag_print = False dev_lamina.retry = 1 try: while True: dev_lamina.frame_read(0x0C, 0x20) print(f"Time Stamp: {time.ctime()}") print(f"Success Frame: {dev_lamina.log['read']}") print(f"Failed Frame: {dev_lamina.log['send'] - dev_lamina.log['read']}") print(f"Max Series Failed Frame: {dev_lamina.log['keep-fail']}") time.sleep(time_out) finally: time_end = time.time() print("Test Result: ") print(f"Time Start: {time.strftime(r'%Y-%m-%d %H:%M:%S', time.localtime(time_start))}, \tTime End: {time.strftime(r'%Y-%m-%d %H:%M:%S', time.localtime(time_end))}") print(f"Time Elapsed: {time_end - time_start}") print(f"Success Rate: {dev_lamina.log['read'] / dev_lamina.log['send'] * 100}%") dev_lamina.flag_print, dev_lamina.retry, dev_lamina.time_out = param_saved def make_Pakeage(fp: Path, func): """ 生成升级包 """ hex_update = fp file_package = fp.parent / f'{hex_update.stem}.dat' file_update_bin = fp.parent / f'{hex_update.stem}.bin' data_package, data_update_bin = func(hex_update) file_package.write_bytes(data_package) file_update_bin.write_bytes(data_update_bin) return file_package def test(): if 0: dev_lamina.frame_read(0xA9, 1) # 读ADC参考电压 dev_lamina.frame_write_one(0xA9, 2000) # 写ADC参考电压:2.0V dev_lamina.frame_write_one(0xA9, 3300) # 写ADC参考电压:3.3V dev_lamina.frame_read(0x13, 1) # 读输入电压 dev_lamina.frame_read(0x16, 1) # 读输出电压 dev_lamina.frame_read(0x97, 4) # 读校准参数: Vin_a, Vin_b, Vout_a, Vout_b dev_lamina.frame_write_one(0x97, 1000) # 写校准参数Vin_a: 1.000 dev_lamina.frame_write_one(0x97, 1500) # 写校准参数Vin_a: 1.500 dev_lamina.frame_write_one(0x98, 100) # 写校准参数Vin_b: 1.00 dev_lamina.frame_write_one(0x98, 150) # 写校准参数Vin_b: 1.50 dev_lamina.frame_write_one(0x99, 1000) # 写校准参数Vout_a: 1.000 dev_lamina.frame_write_one(0x99, 1500) # 写校准参数Vout_a: 1.500 dev_lamina.frame_write_one(0x9A, 1000) # 写校准参数Vout_a: 1.00 dev_lamina.frame_write_one(0x9A, 1500) # 写校准参数Vout_a: 1.50 if 0: dev_lamina.frame_write_str(0x82, [0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA]) dev_lamina.frame_write_str(0x82, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00]) dev_lamina.frame_write_str(0x82, [0x0A, 0x00, 0x00, 0x00, 0x00, 0x00]) dev_lamina.frame_write_str(0x82, [0xFF, 0x00, 0x00, 0x00, 0x00, 0x00]) dev_lamina.frame_write_str(0x82, [0xA1, 0x00, 0x00, 0x00, 0x00, 0x00]) dev_lamina.frame_write_str(0x82, [0x1A, 0x00, 0x00, 0x00, 0x00, 0x00]) dev_lamina.frame_write_str(0x82, [0x99, 0x99, 0x99, 0x99, 0x99, 0x99]) dev_lamina.frame_write_str(0x82, [0x00, 0x00, 0x00, 0x00, 0x00, 0x01]) if 0: dev_lamina.frame_write_one(0x52, 0x01) time.sleep(0.5) dev_lamina.frame_write_one(0x50, 0x00) if 0: while 1: code_mes = input("扫描数据") temp = code_mes[5:7] + code_mes[-10:] code_addr = [int(temp[i:i+2], 16) for i in range(0, len(temp), 2)] print(f"扫描结果: {code_mes}") print(f"载波地址: {trans_list_to_str(code_addr)}") dev_lamina.frame_read(0x100, 0x20) time.sleep(0.5) dev_lamina.frame_write_str(0x0180, list(code_mes)) time.sleep(0.5) dev_lamina.frame_read(0x180, 0x10) time.sleep(0.5) dev_lamina.frame_write_str(0x82, code_addr) time.sleep(0.5) dev_lamina.frame_read(0x80, 0x08) time.sleep(0.5) dev_lamina.frame_write_one(0xA3, 0x01) time.sleep(0.5) dev_lamina.frame_write_one(0x51, 0x01) time.sleep(5) dev_lamina.frame_read(0x0E, 0x13) time.sleep(5) dev_lamina.frame_read(0x0E, 0x13) time.sleep(0.5) dev_lamina.frame_write_one(0x50, 0x00) if 0: dev_lamina.frame_write_one(0x0054, 0x01) dev_lamina.frame_read(0x000E, 0x02) dev_lamina.frame_write_one(0x0054, 0x03) dev_lamina.frame_read(0x000E, 0x02) dev_lamina.frame_write_one(0x0054, 0x07) dev_lamina.frame_read(0x000E, 0x02) dev_lamina.frame_write_one(0x0054, 0x06) dev_lamina.frame_read(0x000E, 0x02) dev_lamina.frame_write_one(0x0054, 0x04) dev_lamina.frame_read(0x000E, 0x02) dev_lamina.frame_write_one(0x0054, 0x00) dev_lamina.frame_read(0x000E, 0x02) if 0: dev_lamina.frame_read(0x0E, 0x14) if 0: dev_lamina.frame_read(0x60, 0x60) if 0: dev_lamina.frame_read(0x70, 0x02) dev_lamina.frame_write_one(0x70, 2100) dev_lamina.frame_write_one(0x71, 2200) dev_lamina.frame_read(0x70, 0x02) dev_lamina.frame_write_one(0x70, 2300) dev_lamina.frame_write_one(0x71, 2100) dev_lamina.frame_read(0x70, 0x02) if 0: dev_lamina.frame_write_str(0x0170, list("SN202405201117-1")) dev_lamina.frame_write_str(0x0180, list("MES202405201117-2")) dev_lamina.frame_write_str(0x0190, list("D202405211500-3")) time.sleep(2) dev_lamina.frame_read(0x0170, 0x30) if 0: dev_lamina.flag_print = False dev_lamina.frame_write_one(0x52, 0x01) time.sleep(6) dev_lamina.frame_read(0x69, 0x02) for value in [40, 41.9, 42, 42.1, 56.5, 57, 57.5, 57.9, 58, 58.1, 59]: time.sleep(0.5) result = dev_lamina.frame_write_one(0x21, int(value * 10)) print(f"Write Value: {value}, result: {'Seccusss' if result else 'Fail'}.") time.sleep(0.5) dev_lamina.frame_read(0x21,1) time.sleep(0.5) value = 46 result = dev_lamina.frame_write_one(0x69, int(value * 10)) print(f"Write Value: {value} in Addr: {0x69}, result: {'Seccusss' if result else 'Fail'}.") time.sleep(0.5) value = 60 result = dev_lamina.frame_write_one(0x6A, int(value * 10)) print(f"Write Value: {value} in Addr: {0x6A}, result: {'Seccusss' if result else 'Fail'}.") for value in [45, 45.9, 46, 46.1, 56.5, 57, 57.5, 58, 59.9, 60, 60.1, 61]: time.sleep(0.5) result = dev_lamina.frame_write_one(0x21, int(value * 10)) print(f"Write Value: {value}, result: {'Seccusss' if result else 'Fail'}.") time.sleep(0.5) dev_lamina.frame_read(0x21,1) time.sleep(0.5) dev_lamina.frame_write_one(0x53, 0x01) time.sleep(4.5) dev_lamina.frame_read(0x21, 1) time.sleep(0.5) dev_lamina.frame_read(0x69, 2) dev_lamina.flag_print = True if 0: # 并机功率限值测试 dev_lamina.flag_print = False step = 0 time_start = time.time() time_interval = 120 list_power_limit = [650, 300, 200, 150, 120, 100, 80, 70, 50, 25, 10, 5, 1, 0.1, 0, 650] while True: time.sleep(1) print(time.ctime()) dev_lamina.frame_read(0x0E, 0x20) if time.time() - time_start > time_interval: if step >= len(list_power_limit): break time.sleep(0.5) time_start = time.time() value = list_power_limit[step] result = dev_lamina.frame_write_dual(0x1F, int(value * 1000)) print(f"Write Value: {value} in Addr: 0x1F by Time: {time.ctime(time_start)}. \n\tresult: {'Seccusss' if result else 'Fail'}.") step += 1 dev_lamina.flag_print = True if 0: # 启停机条件测试 dev_lamina.flag_print = False dev_lamina.frame_read(0x60, 0x0B) while True: time.sleep(1) print(time.ctime()) dev_lamina.frame_read(0x0E, 0x20) dev_lamina.flag_print = True if __name__=='__main__': mode_config = { "Log": {'com_name': None, # 'addr_645': [0x01, 0x00, 0x00, 0x00, 0x00, 0x40], }, "Debug": {'com_name': 'COM3', 'baudrate': 115200, 'parity': 'N', 'bytesize': 8, 'stopbits': 1, # 'addr_645': [0x01, 0x02, 0x03, 0x04, 0x05, 0x06], 'frame_print': True, 'time_out': 0.5, 'retry': 1, 'retry_sub': 10}, "HPLC": {'com_name': 'COM9', 'baudrate': 9600, 'parity': 'E', 'bytesize': 8, 'stopbits': 1, 'addr_645': trans_str_to_list("02 01 00 00 24 20"), 'frame_print': True, 'time_out': 3, 'time_gap': 0.1, 'retry': 3, 'retry_sub': 10}, } dev_lamina = LaminaAdapter(type_dev="SLCP101", **mode_config['Debug']) dev_lamina.frame_read(0x0100, 0x20) # dev_lamina.frame_write_one(0x51, 0x01) # dev_lamina.frame_read(0x1A0, 0x20) # dev_lamina.frame_log() # dev_lamina.frame_read(0x1A0, 0x20) # 工程-即时转换 if dev_lamina.device == 'SLCP001': file_hex = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\release\device_V1\lamina_adapter\Debug\lamina_adapter.hex") elif dev_lamina.device == 'SLCP101': file_hex = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\release\device_V2.03\lamina_adapter\Debug\lamina_adapter.hex") elif dev_lamina.device == 'SLCP102': file_hex = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\release\device_V3.01\lamina_adapter\Debug\lamina_adapter.hex") elif dev_lamina.device == 'DLSY001': file_hex = Path(r"D:\WorkingProject\LightStackOptimizer\software\lamina_optimizer\lamina_optimizer\Debug\lamina_optimizer.hex") else: file_hex = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\lamina_adapter\Debug\lamina_adapter.hex") if not file_hex.exists(): raise Exception("工程编译目标文件不存在.") print(dev_lamina.device) print(file_hex) if not hasattr(__builtins__,"__IPYTHON__"): version = "SLCP101_241030_2000_V2.03" addr = [0x24, 0x09, 0x12, 0x00, 0x00, 0x00] while True: """ 自动检测升级流程 """ ret = False while not ret or ('Regs' not in dev_lamina.output.keys()) or (version == dev_lamina.output['Regs'][0x0100][1].strip('\000')): # dev_lamina.frame_read(0x82, 3) ret = dev_lamina.frame_read(0x0100, 0x20) time.sleep(1) dev_lamina.frame_update(file_hex, makefile=True) time.sleep(3) ret = dev_lamina.frame_read(0x0100, 0x20) if ret and (version == dev_lamina.output['Regs'][0x0100][1]): dev_lamina.frame_write_one(0x52, 0x01) # print(f"address: {' '.join(map(lambda x: ('000' + hex(x)[2:])[-2:], addr))}") # dev_lamina.frame_write_str(0x82, addr) # dev_lamina.frame_read(0x82, 3) # addr[5] += 1 # if addr[5] & 0x0F >= 10: # addr[5] += 0x10 - 10