MODBUS是一个 单主 协议,意味着只能有一个主设备,其余连接设备是从设备( http://www.ni.com/white-paper/52134/en/ ,类似于USB协议,称为 主办 和 设备 那里 )。此外,在MODBUS协议中,从站从不启动通信,从站仅响应请求。因此,HMI运行的机器必须是MODBUS主站/客户机(这个命名约定有点无意义)
有关快速概述,请阅读此内容 的 https://www.reddit.com/r/PLC/comments/7bqppu/using_raspberry_pi_as_modbus_slave_and/ 强> 和 http://www.simplymodbus.ca/TCP.htm
的 HMI机器上的pymodbus客户端/主站 强>
从这个主站/客户端,您可以使用以下代码将请求发送到RPi(MODBUS从站/服务器)及其传感器(如果其中一个传感器将其数据存储在作为总线提供给的总线中的寄存器中 coil 1 通过在RPi上运行的pymodbus服务器,见下文)。这只是其他一个例子 数据块 在MODBUS,即 线圈,离散输入,输入寄存器,保持寄存器 您使用它们中的哪一个取决于您在RPi上配置MODBUS服务器的方式,通常很少使用离散输入和输入寄存器:
coil 1
client = ModbusTcpClient('172.16.0.2') client.write_coil(1, True) result = client.read_coils(1,1) print(result.bits[0]) client.close()
https://github.com/riptideio/pymodbus
的 Rpi上的pymodbus服务器/从服务器 强>
为此,RPi必须运行软件(pymodbus服务器),使其成为MODBUS从站/服务器,并且传感器必须将其值写入特定的存储器位置,这些存储器位置作为线圈/寄存器呈现给MODBUS。如何做到这一点 https://www.youtube.com/watch?v=p3Dgd0PDjnU 和 https://jacekhryniewicz.wixsite.com/website/raspberry-pi-with-modbus-tcp (有点过时了)
在 的 https://github.com/riptideio/pymodbus/blob/master/examples/common/asynchronous_server.py 强> 是一个必须在RPi上运行的MODBUS服务器的工作示例(阅读注释,尤其是后面的行 # initialize your data store )
# initialize your data store
这个单词 线圈 起源于MODBUS协议的过去,该协议是在自动化技术中使用带线圈的机电继电器时开发的