使用带有 libmodbus 或 pymodbus 的 USB 连接在两台 PC 之间进行 Modbus 模拟

Posted

技术标签:

【中文标题】使用带有 libmodbus 或 pymodbus 的 USB 连接在两台 PC 之间进行 Modbus 模拟【英文标题】:Modbus Simulation between two PCs using a USB connection with libmodbus or pymodbus 【发布时间】:2021-08-27 08:47:47 【问题描述】:

我正在尝试连接到将使用 modbus 协议相互通信的 PC(一主一从),我想使用 pymodbus (Python) 或 libmodbus (C++) 来实现这一点,但我对 Modbus 相对较新我不知道从哪里开始。 我已经使用 pymodbusTCP 构建(我认为)一个 Modbus 服务器,但我不确定如何使用 pymodbusTCP 与另一台 PC 通信。

我已经写了下面给定的代码:

#!/bin/python
import sys
sys.path.append("..")
from pyModbusTCP.server import ModbusServer, DataBank
from time import sleep
from random import uniform

# Create an instance of ModbusServer
server = ModbusServer("127.0.0.1", 12345, no_block=True)

try:
    print("Start server ...")
    server.start()
    print("Server is online")
    while True:
        continue    

except:
    print("Shutdown server ...")
    server.stop()
    print("Server is offline")

当我从本地主机(作为奴隶)连接时,我可以连接。

>>> from pyModbusTCP.client import ModbusClient
>>> 
>>> client = ModbusClient(host="127.0.0.1", port=12345)
>>> client.open()
True
>>>

如何连接两台电脑,一台作为主机,另一台作为从机?

如何向线圈发送写入以实现这一点?

任何帮助将不胜感激。

注意:环境为 Ubuntu 20.04

【问题讨论】:

【参考方案1】:

你在正确的轨道上,但你错过了几件事:

-对于服务器,需要定义和初始化Modbus寄存器和线圈。

-在客户端,您需要定义查询以读取这些寄存器和/或线圈。

Foy pymodbus,最好的开始方法是查看示例。下载、编辑端口(默认为 5020)并从 GitHub 存储库运行 server example 并从您的客户端运行一些查询:

rr = client.read_coils(1, 1, unit=0x01)
print(rr.registers)

您可以在任何async client examples 上找到其他类型的查询。

一旦您建立并运行客户端-服务器连接,您就可以查看服务器的详细信息,并可能定义更多具有不同 ID 的从站或设置具有更有意义值的寄存器。

在您熟练掌握 pymodbus 之后,libmodbus 应该非常简单。

【讨论】:

以上是关于使用带有 libmodbus 或 pymodbus 的 USB 连接在两台 PC 之间进行 Modbus 模拟的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pymodbus TCP 库获取浮点值?

如何停止pymodbus异步ModbusTcpServer?

Pymodbus 读取和解码寄存器值

QT中实现libmodbus库的使用

如何让 pymodbus 与 PLC 正确通信?

pymodbus“单位”参数是啥意思?