使用OPC标签提高性能
我正在使用Phoenix Contact创建的名为PC的名为Think'n'Do的基于PC的自动化软件包,它可以进行实时处理,读取输入/控制逻辑/写入输出的时间最长不超过50ms。我们有一台OPC服务器,每隔10毫秒从PLC读取/写入标签。将标签写入PLC并回读已写入的值会存在较长的延迟(Think'n'Do(50ms)> OPC Server(10ms)> PLC(10ms)> OPC Server(10ms)> Think'n'Do (50毫秒)),根据我的数学计算,该过程最多需要6秒钟才能完成,而该过程只需要130毫秒。
任何关于在哪里寻找或者为什么花费更长的时间的想法都将是有帮助的。
解决方案
回答
这取决于我们如何配置OPC客户端以提取数据。在OPC中订阅组时,可以指定刷新率。根据OPC客户端的不同,此值可能默认为1s甚至5s。 OPC服务器可能还限制了更新数据的频率。仅当OPC客户端订阅数据更改事件时,这才适用。
我们可以采取的另一种方法是对OPC服务器进行异步或者同步读取/写入。也有几种阅读模式。由于使用的是OPC,因此可以使用任何与OPC兼容的客户端来测试服务器,这将告诉我们问题是出在Think'n'Do中还是与PLC /服务器有关。
我使用过的最好的通用OPC客户端是OPC Quick Client。我们可以在以下位置使用TOP Server获得它:http://www.toolboxopc.com/Features/Demo/demo.shtml。只需获取TOP Server演示并安装OPC Quick Client。我们可以使用它连接到OPC服务器并浏览标签并查看数据。我使用的第二好的OPC客户端来自ICONICS(称为OPC数据间谍),可在以下位置找到:http://www.iconics.com/support/free_tools.asp。
使用OPC客户端查看读取数据的速度。确保正确设置组刷新率。我认为这些工具也可能会为我们提供一些计时信息(但是我们可以很容易地计算出6秒钟的延迟)。
回答
如果系统进行同步读取(阻塞I / O调用),然后实现应用程序的逻辑,然后执行同步写入(再次阻塞),则需要考虑到PLC的多次往返。
同步读取涉及App(请求)-> OPCServer-> PLC-> OPCServer-> App(结果)。那只是对一个项目的读取(尽管我们可以一次性请求一组项目)。
然后,类似的同步写入也涉及到App(Write)-> OPCServer-> PLC-> OPCServer-> App(Done)。
异步读写和分组读写可以帮助减少应用程序的阻塞,但是请注意应用程序可以应对这种异步行为
另一个要看的是PLC配置,在Allen-Bradley PLC上,有一个内部扫描延迟设置,用于为外部网络上的I / O请求提供服务。如果时间很短,并且数据带宽很高,那么这将使速度变慢。
回答
这里是一些地方:OPC客户端配置,OPC客户端本身,OPC服务器或者PLC本身。
这是我们应该检查的事情:
- OPC客户端配置-我们添加了OPC标签的OPC组应具有快速的扫描速度(即100毫秒至1秒钟,具体取决于用途)。通过编写值的行为,我们是否注意到值输入速度更快?如果不是,则可能存在DCOM或者网络配置问题。
- OPC客户端-下载免费的OPC客户端软件(可能从OPC Foundation网站或者主要的OPC Server软件供应商处),以查看我们是否能更快地获得价值。如果是这样,客户可能有问题。
- OPC服务器-一些OPC服务器具有诊断工具。打开这些,查看写入实际发生的时间以及读取实际发生的时间。如果我们可以回答这些问题,则可能可以确定延迟的根源是来自PLC还是OPC服务器。还请注意OPC Server的CPU使用情况,如果我们发现它使用的CPU比正常情况更多,则可能意味着OPC Server负载不足,这可能会降低性能。
- 其他-最后检查PLC,网络是否正常工作。
回答
听起来好像我们没有在OPC服务器中使用缓存。通常,OPC服务器具有缓存,如果客户端连接并且未指定要使用该缓存,则我们将无法获得所需的性能。 OPC服务器负责从设备刷新缓存,尽管刷新的标准可能因OPC服务器而异。