添加645地址输入参数;

更新变长数据项写报文;
更新解析数据项定义;
This commit is contained in:
何 泽隆
2024-04-13 21:49:37 +08:00
parent c97ec0835d
commit 147aad00a5

View File

@@ -91,8 +91,8 @@ modbus_map = {
0xA2: ["温度补偿temp2_b", 2], 0xA2: ["温度补偿temp2_b", 2],
0xA3: ["系统工作模式", 1], 0xA3: ["系统工作模式", 1],
0xA4: ["电感电流给定值curr_set", 2], 0xA4: ["电感电流给定值curr_set", 2],
0xA5: ["保留", 1], 0xA5: ["抖动频率上限", 2],
0xA6: ["保留", 1], 0xA6: ["抖动频率下限", 2],
0xA7: ["保留", 1], 0xA7: ["保留", 1],
0xA8: ["保留", 1], 0xA8: ["保留", 1],
0xA9: ["保留", 1], 0xA9: ["保留", 1],
@@ -144,6 +144,20 @@ def make_frame_modbus(block:dict):
data_val //= 0x1_0000 data_val //= 0x1_0000
frame.append(data_val // 256 % 256) frame.append(data_val // 256 % 256)
frame.append(data_val % 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)) crc = calculator.checksum(bytearray(frame))
frame.append(crc % 256) frame.append(crc % 256)
@@ -252,7 +266,7 @@ def test2():
print(frame_string) 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 = { block_modbus = {
'addr_dev' : 0x01, 'addr_dev' : 0x01,
'data_addr' : daddr, 'data_addr' : daddr,
@@ -261,7 +275,7 @@ def frame_read(daddr=0x60, dlen=0x50):
} }
frame1 = make_frame_modbus(block_modbus) frame1 = make_frame_modbus(block_modbus)
block_dlt645 = { block_dlt645 = {
'addr' : [0x01, 0x02, 0x03, 0x04, 0x05, 0x06], 'addr' : dev_addr,
'data' : frame1, 'data' : frame1,
} }
frame2 = make_frame_dlt645(block_dlt645) 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) output_text = display_data(block_modbus['data_addr'], frame4)
print(output_text) 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 = { block_modbus = {
'addr_dev' : 0x01, 'addr_dev' : 0x01,
'data_addr' : daddr, 'data_addr' : daddr,
@@ -285,13 +299,13 @@ def frame_write_one(daddr=0x85, dval=-900):
} }
frame1 = make_frame_modbus(block_modbus) frame1 = make_frame_modbus(block_modbus)
block_dlt645 = { block_dlt645 = {
'addr' : [0x01, 0x02, 0x03, 0x04, 0x05, 0x06], 'addr' : dev_addr,
'data' : frame1, 'data' : frame1,
} }
frame2 = make_frame_dlt645(block_dlt645) frame2 = make_frame_dlt645(block_dlt645)
com.write(bytearray(frame2)) 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 = { block_modbus = {
'addr_dev' : 0x01, 'addr_dev' : 0x01,
'data_addr' : daddr, 'data_addr' : daddr,
@@ -300,7 +314,22 @@ def frame_write_dual(daddr=0x91, dval=600):
} }
frame1 = make_frame_modbus(block_modbus) frame1 = make_frame_modbus(block_modbus)
block_dlt645 = { 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, 'data' : frame1,
} }
frame2 = make_frame_dlt645(block_dlt645) frame2 = make_frame_dlt645(block_dlt645)
@@ -339,7 +368,7 @@ def main_webui():
com = None com = None
if __name__ == "__main__": if __name__ == "__main__":
com = Serial("Com16", baudrate=115200, parity='N', timeout=2) com = Serial("Com16", baudrate=115200, parity='N', timeout=2)
address = [0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA]
pass pass