关于200smart PLC程序的扫描机制
在一阵忙碌的过去后,必定迎来相对空闲的时光。前一些天,加班加点的修复一台840D系统通道轴机械变形的故障后,终于在几个连续作战后修复并投产了。通道轴的变形直接导致加工产品的尺寸超差,这个在维保机加工行业中很是常见,该轴直接用百分表打同心度已经超过5丝。维保过程及案例分析后续整理后发上来。
而我上面的标题且且又是说plc程序的扫描机制,对,没有错。闲下心来,在喝茶时,“突发奇想”冒出这样一个“念头”,验证程序的扫描机制问题。
如果说程序的扫描机制,应该是“自左而右,自下而上”的一个无可厚非的工作机制,将程序转换为STL语言最有说服力了,一些第三方的plc尤为显现。但是,西门子著以结构化编程的理念为基础特色的编程方式,深受西门子编程者的“喜好”,似乎淡化了这些。
我这个奇思妙想的来由是以200smart PLC为例说明问题,当一个简单的控制程序中,假设用户创建2个子程序,分别为子程序0(SBR_0)和子程序1(SBR_1)(按系统自动生成的标号),那么,在OB1主程序无条件调用时,先执行谁?是按标号来执行的?还是按子程序所处的网络段位置来决定的?这个问题应该早前会有人提出,并得以验证。但,我这时那种“强迫症”又犯上来了,必须验证才能够解除我此刻的疑惑。
程序很是简单,初始化需要的复位“位”值后,按几个不同的放置网络段验证。
程序:

如果,这时的M0.0 = 0,那么,可以断定是按网络段顺序来执行程序的扫描(采集)机制的,将程序下载到plc,看验证结果:

为进一步确认这个结果,特意将子程序调换网络段,图示结果:

结果,仍然是按程序的网络段,自上而下的进行,与子程序的标号没有实质的关联,子程序的标号仅仅只是方便用户管理程序的一种“代码”而已。
虽然,这是一个非常简单而显现的问题,但是如果没有验证就会变为一个“未知”的问题,看到很多网友提问,其实,稍加动手,答案自己可以找到的,毕竟,西门子提供给用户强大的模拟仿真功能,除200(200smart)西门子没有提供外。