故事作者:万泉河

最近创作

看看TA的故事

【万泉河】PLC全局变量使用大法-2

已锁定

万泉河

  • 帖子

    10900
  • 精华

    132
  • 被关注

    1008

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

【万泉河】PLC全局变量使用大法-2

2886

3

2021-03-14 09:46:25

【万泉河】PLC全局变量M正确使用大法-2


我写过好几篇关于PLC程序里面建议不要用全局变量M的文章了。

这里就不一一转发了,感兴趣的同学自己去网上搜索到。


在讨论的过程中, 有反驳者找出的理由说,既然西门子在PLC里面设计了这块内存区,就是让人使用的,所以可以推论,你不让人使用M,肯定是没有道理的。


好吧,我们再通过本文再向大家演示一把正确使用M变量的大法。


先跑个题。


曾经有人在***里咨询调试WINCC程序的问题,问该如何逐行逐句调试,监控程序在相应的行的数据结果?


然后有人回答,用MSGBOX。


这回答是对的。 用MSGBOX可以的。

程序运行到相应的位置,通过MSGBOX弹出对话框, 对话框的内容显示关心的变量的值。



然而不是正确答案。

因为这样的话,有缺陷。为了调试增加的监控语句,会影响到程序的正常运行,所以一旦调通之后,需要赶紧屏蔽。然后程序再调试一段,又要再次关注程序在这个位置的运行值,还需要再来恢复一次。

如此不停的加断点,屏蔽,再加断点,再屏蔽,是很麻烦的。

而如果这个断点在循环语句里面, 那调试起来可累了。需要重复鼠标来点确定。


然而最麻烦的是, 如果哪一段功能调试完,忘了把这个断点删掉, 那将来对用户使用,就是个灾难。


所以,对正常的程序调试,不是个正确的处理办法。


正确的答案是用trace功能。


Trace功能各种编程语言都有。


在WINCC VBS里面指令为HMIRuntime.Trace,  而在C脚本里面,为printf指令。

方法是,在程序的需要的位置加入相应的指令,WINCC运行时,在运行画面中添加一个全局诊断的窗口,这些输出结果就在窗口中显示了。


这个画面窗口可以放在单独的画面中, 只在调试时程序员调出来查看。而当用户正常使用时,这些数据并看不到。


而这些指令有没有在运行?一直在的。无非最终用户看不到而已。


我在所著的上一本书《西门子WINCC从入门到精通》中P137-140页详细讲解了此功能,但看来还是有很多人没学习到。



一个正常运行的程序,从来都是诊断脚本夹杂在正常的功能代码中的,即便到最后发布, 也不会删除。甚至像WINDOWS操作系统, OFFICE软件,以及西门子的STEP7, TIA PORTAL等软件, 也都是。


因为并不会影响正常功能的运行,所以从来也不会有人特别关心它们。


现在回到正题。


在PLC程序中要实现类似的trace功能,该如何做呢?


就是,我们需要在其中一些关键部位加入必要的用于输出诊断的程序,然而这块功能又不参与正常的逻辑控制,即便有数据用的不小心,产生一些数据冲突等,也不影响主机本身的运行功能。


对咯!答案就是用M变量。


在FB中使用M变量。

因为我们的正常的程序功能根本不会使用M变量,甚至,在FB中如果使用了, 还会功能不完整,出错误不能实现真正需要的功能。


所以,如果有幸,见到了我在FB中使用了M变量,那基本上可以断定,是程序诊断用的!使用M变量比起给FB增加静态变量的好处在于,程序的接口没有改变,因而不需要重新编译和重新生成背景数据块。所以相当方便。


比如这样:




我在程序中加入诊断,为了观察这里逻辑的运行情况。然而如果调试成功了,到最后设备交付,我也不会删除它们,因为,早晚有一天有再次诊断需要的时候, 我再在监控表中看一看即可。






另外, 新书    《PLC标准化编程原理方法》 正在紧锣密鼓撰写中,让关心的读者们久等了,非常抱歉。


因为忙于写书,所以没有时间打理公众号,但未来,我会酌情摘录一些书中的段落,提前发布在公众号上,欢迎大家持续关注。


【万泉河】PLC全局变量使用大法-2 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3363条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。