前提需求:使用上位机对昆仑通态组态屏进行指令控制
通过通道关联变量,再将变量关联事件策略,使对应通道关联的变量变化来执行不同的事件策略从而实现控制昆仑通态。
漏洞:
只能通过“变量变化”实现,因为事件策略只能识别变量变化,而不像单片机一样有中断的概念,所以导致了如果通道当前是某个值,上位机输入同一个值时事件不生效。
昆仑通态官方Modbus驱动不具备用户控制什么时候给上位机返回错误码,驱动层是一个黑盒,用户无法灵活使用。这让上位机随便输入什么返回都是response OK,除非你绝对的Modbus帧语法错误。
驱动开发工具是官方提供的只能实现部分功能的工具,这东西很抽象,不可能自己做出纯粹的代码级Modbus驱动。(用单片机直接就能在网上找出各种modbus全量源码,直接配置一下宏就能用了,为什么要用二次工具去三次模拟Modbus开发?而且模拟出来的东西具抽象)不要说找官方定制,Modbus控制返回错误码的功能不应该是必备的基础功能吗,而不是让用户花钱去定制。
问题总结:
McgsPro作Modbus从站是否可以跳出事件策略的“变量变化”固定逻辑。
McgsPro作Modbus从站是否可以手控返回Modbus错误码。
评论区交流:
也许是我没发现更好的方法,所以如果大家有更好的控制方法以及错误码的实现,欢迎评论区交流。
(我发现论坛没有任何一个帖子做上位机控制昆仑通态的,全是数据监测,如果你们做了控制按钮,就那么确信modbus返回值必然OK?这可靠性也太差了吧)
楼主最近还看过
"JSdanzi" 的回复,发表在2楼
对内容: 【没做过上位机跟屏通讯过,都是PLC跟屏,然后屏里有个通讯状态的变量,通过这个变量值给PLC是否通讯正常,你的上位机给策略 策略条件选择 上升沿不行么...】进行回复:
-----------------------------------------------------------------
嗯,事件策略就是变量“变化”嘛,正跳变或者负跳变等等,我也是用的这种方法,但是目前这导致了假设当前变量值是5,上位机也输入5,那么事件策略就不触发,这感觉是不是很奇怪?然后它modbus返回还是response OK这样就给上位机一种“我写成功了”的感觉,实际上啥也没触发。这样就不可靠了,没法通信了。
"JSdanzi" 的回复,发表在2楼
对内容: 【没做过上位机跟屏通讯过,都是PLC跟屏,然后屏里有个通讯状态的变量,通过这个变量值给PLC是否通讯正常,你的上位机给策略 策略条件选择 上升沿不行么...】进行回复:
-----------------------------------------------------------------
这种事件策略与Modbus通道组合的用法下,可以实现上位机控制,没问题。但是有两个硬性漏洞:
①事件策略只能检测“变化的输入”,这样就很抽象。
②用户无法自主控制返回错误码,比如协议里某个变量要求在1-100的输入范围,上位机输入9999,仍然response OK,那就难了啊,虽然Mcgs我可以在策略里做本次输入到底是否有效,但是上位机不知道呀,我没法主动返回消息。它还以为9999输入没毛病。
"ozoner" 的回复,发表在13楼
对内容: 【不觉得算是什么漏洞, 毕竟不是像单片机,控制主要靠中断。靠Modbus通讯也同样可以实现上位和下位机的控制,方式不同罢了。不过,出于安全及可靠性的考虑,重要参数我会尽量避免采用屏之间的控制,防止出现无...】进行回复:
-----------------------------------------------------------------
请教一下用的是什么方法实现的?modbus控制组态屏我采用的是事件关联通道的方法,但是如上所说的结果,因为事件只检测变量变化,所以发送相同的数据实际是无效的,并且不会给上位机错误码。