(原创)从昆仑通态触摸屏读取ASCII字符串的问题看变量更新机制

前面有一篇文章,探讨了昆仑通态触摸屏读取S7-1200字符串时,遇到的变量不更新的问题,并给出了变通的解决方案, 。另外一篇文章里也简单分析了S7-1200、1500里字符串的编码机制,说明了字符串里也可以包括非ASCII的字符,因此,在上位机进行转换时,要注意区别对待, 。

后来,我和昆仑通态的技术支持取得联系,他们确切告诉我:如果在策略里进行了变量的访问,该变量肯定会进行更新的。

我找机会进行了测试,将原来不刷新的变量,用一个无意义的语句读取了一次,果然更新了,原因我也想明白了:我原来用了组对象将这些通道变量进行了打包,程序利用循环语句,通过序号进行了组内元素的访问(调用结构见图1),程序里并没有直接访问变量的语句,后台并没有识别出我进行了变量的访问,因此,没有更新。

(原创)从昆仑通态触摸屏读取ASCII字符串的问题看变量更新机制

图1 变量的更新和使用框架

我总结了一下触摸屏内变量的更新机制。为了节省通讯量,提高需要变量的更新速度,触摸屏(包括各种工控软件)都有自己的变量更新机制,对于昆仑通态,连接变量有A、B、C、D四种的使用场景(可能还有其他一些需要场景我没有涉及),其中A是定义为报警和需要周期记录的变量,这些要在规定的周期内进行更新。B是前台更新,只有那些处于激活状态窗口内(用户能看到的窗口)的变量才需要更新,用户看不到的窗口内的变量更新了也没人看。D是程序里访问的变量也需要进行更新。但是,昆仑通态忽略了C方式的更新,就是我上边遇到的情况:程序进行了间接访问(见下),更新机制没有发现。

(原创)从昆仑通态触摸屏读取ASCII字符串的问题看变量更新机制

图2 有问题的程序

解决方案:使用前,进行了显式的读取。

(原创)从昆仑通态触摸屏读取ASCII字符串的问题看变量更新机制

图2 最终解决方案

小结一下:如何高速、低成本(通讯成本)地进行变量更新是工控软件一个重要课题,前提是不影响使用。希望昆仑通态后期能改进这个小BUG。

2019年2月10日


说明:

1、本文是实践经验,非严格论文,与相关产品和理论可能不完全相符。

2、如需控制、三电相关帮助,交流,请关注本人,并加入技术讨论QQ群:877456127,那里有很多热心同行。


分享到:


相關文章: