python pyModbusTCP是否可以在同一程序中使用不同的Slave ID托管多个服务器,但连接到同一IP地址?

wn9m85ua  于 2022-12-28  发布在  Python
关注(0)|答案(1)|浏览(289)

因此,我尝试制作一些软件来复制Modbus设备,用于GUI和系统测试及演示。问题是,我希望在连接的同一台机器上运行一个设备模拟器Python程序,以便将其托管在Localhost上。我希望能够在一个Localhost IP上运行具有不同SlaveID的服务器-几乎模拟RTU到TCP网关。一个程序,表示TCP上不同SlaveID上的多个不同模拟设备。如果有人知道我如何运行一个服务器,但写入服务器上的不同SlaveID,或者我如何在一个程序中使用不同SlaveID运行多个服务器对象,并连接到通用IP?
不知道这有多有意义,但如果任何人有任何建议,请让我知道!
谢谢!
当我意识到我可能无法通过同一个程序托管多个服务器并连接到同一个IP上的多个服务器时,我正在为ModbusServerTCP类创建一个自定义服务器类。

sxissh06

sxissh061#

是的,这确实很有道理。
您可以使用多个ID实现服务器,这实际上是pymodbus中的一个示例的主题,您可以找到它here
另一个(可能更简单)的选择是看server_async.py示例。如果您使用参数--slaves 3运行此示例,服务器将响应ID 0x010x03。默认情况下,所有从服务器将存储相同的内容,但您可以通过在setup_server函数中修改它们来轻松更改。
还有第三个选项,您可能需要使用,您可以创建多个服务器,它们具有一个或多个ID,在不同的端口上运行。要做到这一点,您只需运行server_async.py示例的多个示例,每个示例都来自不同的命令窗口,更改--port参数。你可以在同一个IP上运行任意多个服务器,只要你使用不同的端口。显然,如果你试图在同一个IP和端口上运行两个服务器,你会得到一个错误。
对于前两个选项,请确保您运行的是最新版本的pymodbus,据报告,旧版本在多个从上下文方面存在缺陷。
我不知道你说的 * 几乎模拟RTU到TCP网关 * 是什么意思,但要知道,有一个serial forwarder实现了从RTU串行客户端到Modbus TCP服务器的简单转发器,这可能对你的目的有用。

相关问题