From 2dee6d57338b7ab20421e931646058333a5a213d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=20=E6=B3=BD=E9=9A=86?= Date: Thu, 13 Jun 2024 21:41:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE=E9=A1=B9?= =?UTF-8?q?=E5=9C=B0=E5=9D=80;=20=E6=B7=BB=E5=8A=A0=E9=80=9A=E4=BF=A1?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E8=BF=94=E5=9B=9E=E5=80=BC;=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=80=9A=E4=BF=A1=E6=88=90=E5=8A=9F=E7=8E=87=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=87=BD=E6=95=B0;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/dev_LaminaAdapter.py | 60 ++++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/source/dev_LaminaAdapter.py b/source/dev_LaminaAdapter.py index dd6311b..46de959 100644 --- a/source/dev_LaminaAdapter.py +++ b/source/dev_LaminaAdapter.py @@ -26,8 +26,8 @@ modbus_map = { 0x1A: ["输入功率", 3], 0x1C: ["设备温度", 2], 0x1D: ["开关机状态", 1], - 0x1E: ["电池电压", 6], - 0x20: ["并机功率限值", 6], + 0x1E: ["电池电压", 2], + 0x1F: ["并机功率限值", 3], 0x60: ["光伏通道使能", 1], 0x61: ["最小启动输入电压", 2], @@ -90,7 +90,7 @@ modbus_map = { 0xA4: ["电感电流给定值curr_set", 2], 0xA5: ["抖动频率上限", 2], 0xA6: ["抖动频率下限", 2], - 0xA7: ["保留", 1], + 0xA7: ["电池电压判断限值", 2], 0xA8: ["保留", 1], 0xA9: ["保留", 1], 0xAA: ["保留", 1], @@ -187,49 +187,59 @@ class LaminaAdapter: print(trans_list_to_str(frame)) print(trans_list_to_str(frame_recv)) + return cnt < self.retry + def frame_read(self, daddr=0x60, dlen=0x50): self.block['data']['type'] = 'read' self.block['data']['data_addr'] = daddr self.block['data']['data_len'] = dlen frame = make_frame_dlt645(self.block) + ret = False if self.com is None: print(trans_list_to_str(frame)) else: - self._transfer_data(frame) + ret = self._transfer_data(frame) + return ret def frame_write_one(self, daddr=0x85, dval=-900): self.block['data']['type'] = 'write_one' self.block['data']['data_addr'] = daddr self.block['data']['data_val'] = dval frame = make_frame_dlt645(self.block) + + ret = False if self.com is None: print(trans_list_to_str(frame)) - return else: - self._transfer_data(frame) + ret = self._transfer_data(frame) + return ret def frame_write_dual(self, daddr=0x91, dval=600): self.block['data']['type'] = 'write_dual' self.block['data']['data_addr'] = daddr self.block['data']['data_val'] = dval frame = make_frame_dlt645(self.block) + + ret = False if self.com is None: print(trans_list_to_str(frame)) - return else: - self._transfer_data(frame) + ret = self._transfer_data(frame) + return ret def frame_write_str(self, daddr=0x82, dval=[0x06, 0x05, 0x04, 0x03, 0x02, 0x01]): self.block['data']['type'] = 'write_str' self.block['data']['data_addr'] = daddr self.block['data']['data_val'] = dval frame = make_frame_dlt645(self.block) + + ret = False if self.com is None: print(trans_list_to_str(frame)) - return else: - self._transfer_data(frame) + ret = self._transfer_data(frame) + return ret def frame_update(self, path_bin): """ 程序升级 @@ -331,6 +341,36 @@ class LaminaAdapter: if cnt >= self.retry: raise Exception("Error, Retry failed.") + +def test_communication(): + """ 通信成功率测试 """ + log_success = 0 + log_failed = 0 + log_failedseries = 0 + cnt_failedseries = 0 + time_start = time.time() + try: + while 1: + if dev_lamina.frame_read(0x0E, 0x13): + log_success += 1 + cnt_failedseries = 0 + else: + log_failed += 1 + cnt_failedseries += 1 + if log_failedseries <= cnt_failedseries: + log_failedseries = cnt_failedseries + print(f"Time Stamp: {time.ctime()}") + print(f"Success Frame: {log_success}") + print(f"Failed Frame: {log_failed}") + print(f"Max Series Failed Frame: {log_failedseries}") + time.sleep(3) + 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: {log_success / (log_success + log_failed) * 100}%") + if __name__=='__main__': mode_config = { "Log": {'com_name': None},