python通信MODBUS TCP/IP raspberry pi和HMI-写入值

python通信MODBUS TCP/IP raspberry pi和HMI-写入值,python,raspberry-pi,tcp-ip,modbus,Python,Raspberry Pi,Tcp Ip,Modbus,我是一名法国学生,我的程序需要你们在Python方面的帮助 我的rapsberry中有一个Python程序,可以从温度和湿度传感器获取数据 我需要通过MODBUS TCP/IP协议将这些值传达给人机界面主管,以便在我的HMI中显示并制作一些这些值的图形 The IP adress of the raspberry : 172.16.0.2 The IP adress of the HMI : 172.16.0.10 我想我需要使用类似于pyModbusTCP之类的软件包,但我不知道如何使用它

我是一名法国学生,我的程序需要你们在Python方面的帮助

我的rapsberry中有一个Python程序,可以从温度和湿度传感器获取数据

我需要通过MODBUS TCP/IP协议将这些值传达给人机界面主管,以便在我的HMI中显示并制作一些这些值的图形

The IP adress of the raspberry : 172.16.0.2
The IP adress of the HMI : 172.16.0.10
我想我需要使用类似于
pyModbusTCP
之类的软件包,但我不知道如何使用它

您能否帮助我了解我是如何在Rpi和HMI之间进行通信的,例如,我如何在地址索引
1
处写入整数值
100

谢谢大家
Antoine

MODBUS是一个主协议,这意味着只能有一个主协议,其余连接的设备都是从设备(类似于USB协议,在那里称为主机和设备)。此外,在MODBUS协议中,从机从不启动通信,从机只响应请求。因此,HMI运行的机器必须是MODBUS主/客户端(这种命名约定有点毫无意义)

有关快速概述,请阅读此,然后

HMI机器上的pymodbus客户端/主机

从该主/客户端,您可以使用以下代码向RPi(MODBUS从/服务器)及其传感器发送请求(如果其中一个传感器将其数据存储在寄存器中,该寄存器由在RPi上运行的pymodbus服务器显示为
线圈1
,见下文)。这只是MODBUS中存在其他数据块的一个示例,即线圈、离散输入、输入寄存器、保持寄存器。您使用哪一个取决于您在RPi上配置MODBUS服务器的方式,通常很少使用离散输入和输入寄存器:

client = ModbusTcpClient('172.16.0.2')
client.write_coil(1, True)
result = client.read_coils(1,1)
print(result.bits[0])
client.close()

Rpi上的pymodbus服务器/从机

为此,RPi必须运行软件(pymodbus服务器),使其成为MODBUS从属/服务器,并且传感器必须将其值写入特定的内存位置,并作为线圈/寄存器呈现给MODBUS。如何做到这一点是在和(有点过时)

中,是必须在RPi上运行的MODBUS服务器的工作示例(请阅读注释,尤其是
#初始化数据存储

线圈一词起源于MODBUS协议,该协议是在自动化技术中使用带线圈的机电继电器时开发的