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