From 0fcafe18c14804262c0e04c016a735cb0a775baa Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 15 Nov 2024 09:54:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=9F=D1=80=D0=BE=D1=82=D0=BE=D0=BA=D0=BE?= =?UTF-8?q?=D0=BB=20JSON-Modbus=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D1=91=D0=BD=20(1=20=D0=B8=D0=B7=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modbus/client-serial-modbus.py | 6 +++--- modbus/server-serial-modbus.py | 10 +++++----- scripts/sch3.gd | 15 +++++++++------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/modbus/client-serial-modbus.py b/modbus/client-serial-modbus.py index 293fda68..8ae44f5e 100644 --- a/modbus/client-serial-modbus.py +++ b/modbus/client-serial-modbus.py @@ -83,21 +83,21 @@ def run_sync_client(udp_addr, udp_port_rx, udp_port_tx, serial_port, serial_baud rq = client.write_registers(data[0], data[1:], unit=unit_num) rc = rq.isError() if not rc: - tx_data = json_encoder.encode({'code': 'response', 'data': ''}) + tx_data = json_encoder.encode({'code': 'resp_write', 'data': ''}) sock.sendto(bytes(tx_data, 'utf-8'), (udp_addr, udp_port_tx)) elif message['code'] == 'read_holding': data = message['data'] rq = client.read_holding_registers(data[0], data[1], unit=unit_num) rc = rq.isError() if not rc: - tx_data = json_encoder.encode({'code': 'response', 'data': [data[0]] + rq.registers}) + tx_data = json_encoder.encode({'code': 'resp_holding', 'data': [data[0]] + rq.registers}) sock.sendto(bytes(tx_data, 'utf-8'), (udp_addr, udp_port_tx)) elif message['code'] == 'read_input': data = message['data'] rq = client.read_input_registers(data[0], data[1], unit=unit_num) rc = rq.isError() if not rc: - tx_data = json_encoder.encode({'code': 'response', 'data': [data[0]] + rq.registers}) + tx_data = json_encoder.encode({'code': 'resp_input', 'data': [data[0]] + rq.registers}) sock.sendto(bytes(tx_data, 'utf-8'), (udp_addr, udp_port_tx)) elif message['code'] == '': rc = False diff --git a/modbus/server-serial-modbus.py b/modbus/server-serial-modbus.py index 6333b93d..6c1b0c1f 100644 --- a/modbus/server-serial-modbus.py +++ b/modbus/server-serial-modbus.py @@ -55,24 +55,24 @@ def on_rcv(*args): if message['code'] == 'write': data = message['data'] store.setValues(3, data[0], data[1:]) - tx_data = json_encoder.encode({'code': 'response', 'data': ''}) + tx_data = json_encoder.encode({'code': 'resp_write', 'data': ''}) sock.sendto(bytes(tx_data, 'utf-8'), dst_addr) elif message['code'] == 'write_input': data = message['data'] store.setValues(4, data[0], data[1:]) - tx_data = json_encoder.encode({'code': 'response', 'data': ''}) + tx_data = json_encoder.encode({'code': 'resp_write', 'data': ''}) sock.sendto(bytes(tx_data, 'utf-8'), dst_addr) elif message['code'] == 'read_holding': data = message['data'] read_data = store.getValues(3, data[0], data[1]) read_data.insert(0, data[0]) - tx_data = json_encoder.encode({'code': 'response', 'data': read_data}) + tx_data = json_encoder.encode({'code': 'resp_holding', 'data': read_data}) sock.sendto(bytes(tx_data, 'utf-8'), dst_addr) elif message['code'] == 'read_input': data = message['data'] read_data = store.getValues(4, data[0], data[1]) read_data.insert(0, data[0]) - tx_data = json_encoder.encode({'code': 'response', 'data': read_data}) + tx_data = json_encoder.encode({'code': 'resp_input', 'data': read_data}) sock.sendto(bytes(tx_data, 'utf-8'), dst_addr) @@ -120,7 +120,7 @@ def main(): print_opts_error(opts_unk) store = CallbackModbusSlaveContext() context = ModbusServerContext(slaves=store, single=True) - log.info("серевер-заглушка Modbus serial работает: %s:%d" % (opts.serial_port, opts.serial_baud)) + log.info('серевер-заглушка Modbus serial работает: %s:%d' % (opts.serial_port, opts.serial_baud)) t = Thread(target=on_rcv, args=[store], daemon=True) t.start() StartSerialServer(context=context, framer=ModbusRtuFramer, port=opts.serial_port, timeout=opts.timeout, baudrate=opts.serial_baud) diff --git a/scripts/sch3.gd b/scripts/sch3.gd index 817d9481..8b8c90bf 100644 --- a/scripts/sch3.gd +++ b/scripts/sch3.gd @@ -19,9 +19,11 @@ class Sch3 extends unit.Unit: var tick_tx: = 0 ## Время отправки крайнего сообщения. static var json_conv: = JSON.new() - signal responce_received(addr: int, data: Array) ## Вызывается при получении сообщения c данными из регистров хранения. - signal info_received(msg: String) ## Вызывается при получении информационного сообщения. - signal except_received(msg: String) ## Вызывается при получении сообщения об исключительной ситуации. + signal resp_input(addr: int, data: Array) ## Вызывается при получении сообщения c данными из регистров входов. + signal resp_holding(addr: int, data: Array) ## Вызывается при получении сообщения c данными из регистров хранения. + signal resp_write() ## Вызывается при получении подтверждения, что команда записи выполнена + signal info_received(msg: String) ## Вызывается при получении информационного сообщения. + signal except_received(msg: String) ## Вызывается при получении сообщения об исключительной ситуации. func _init(nm: String, u: int = 1): unit = u @@ -62,11 +64,12 @@ class Sch3 extends unit.Unit: var message_code = message['code'] var message_data = message['data'] match message_code: - 'response': + 'resp_holding', 'resp_input': var addr = message_data[0] var regs = message_data.slice(1) - emit_signal('responce_received', addr, regs) - rc = true + emit_signal(message_code, addr, regs) + 'resp_write': + emit_signal(message_code) 'info': var msg = message['data'] emit_signal('info_received', msg)