在使用OPC 采集 工控数据时,在DA模式下。采集数据通常用到 DataChangeEventHandler这个事件。但有时会遇到一些问题,就是当数据不变化时时不会触发 DataChange 这个事件的。
比如像自控系统中的一些开关量,控制模式等变量,变化不会很频繁。
例如 现地/远程 监控点,当前为远程状态,但我上层应用系统刷新页面或者退出登陆后,就丢失了这个状态信号。这里的处理方法也很简单,因为大家都知道,opc是有 Read方法的,调用读取方法就可以了。
我这里提供一个 web 应用系统与 自控系统数据通信策略。 先上个简图:
1.实线为数据采集上报流程,对于正常触发 datachange 事件的热点数据,OPC Client接收到数据之后发送至 Rabbit 的指定交换机里,Web平台从交换机获取实时数据展示。
为什么web平台获取数据要从交换机取数据而不是队列,这里是因为 web展示需要用到交换机分发的模式,试想一下,当多个人打开 Web系统如果用队列 Queue的话,每个人都无法获取到相同的消息,甚至有的人拿不到消息,因为被消费完了。(队列消费一条少一条)
数据上报流程这样就能满足了,大部分Iot 项目主要是数据采集展示,展示实时数据的时候需要用到webSocket 接入实时数据,而不是定时刷新。
2.第二条虚线就是本文讨论的第二点,非热点数据的读取上传。
对于变化频率不高的数字量,在OPCClient很容易读取到 使用AsyncRead() 就可以。这里提供的策略是,使用rabbit的Queue接收消息,前台返回需要读取的监测点号,发送到指定队列,opc client获取到点号值 发送至opcserver请求,
请求完成后将数值返回到 平台监听 的 交换机给前端展示。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章