我已导入pyads(Python lib通过TwinCAT库与TcAdsDll.dll进行通信。我已阅读here此库具有多线程功能。
是否也可以在多个进程中使用pyads库而不会发生冲突?
为了避免冲突,我考虑制作一个pyads包装器,它将ADS数据共享到具有多处理和队列的多个进程,但与仅执行相比,这将是相当有用的工作:
# process1:
pyads.open_port()
self.adr = pyads.AmsAddr('192.168.2.11.1.1', 851)
data = pyads.read_by_name(adr, args)
在类似的过程中:
# process2:
pyads.open_port()
self.adr = pyads.AmsAddr('192.168.2.11.1.1', 851)
data = pyads.read_by_name(adr, args):
在多个进程中运行pyads.open_port()不会引发任何错误。我希望有人可以告诉我,如果我在两个进程中都收到相同的数据而没有冲突/优先级。
[编辑:]我们通过多处理和在进程之间共享数据来实现我们的系统,以避免同步问题的风险。这完美无缺,但引入了一些数据流和编程开销。
答案 0 :(得分:1)
从我在pyads
源代码中看到的内容以及我对TcAds dll的了解,你应该对你的两个进程建立自己的连接没问题。您可以与TwinCAT系统建立多个客户端同时连接。 ADS路由器将确保数据通信的正确同步。