是否可以通过同一应用程序中的多个线程与OPC服务器进行通信?

问题描述:

我正在开发一个自动化项目,我需要并行处理21个固定安装的条形码扫描仪(即所有扫描仪将始终运行),以实现我正在使用多线程。这里每个线程将处理一个条码扫描器。是否可以通过同一应用程序中的多个线程与OPC服务器进行通信?

现在,我想用O.P.C.更新P.L.C(DB /内存块/标签)的扫描数据所以,我想知道是否可以通过在多线程应用程序中使用O.P.C客户端来更新P.L.C值。
我使用Siemens P.L.C(型号: - CPU 315-2 PN/DP,步骤7,300系列)。

我也想知道我是否应该O.P.C服务器或LibNoDave去。将会有大约300个标签(P.L.C中的数据块),我需要阅读并检查Data Change事件。

+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

想你会发现这个线程有用:http://*.com/questions/18040338/delphi-omnithreadlibrary-opc-client –

+0

基于我所观察到的,OPC DA似乎给了一个“数据变更事件”每线程分配了OPC客户端,但我不知道这是否由规格保证。 – jrh

简短的回答是肯定的,但还有更多的它,由A穆雷所提供的链接是很好看的。 您还应该考虑是否要使用多线程可以真正为您带来任何速度优势。使用OPC-DA,只需一个线程即可轻松实现每秒数千次数据更改 - 您是否真的需要更多的线程?

+0

亲爱的朋友,谢谢你的回复。我没有使用多线程来获取数据更改事件。这是为了在我得到数据更改事件时执行并行活动,例如打开扫描器的套接字并同时触发扫描器。 –

+0

如果并行活动没有做OPC相关的任何事情,那么使用它没有任何问题。实际上,在编写OPC回调处理程序时,经常需要使用多线程方法,因为您不应该在长时间内阻止回调。因此,在回调处理程序中,您只需将数据存储在某处,然后从单独的线程中检索数据。 – ZbynekZ

最好把你的体系结构尽可能简单,避免大量的线程,多线程可能会不必要地复杂的事情,并也有性价比的情况下,线程需要同步支付。由于你有一个OPC服务器和多个连接到它的线程,你必须小心不要让线程互相干扰。如果我是你,我将拥有一个线程,用所有条形码扫描器建立OPC服务器订阅。然后是另一个线程来监视该线程,看看它是否还在工作。