5779| 0
|
[intel程序猿笔记] 英特尔® EDISON 开发板上的MODBUS协议 |
在 Linux 上,您会发现各种 modbus 库,如
安装
测试 我们在测试时使用了 pymodbus,它附带在客户端和服务器的一些示例中。 串行首先,我们需要以下方式获得 "pyserial" 程序包 pip install pyserial 为测试串行,我们使用了 2 个英特尔® Edison Arduino breakout 开发板。 TX 和 RX 相交叉,即每个开发板的 IO 0 连接另一开发板的 IO 1。 为测试该设置,我们在一个开发板上使用了稍经修改的同步服务器,在另一个开发板上使用了同步客户端。 服务器修改 # run the server you want #---------------- # Tcp: #StartTcpServer(context, identity=identity, address=("localhost", 5020)) # Udp: # StartUdpServer(context, identity=identity, address=("localhost", 502)) # Ascii: #StartSerialServer(context, identity=identity, port='/dev/pts/3', timeout=1) # RTU: import mraa, serial as s mraa.Uart(0) StartSerialServer(context, identity, port='/dev/ttyMFD1', stopbits=s.STOPBITS_ONE, bytesize=s.EIGHTBITS, baudrate=115200, parity=s.PARITY_NONE) 对于客户端 [...] # client = ModbusClient('localhost', retries=3, retry_on_empty=True) #---------------------------------------------------------------------------# #client = ModbusClient('localhost', port=502) #client = ModbusClient(method='ascii', port='/dev/pts/2', timeout=1) #client = ModbusClient(method='rtu', port='/dev/pts/2', timeout=1) import mraa, serial as s mraa.Uart(0) client = ModbusClient(method='rtu', port='/dev/ttyMFD1', stopbits=1, bytesize=8, baudrate=115200, parity=s.PARITY_NONE) client.connect() [...] 串行端口通过 MRAA 进行初始化。 然后,modbus 可访问 "/dev/ttyMFD1"(例如,可参阅在 Edison 上使用 Serialx)。 如果各项设置正确,您应该会看到从客户端发来的 modbus 消息。 以太网上的 TCP/IP(如 WiFi)该服务器设置为其 IPv4 地址 xxx.xxx.xxx.xxx 及合适端口(此处为 5020)。 [...] StartTcpServer(context, identity=identity, address=("xxx.xxx.xxx.xxx", 5020)) 这同样适用于客户端: [...] #---------------------------------------------------------------------------# defer = protocol.ClientCreator(reactor, ModbusClientProtocol ).connectTCP("xxx.xxx.xxx.xxx", 5020) defer.addCallback(beginAsynchronousTest) reactor.run() 在各项设置正确后,您应该会再次看到从客户端发来的 modbus 消息,它会出现在服务器端,如下 # python AsynchronousServerExample.py INFO:pymodbus.server.async:Starting Modbus TCP Server on 192.168.178.72:5020 DEBUG:pymodbus.server.async:Client Connected [IPv4Address(TCP, '192.168.178.72', 5020)] DEBUG:pymodbus.server.async:0x0 0x1 0x0 0x0 0x0 0x6 0x0 0x5 0x0 0x1 0xff 0x0 0x0 0x2 0x0 0x0 0x0 0x6 0x0 0x1 0x0 0x1 0x0 0x1 0x0 0x3 0x0 0x0 0x0 0x8 0x0 0xf 0x0 0x1 0x0 0x8 0x1 0xff 0x0 0x4 0x0 0x0 0x0 0x6 0x0 0x1 0x0 0x1 0x0 0x8 0x0 0x5 0x0 0x0 0x0 0x8 0x0 0xf 0x0 0x1 0x0 0x8 0x1 0x0 0x0 0x6 0x0 0x0 0x0 0x6 0x0 0x2 0x0 0x1 0x0 0x8 0x0 0x7 0x0 0x0 0x0 0x6 0x0 0x6 0x0 0x1 0x0 0xa 0x0 0x8 0x0 0x0 0x0 0x6 0x0 0x3 0x0 0x1 0x0 0x1 0x0 0x9 0x0 0x0 0x0 0x17 0x0 0x10 0x0 0x1 0x0 0x8 0x10 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0x0 0x0 0x6 0x0 0x4 0x0 0x1 0x0 0x8 0x0 0xb 0x0 0x0 0x0 0x1b 0x0 0x17 0x0 0x1 0x0 0x8 0x0 0x1 0x0 0x8 0x10 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0xc 0x0 0x0 0x0 0x6 0x0 0x4 0x0 0x1 0x0 0x8 DEBUG:pymodbus.transaction:0x0 0x1 0x0 0x0 0x0 0x6 0x0 0x5 0x0 0x1 0xff 0x0 0x0 0x2 0x0 0x0 0x0 0x6 0x0 0x1 0x0 0x1 0x0 0x1 0x0 0x3 0x0 0x0 0x0 0x8 0x0 0xf 0x0 0x1 0x0 0x8 0x1 0xff 0x0 0x4 0x0 0x0 0x0 0x6 0x0 0x1 0x0 0x1 0x0 0x8 0x0 0x5 0x0 0x0 0x0 0x8 0x0 0xf 0x0 0x1 0x0 0x8 0x1 0x0 0x0 0x6 0x0 0x0 0x0 0x6 0x0 0x2 0x0 0x1 0x0 0x8 0x0 0x7 0x0 0x0 0x0 0x6 0x0 0x6 0x0 0x1 0x0 0xa 0x0 0x8 0x0 0x0 0x0 0x6 0x0 0x3 0x0 0x1 0x0 0x1 0x0 0x9 0x0 0x0 0x0 0x17 0x0 0x10 0x0 0x1 0x0 0x8 0x10 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0xa 0x0 0x0 0x0 0x6 0x0 0x4 0x0 0x1 0x0 0x8 0x0 0xb 0x0 0x0 0x0 0x1b 0x0 0x17 0x0 0x1 0x0 0x8 0x0 0x1 0x0 0x8 0x10 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0x14 0x0 0xc 0x0 0x0 0x0 0x6 0x0 0x4 0x0 0x1 0x0 0x8 DEBUG:pymodbus.factory:Factory Request[5] DEBUG:pymodbus.datastore.context:validate[5] 2:1 DEBUG:pymodbus.datastore.context:setValues[5] 2:1 DEBUG:pymodbus.datastore.context:getValues[5] 2:1 DEBUG:pymodbus.server.async:send: 00010000000600050001ff00 DEBUG:pymodbus.factory:Factory Request[1] DEBUG:pymodbus.datastore.context:validate[1] 2:1 DEBUG:pymodbus.datastore.context:getValues[1] 2:1 DEBUG:pymodbus.server.async:send: 00020000000400010101 至此,您应该可以与串行端口或基于以太网的 modbus 设备通信了。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed