sql - 当布尔变量改变他的状态时引发事件
问题描述
我正在将三菱 PLC 与我们在 ViualBasic 中构建的“廉价手工”HMI 通信。
我需要在我的 VisualBasic HMI 中跟踪 PLC 内存中布尔变量的值,我们通过使用 OPC 服务器来实现这一点。这一步没有大的并发症。
接下来,我必须在 SQL 数据库中写入这个变量的状态,当这个变量改变他的状态时,类似于:
If MyVar Changes from 0 to 1 Then
Write "True" in SQL (1 entry)
End If
If MyVar Changes from 1 to 0 Then
Write "False" in SQL (1 entry)
End If
我的问题是我不知道如何在不不断轮询变量的情况下捕捉变量状态的变化。这意味着我不断地向我的 SQL 数据库中添加条目,但我只希望每个状态变量更改 1 个条目。
解决方案
大多数工业协议通过请求-响应系统工作,并且知道变量已更改的唯一方法是通过不断轮询。
还有其他协议通过发布订阅方法工作,使用它们,您可以在每次变量更改时接收更新,而无需进行轮询。支持该系统的两个协议是 MQTT(通过代理)和 OPC UA 订阅。
我不知道您使用的 OPC 服务器是否为 UA,是否支持订阅,也许您应该检查一下。
推荐阅读
- sql-server - 从 SQL 查询派生值
- json - 从包含多个值的 json 输出文件中提取最新值
- python - 在 Multiindex 数据框中查找每个索引的第一次出现
- java - 阻塞 EntityManager 操作
- excel - Excel VBA TextToColum 部分使用 MS 项目日期
- r - 在 R 中编写一个简单的函数
- javascript - 使用 fetch() 将表单数据发布到数据库(mongodb)并在视图中呈现表单的主体(最好是 EJS)
- python - Django中隐式多对多(多对多对多)关系的模型字段
- docker - Jenkins 的 Docker Swarm 插件无法解析环境变量
- c# - Linq to SQL Left Join with where 子句寻找条件或空