python通信MODBUS TCP/IP树莓pi和HMI-写值

2024-04-29 18:36:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我是法国学生,我的程序需要你的Python帮助。

我用Python编写了一个rapsberry程序,从温度和湿度传感器获取数据。

我需要通过MODBUS TCP/IP协议将这些值传送给人机界面管理器,以便在我的人机界面上显示和绘制这些值的一些图形

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

谢谢大家!
安托万


Tags: ofthe程序ip传感器温度学生modbus
1条回答
网友
1楼 · 发布于 2024-04-29 18:36:57

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

人机界面机器上的pymodbus客户机/主机

从这个主/客户端,您可以使用以下代码向带有传感器的RPi(MODBUS slave/server)发送请求(如果其中一个传感器将其数据存储在RPi上运行的pymodbus服务器以coil 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()

https://github.com/riptideio/pymodbus

Rpi上的pymodbus服务器/从机

要在RPi上运行,必须运行软件(pymodbus服务器),使其成为MODBUS从机/服务器,传感器必须将其值写入特定的存储器位置,这些存储器位置以线圈/寄存器的形式呈现给MODBUS。如何做到这一点是在https://www.youtube.com/watch?v=p3Dgd0PDjnUhttps://jacekhryniewicz.wixsite.com/website/raspberry-pi-with-modbus-tcp(有点过时)

Inhttps://github.com/riptideio/pymodbus/blob/master/examples/common/asynchronous_server.py是必须在RPi上运行的MODBUS服务器的工作示例(阅读注释,特别是# initialize your data store后面的行)

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

相关问题 更多 >