pymodbus数据_如何使用pymodbus为外部modbus客户机编写输入寄存器,以便读取它们

感谢Marker和所有在线示例。我终于如愿以偿了。希望这能帮助别人。

我遇到了几个难题:

我尝试了下面的例子,我在网上找到了所有这些例子,都使用了pymodbus.server.async而不是pymodbus.server.sync。我发现无法导入pymodbus.server.async,因为“async”是python3.7中的保留字!(不在旧版本的python中)。不管怎样,我都希望使用pymodbus.server.sync,因为我希望尽可能避免导入Twisted。此服务器最多有1-3个客户端连接到它。

所有显示更新编写器的示例都使用了Twisted中的“loopingcall”。我不知道什么是扭曲的,我不想使用它,除非我不得不。我熟悉多处理和线程。我已经在一个进程中启动了modbustcpserver,并试图围绕存储/上下文创建托管对象,这样我就可以有一个不同的进程进行更新。但这行不通:我猜StartTcpServer不喜欢接收托管对象(?)我不想深入研究这个功能。

其中一个例子评论说可以使用一个python线程,解决了这个问题。我仍然在一个进程中启动ModbustCPServer,但是在我调用“StartTcpServer”之前,我启动了一个线程,而不是一个使用更新编写器的进程。然后,我不需要将存储/上下文放在托管对象中,因为线程可以看到与启动它的进程相同的数据空间。我只需要另一个托管对象来向这个线程发送消息,就像我以前对进程所做的那样。

Sooo…

首先我必须这样做:

from threading import Thread

然后,我像以前一样在一个进程中启动了以下内容,但在调用starttcpserver之前,我启动了更新的写入线程(所有start-addr、init-val和num-addrs变量都在前面设置)。

discrete_inputs_obj = ModbusSequentialDataBlock(di_start_addr, [di_init_val]*di_num_addrs)

你可能感兴趣的:(pymodbus数据)