积累修改;
This commit is contained in:
@@ -29,6 +29,7 @@ frame_modbus = {
|
||||
0x04: [5, 1, 2],
|
||||
0x06: [8, 0],
|
||||
0x07: [8, 3, 2, {0x01: 2, 0x02: 0, 0x03: 0}],
|
||||
0x08: [5, 3, 2, {0x01: 1, 0x02: 0x22, 0x03: 1}],
|
||||
0x10: [8, 0],
|
||||
0x11: [11, 2, 7]
|
||||
}
|
||||
@@ -94,6 +95,19 @@ def make_frame_modbus(block:dict) -> bytearray:
|
||||
|
||||
frame.append(block['file_block_size'] // 256)
|
||||
frame.append(block['file_block_size'] % 256)
|
||||
elif block['type'] == 'log':
|
||||
""" 事件记录系列报文 """
|
||||
frame.append(0x08)
|
||||
if block['step'] == 'start':
|
||||
frame.append(0x01)
|
||||
frame.append(block['data_len'] // 0x100 % 0x100)
|
||||
frame.append(block['data_len'] % 0x100)
|
||||
elif block['step'] == 'next':
|
||||
frame.append(0x02)
|
||||
elif block['step'] == 'end':
|
||||
frame.append(0x03)
|
||||
else:
|
||||
raise Exception("Modbus Log Frame Step Error.")
|
||||
else:
|
||||
""" 数据读取系列报文 """
|
||||
data_addr = block['data_addr']
|
||||
@@ -217,6 +231,12 @@ def check_frame_modbus(frame:bytes, block:dict) -> dict:
|
||||
else:
|
||||
raise Exception("Frame read data length error.")
|
||||
output['result'] = True
|
||||
elif output['code_func'] == 0x08:
|
||||
if frame[2] == 0x02:
|
||||
output['Regs'] = display_data(0x200, frame[5:-2], block['data_define'])
|
||||
else:
|
||||
raise Exception(" Log SubFunc code error.")
|
||||
output['result'] = True
|
||||
elif output['code_func'] == 0x06:
|
||||
""" 单个数据写入帧 """
|
||||
output['result'] = True
|
||||
@@ -374,6 +394,32 @@ def display_data(address: int, data: bytes, modbus_map: dict=modbus_map) -> dict
|
||||
""" 正序数值表示 """
|
||||
data_len = current_map[2]
|
||||
item = list(map(lambda x: x, data[:2 * data_len]))
|
||||
elif current_map[1] == 8:
|
||||
""" 事件记录解析 """
|
||||
data_len = current_map[2]
|
||||
time_stamp, event_id, event_num = struct.unpack('<IBB', data[:6])
|
||||
item = f"Event: {event_id}\n"
|
||||
item += f"\ttime: {time_stamp}\n"
|
||||
item += f"\tnumber: {event_num}\n"
|
||||
if event_id == 2:
|
||||
""" 故障记录事件 """
|
||||
info_len, status, flag_fault, flag_alarm, volt_in, volt_out, curr_in, curr_induc, cbox_power_limit, flag_control = struct.unpack('<BBHHhhhhhH', data[6:6+18])
|
||||
info = data[6+18:6+18+info_len].decode().strip('\x00')
|
||||
item += f"\tData: {info}\n"
|
||||
item += f"\t\tstatus: {status:x}\n"
|
||||
item += f"\t\tflag_fault: {flag_fault:x}\n"
|
||||
item += f"\t\tflag_alarm: {flag_alarm:x}\n"
|
||||
item += f"\t\tvolt_in: {volt_in / 10}\n"
|
||||
item += f"\t\tvolt_out: {volt_out / 10}\n"
|
||||
item += f"\t\tcurr_in: {curr_in / 100}\n"
|
||||
item += f"\t\tcurr_induc: {curr_induc / 100}\n"
|
||||
item += f"\t\tcbox_power_limit: {cbox_power_limit / 10}\n"
|
||||
item += f"\t\tflag_control: {flag_control:b}\n"
|
||||
else:
|
||||
info_len, = struct.unpack('<B', data[6:6+1])
|
||||
info = data[7:7+info_len].decode().strip('\x00')
|
||||
item += f"\tData: {info}\n"
|
||||
|
||||
|
||||
output_data[idx] = data_label, item
|
||||
idx += data_len
|
||||
|
||||
Reference in New Issue
Block a user