赞
踩
项目中需要采集西门子840D设备的数据,通过OPC方式采集。最近项目实施下来,发现现场的机器虽然是一样的,但是有的设备长时间采集没有问题,有的设备长时间运行后,会发生OPC server崩溃,导致通讯中断等各种各样的问题。通讯中断其实还好,更古怪的问题是,通讯正常(能够读到OPC Server的状态值,并且处于Run的状态),但是所有的数据均为空。
排查这个问题,首先需要对OPC客户端的代码进行梳理。看了代码,发现OPC通讯的基本流程是:
1. 建立连接
2. 创建通讯的group
3. 将要读的数据加入到group中,成功后,就会创建通讯的点,item。一个group中可以存放多个参数点。大多数设备对group中参数点的个数没有限制,只有极个别的设备会有数量的限制。即使限制,这个数字也是很大的,所以如果对采集频率有要求的,那么尽量将一个频率的采集点,放到一个group中。
4. 通过group的readSync来读取数据。仔细观察这个readSync接口,可以一次只读一个参数,也可以一次将多个数据都读回来。因此,如果对采集的性能有要求,那么应该将同一频率的采集点,放到一个group中,通过readSync,将所有的参数点,一次性读回来。读回来后,遍历每个参数点,根据状态值,判断成功与否,来决定是否提取数据即可。
OPC读取数据,常用的就是上面的流程。那么长时间运行后,连接正常,但是读到的数据变为空,就容易分析了。有以下几种可能性:
1. group本身出问题了。这种情况下,删除这个group下item,删除group,重新创建group和参数点。
2. group本身没有问题,但是通过group去读数据,出问题了。可能存在的错误代码,比如
0x800706BA(OPC server不可用)。这种情况下,怎么处理,挺个性化的,最坏的无非就是删除重连。建议还是观察,有些设备可能能恢复,有的无法恢复,就得重连。
3. 连接是没有问题的。但是这个连接是上一次连接出问题后,重新建立的连接。建立连接后,会创建group和添加item。但是添加item失败了。所以导致后面读数据,肯定为空。这个处理也是个性化的。需要观察通讯的设备的特性,进行处理。
我目前碰到的主要是2和3的问题,经过处理,现在发现,数据为空已经基本上不出现了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。