回复:PLC追踪功能与程序调试探讨

已锁定

西门子某研发小兵

  • 帖子

    8
  • 精华

    0
  • 被关注

    0

论坛等级:游民

注册时间:2023-07-05

黄金 黄金 如何晋级?

发布于 2024-06-24 09:43:42

20楼

展开查看
以下是引用宝冬在2024-06-22 08:49:22的发言 >19楼

过程中的故障异常,还是要靠PLC代码筛查捕获,并呈现到HMI上。


而具备良好这种能力的程序,并非一日而成,或者说一上来就设计出来的,是实践出来的。而Trace恰恰是加速这个代码优化过程的最佳迭代工具。这才是符合规律、顺其自然的Trace用法。现在的Trace还不适合做大海捞针的筛查。


Trace需要与程序内部自带诊断性质的数据结构,相互配合,才能更好发挥作用。


调试的方法本质上只有一种,那就是排除法。 排除法,越是在良好解耦的架构中,排除的效率越高。把问题局限化,收敛溯源的速度越快。


打断点和下一步的手段,其实在这个讲求解耦和面向对象的时代,有点过时了,那还是基于面向过程思维的产物,虽然它也有用。

这个时代的方法,应该是讲求在诸多模块和局部元素的层面,可以直觉化的迅速剥离排除无关性的。


比如下面这个Trace,我可以直觉性的看出:这几个相互竞争的设备FB实例中,它们各自的代码,在每个扫描周期中都具体干了什么。

这包括:在一个扫描周期中,从前到后的代码执行,哪个代码段被执行了,哪个代码段没被执行。在一个代码段中有好几条逻辑路径,它们各自在不同情况下,走的究竟是哪一条路径。在各个连续的扫描周期中,它们各自是如何随着外部情况变化,在不同的元素和路径中,来回动态切换的。从哪个代码段进入某个功能场景,又是在哪个代码段退出该场景的。等等



Trace是一种语言。平时编程用的各种语言都是静态的,Trace是实时动态的,可以讲故事。程序员就相当于导演或编剧,要设计分场大纲和剧本。


比如,在上图Trace中:

所有向下的凹槽缝隙,都代表着一个正在执行中的异步任务,当然了每个凹槽的任务都不同。凹槽底部放大后,可以看到并不平坦,都在讲述故事细节。

每一根向上树立突起的“杆子”,都代表着不同异步任务之间切换的一个间隔扫描周期。

而杆子的不同高矮,则代表了:在这个间隔的扫描周期中,它们各自因为不同的事件,动态的选择通过不同的功能元素和逻辑路径,切换到下一个异步任务。


这样就能清晰看到故事的进展。哪个模块被哪个模块,在哪个时刻,被背后捅刀了,等等故事细节。


我喜欢用单Byte变量。因为数值最大255,变化范围比较小,眼睛容易看。多byte变量,纵轴数值范围太大,直观上的阅读效果不好。

上图Trace中这些,都是单Byte效果的。可以把变量名字隐去,让画面清爽,即使不放大画面细节,从左到右一眼扫过,故事尽收,和看电影差不多效果。效率很高。

如果有任何元素,在某个特殊场景下,做出了违背设计初衷的细微举动,一眼就可以看出来。


如果Trace能同时支持的变量数量,从现在的16个上限,增加到64或128个,那么故事细节就可以更丰富更清晰了。而我就不用多弄几个Trace,来回反复拍电影分场了。

当然,现在的16个变量上限,却也带来了另外的好处,那就是:程序员必须精炼变量设计,以更内聚的方式,高效表达解耦的局部场景。这其实就是面向对象思维的精髓,而不仅仅是封装继承多态这些外形说辞。


变量的监视Code,可以根据喜好随意改变,调整可读性,看习惯。


谢谢反馈,我个人也认为在新时期PLC程序越发复杂,原有的监视数量和长度不足。下一版Trace会努力在不影响已有用户程序的情况下,增加单个配置中的最大信号数量,或者能够同时展示多个配置的全部变量。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10587条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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