微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在尝试连接到将使用 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
>>>

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

如何向线圈发送写入以实现此目的?

如有任何帮助,我们将不胜感激。

注意:环境为 Ubuntu 20.04

解决方法

您走在正确的轨道上,但您错过了一些事情:

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

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?