From 147aad00a57e0d934f5a02cb2f7778dc60b09001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=20=E6=B3=BD=E9=9A=86?= Date: Sat, 13 Apr 2024 21:49:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0645=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E5=8F=82=E6=95=B0;=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=8F=98=E9=95=BF=E6=95=B0=E6=8D=AE=E9=A1=B9=E5=86=99=E6=8A=A5?= =?UTF-8?q?=E6=96=87;=20=E6=9B=B4=E6=96=B0=E8=A7=A3=E6=9E=90=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=A1=B9=E5=AE=9A=E4=B9=89;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/main.py | 47 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/source/main.py b/source/main.py index c2d1712..d1e3086 100644 --- a/source/main.py +++ b/source/main.py @@ -91,8 +91,8 @@ modbus_map = { 0xA2: ["温度补偿temp2_b", 2], 0xA3: ["系统工作模式", 1], 0xA4: ["电感电流给定值curr_set", 2], - 0xA5: ["保留", 1], - 0xA6: ["保留", 1], + 0xA5: ["抖动频率上限", 2], + 0xA6: ["抖动频率下限", 2], 0xA7: ["保留", 1], 0xA8: ["保留", 1], 0xA9: ["保留", 1], @@ -144,6 +144,20 @@ def make_frame_modbus(block:dict): data_val //= 0x1_0000 frame.append(data_val // 256 % 256) frame.append(data_val % 256) + elif block['type'] == "write_str": + frame.append(0x10) + data_len = len(block['data_val']) + data_val = block['data_val'] + if data_len > 0x0100: + raise("modbus data len oversize.") + frame.append(data_addr // 256 % 256) + frame.append(data_addr % 256) + frame.append(0x00) + frame.append(data_len // 2) + frame.append(data_len) + for i in range(data_len//2): + frame.append(data_val[2*i + 1]) + frame.append(data_val[2*i]) crc = calculator.checksum(bytearray(frame)) frame.append(crc % 256) @@ -252,7 +266,7 @@ def test2(): print(frame_string) -def frame_read(daddr=0x60, dlen=0x50): +def frame_read(daddr=0x60, dlen=0x50, dev_addr=[0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA]): block_modbus = { 'addr_dev' : 0x01, 'data_addr' : daddr, @@ -261,7 +275,7 @@ def frame_read(daddr=0x60, dlen=0x50): } frame1 = make_frame_modbus(block_modbus) block_dlt645 = { - 'addr' : [0x01, 0x02, 0x03, 0x04, 0x05, 0x06], + 'addr' : dev_addr, 'data' : frame1, } frame2 = make_frame_dlt645(block_dlt645) @@ -276,7 +290,7 @@ def frame_read(daddr=0x60, dlen=0x50): output_text = display_data(block_modbus['data_addr'], frame4) print(output_text) -def frame_write_one(daddr=0x85, dval=-900): +def frame_write_one(daddr=0x85, dval=-900, dev_addr=[0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA]): block_modbus = { 'addr_dev' : 0x01, 'data_addr' : daddr, @@ -285,13 +299,13 @@ def frame_write_one(daddr=0x85, dval=-900): } frame1 = make_frame_modbus(block_modbus) block_dlt645 = { - 'addr' : [0x01, 0x02, 0x03, 0x04, 0x05, 0x06], + 'addr' : dev_addr, 'data' : frame1, } frame2 = make_frame_dlt645(block_dlt645) com.write(bytearray(frame2)) -def frame_write_dual(daddr=0x91, dval=600): +def frame_write_dual(daddr=0x91, dval=600, dev_addr=[0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA]): block_modbus = { 'addr_dev' : 0x01, 'data_addr' : daddr, @@ -300,7 +314,22 @@ def frame_write_dual(daddr=0x91, dval=600): } frame1 = make_frame_modbus(block_modbus) block_dlt645 = { - 'addr' : [0x01, 0x02, 0x03, 0x04, 0x05, 0x06], + 'addr' : dev_addr, + 'data' : frame1, + } + frame2 = make_frame_dlt645(block_dlt645) + com.write(bytearray(frame2)) + +def frame_write_str(daddr=0x82, dval=[0x06, 0x05, 0x04, 0x03, 0x02, 0x01], dev_addr=[0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA]): + block_modbus = { + 'addr_dev' : 0x01, + 'data_addr' : daddr, + 'data_val' : dval, + 'type' : 'write_str', + } + frame1 = make_frame_modbus(block_modbus) + block_dlt645 = { + 'addr' : dev_addr, 'data' : frame1, } frame2 = make_frame_dlt645(block_dlt645) @@ -339,7 +368,7 @@ def main_webui(): com = None if __name__ == "__main__": com = Serial("Com16", baudrate=115200, parity='N', timeout=2) - + address = [0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA] pass