arguments = { 'read_address': 1, 'read_count': 8, 'write_address': 1, 'write_registers': [20]*8, } log.debug("Read write registers simulataneously") rq = await client.readwrite_registers(unit=UNIT, **arguments) rr = await client.read_holding_registers(1, 8, unit=UNIT) assert(rq.function_code < 0x80) # test that we are not an error assert(rq.registers == [20]*8) # test the expected value assert(rr.registers == [20]*8) # test the expected value except Exception as e: log.exception(e) client.transport.close() await asyncio.sleep(1) if __name__ == '__main__': # ----------------------------------------------------------------------- # # For testing on linux based systems you can use socat to create serial # ports # ----------------------------------------------------------------------- # # socat -d -d PTY,link=/tmp/ptyp0,raw,echo=0,ispeed=9600 PTY, # link=/tmp/ttyp0,raw,echo=0,ospeed=9600 loop, client = ModbusClient(schedulers.ASYNC_IO, port='/tmp/ptyp0', baudrate=9600, method="rtu") loop.run_until_complete(start_async_test(client.protocol)) loop.close()
adress_register = 0x0 # 起始寄存器 length_data = 0x40 # 数据长度 HEX= adress_gateway = 0x1 # 云盒地址 rr = await client.read_holding_registers(adress_register, length_data, unit=adress_gateway) print('rr: %s' % repr(rr.registers)) print(len(rr.registers)) # assert(rq.function_code < 0x80) # test that we are not an error # assert(rq.registers == [20]*8) # test the expected value # assert(rr.registers == [20]*8) # test the expected value except Exception as e: log.exception(e) client.transport.close() await asyncio.sleep(1) if __name__ == '__main__': # ----------------------------------------------------------------------- # # For testing on linux based systems you can use socat to create serial # ports # ----------------------------------------------------------------------- # # socat -d -d PTY,link=/tmp/ptyp0,raw,echo=0,ispeed=9600 PTY, # link=/tmp/ttyp0,raw,echo=0,ospeed=9600 loop, client = ModbusClient(schedulers.ASYNC_IO, port='COM2', baudrate=115200, method="rtu") loop.run_until_complete(start_async_test(client.protocol)) loop.close()
parser.add_argument("serialPort", help="The serial port device to use") parser.add_argument("--httpListenPort", help="The port for the HTTP server to listen on", type=int, default=8080) parser.add_argument("--verbose", help="Use verbose logging", action="store_true") args = parser.parse_args() logging.basicConfig() log = logging.getLogger() if args.verbose: log.setLevel(logging.DEBUG) else: log.setLevel(logging.INFO) log.info("Listening on port {}, using device {}".format(args.httpListenPort, args.serialPort)) loop, client = AsyncModbusSerialClient(schedulers.ASYNC_IO, port=args.serialPort, baudrate=19200, method="rtu") modbus = Modbus(client.protocol) handler = HttpHandler(modbus) app = web.Application() app.add_routes([ web.get("/", handler.handle_root), web.get("/summary", handler.get_summary), web.get("/mode/{flag}", handler.get_mode_status), web.post("/mode/{flag}", handler.set_mode_status), web.post("/setSetting/{setting}/{value}", handler.set_setting) ]) try: loop.run_until_complete(web._run_app(app, port=args.httpListenPort)) finally: loop.close()