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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值