在A和B两个地方各自配备了一个树莓派,在上面各自安装一套neuron与相应的西门子S7-1200通讯。
需求描述:
当A的PLC其中一个开关量动作时,向emqx开源版的broker一条消息比如{“水池液位高”=true},然后B点接收到这个消息后B点就向PLC的某个为bool类型的变量(比如“水泵停止”)写1。A点与B点通过json或者sparkerplug B发布或订阅均可。
诸位大神,有什么方法能实现上述需求吗?
在A和B两个地方各自配备了一个树莓派,在上面各自安装一套neuron与相应的西门子S7-1200通讯。
需求描述:
当A的PLC其中一个开关量动作时,向emqx开源版的broker一条消息比如{“水池液位高”=true},然后B点接收到这个消息后B点就向PLC的某个为bool类型的变量(比如“水泵停止”)写1。A点与B点通过json或者sparkerplug B发布或订阅均可。
诸位大神,有什么方法能实现上述需求吗?
这个结合 ekuiper 很好实现(创建规则:北向订阅的某数据点 1 由 false 变为 true 则通过北向发写请求给订阅的南向点位 2),可以参考使用 eKuiper 对 Neuron 采集的数据进行流式处理 | eKuiper 文档 来验证。后续联系销售获取集成 ekuiper 的 neuronex,更加方便。
万分感谢,ekuiper是全功能免费的吗?还是说部分功能收费,又要开始了解一个新的知识点ekuiper,宝宝加油
ekuiper 完全免费的
比如A点向B点的写请求主题" /neuron/mdRtu/write/req"发送出来的一个报文,报文内容如下:
{
"node": "mt",
"group": "g1",
"timestamp": 1695175981686,
"tags": [
{
"name": "LevelSwitchHighAlarm",
"value": 1
}
]
}
当B点检测到"name"=: “LevelSwitchHighAlarm”,且对应的值"value"=1时向B点的一个南向设备mdRtu下的Stop这个标签置1.
在ekuiper里的规则里我应该怎么写,这个sql语言难住我了。
相当于这两个点同 0 同 1,那伪代码规则可以像这样: SELECT tag1 as tag2;
需要注意你是要在 tag1 从 0 变 1 之后 只给 tag2 发一次写请求,还是每读到 tag 1 数据 就同步下 tag2;
仰天长叹,谁曾想一个看电气图绘制图纸,PLC编程,HMI和上位机组态的人此时此刻净混在一帮大神堆里琢磨一些自己不太擅长的领域,搞自动化的太难了
我试着做了个实验。
1.在ekuiper里我新建了一个流
{
"node": "tower",
"group": "g1",
"timestamp": 1695197544988,
"tags": [
{
"name": "HL",
"value": 1
}
]
}
或者
{
"node": "tower",
"group": "g1",
"timestamp": 1695197544988,
"tags": [
{
"name": "HL",
"value": 0
}
]
}
5.ekuiper的logs日志正常
通过上述过程我想应该是在步骤6这个地方出错了,我看neuron的帮助文档,如果要对某个点位进行写操作时正确的格式应该是
{
"uuid": "cd32be1b-c8b1-3257-94af-77f847b1ed3e",
"node": "mt",
"group": "g1",
"tag": "40003",
"value": 110
}
但是我又不知道该怎么定义这个格式,还请指教。
问题已解决,非常感谢hxy提供的思路。