可锐资源网

技术资源分享平台,提供编程学习、网站建设、脚本开发教程

[西门子PLC]HMI通讯对PLC扫描周期甚至MOVE指令执行的影响

PLC扫描周期的概念:

PLC执行分为三个阶段:输入采样阶段用户程序执行阶段输出刷新阶段
1.在输入采样阶段
PLC以扫描方式依次读入所有输入状态和数据,并且将其存放在对应的输入映像寄存器中。采样阶段结束后转入用户程序执行和输出刷新阶段。
2.在用户程序执行阶段
PLC总是从上到下,从左到右的顺序依次扫描用户程序,然后根据逻辑运算的结果刷新系统RAM存储区中对应位的状态。
3.刷新输出阶段
在此阶段,CPU按照I/O映像区内对应的状态和数据刷新所有输出锁存电路,再经输出电路驱动对应的外部设备。这时才是PLC的真正输出。
PLC执行过程如下图所示:

现在我们来分析下HMI通讯对PLC扫描周期甚至MOVE指令执行的影响。

MOVE 指令执行之际,竟会被 HMI 通讯所打断,此乃何种状况??

事情原委如下,近期博主所分享的 HMI 通讯会致使 PLC 扫描中断。倘若于程序之中未能留意数据一致性问题,或许会致使 HMI 读取到残缺的数据,进而引发问题。并且,在运用 MOVE 指令传送繁杂数据之时,亦有可能被打断。此观点遭到众多同仁的质疑。然则,究竟 HMI 通讯可否打断 PLC 扫描周期,空口言说实无说服力,既然遭受质疑,便需拿出证据示于众人。

毕竟,编程领域之巨擘曾言,莫徒逞口舌之能,给我呈些实际之物。



博主用 C#弄了个测试的小软件,专门用来模拟 HMI 配合测试的,这里面有读数据、写数据和 MOVE 指令的原子性这 3 个测试用例。



那到底要咋才能测试出 PLC 扫描周期有没有被 HMI 打断呢?咱们可以通过一个标志变量来搞,在 PLC 扫描周期刚开始的时候,把它设成 TRUE ,等到扫描周期结束的时候,再把它改成 FASLE 。这么设置的原因呢,就是为了让这个标志变量在扫描周期里面一直是 TRUE ,在扫描周期外面就是 FASLE 。



所以要是 HMI 通讯不能打断 PLC 扫描周期的话,那 HMI 读出来的值应该一直都是 FALSE 。但要是 HMI 能读到标志变量的值是 TRUE 这种情况,那就说明 HMI 是在 PLC 扫描周期执行的时候跟 PLC 通讯的,也就是说 HMI 能打断 PLC 扫描周期。这就是第一个测试,叫读数据测试。

为了能让程序执行的时间变长,从而增加 HMI 通讯打断的可能性,在程序里加了一段 FOR 循环程序。



测试程序每隔 50 毫秒就会和 PLC 通讯一次,一旦读到标志变量是 TRUE 的值,就会停止,同时,还会显示和 PLC 的通讯次数。

下面就是第一个测试,也就是读数据测试的结果,咱们能看到,HMI 经过几次通讯之后就拿到了标志变量是 TRUE 的值,这就表明 HMI 读数据通讯是能够打断 PLC 扫描周期的。



第二个测试,是测试 HMI 写数据会不会打断 PLC 扫描周期。在 PLC 程序的最开头,把标志变量设置成 TRUE ,然后 HMI 测试程序启动以后,会一直给标志变量写 FASLE 。在 PLC 程序的最后面,只要发现标志变量是 FASLE ,就把一个测试结果变量设置成 TRUE ,这就表示 HMI 写数据通讯同样能够打断 PLC 扫描周期。

HMI 测试开始的时候会把测试结果变量写成 FASLE 。




以下是第二个测试,写数据的结果。能看到,HMI 经过几次通讯之后,就拿到了测试结果变量是 TRUE 的值。这就说明 HMI 写数据通讯是能够打断 PLC 扫描周期的。





第三个测试是关于 MOVE 指令的原子性。

我们测试一下 PLC 程序里的 MOVE 指令在执行的时候会不会被 HMI 通讯给打断,也就是说看看 MOVE 指令是不是原子性的。为了让被 HMI 通讯打断的可能性变大些,我们让 MOVE 指令去传送一个有 200 个元素、类型为整型的数组。在传送开始之前,把源数组的元素全都赋值成 1,把目标数组清空成 0 。然后把数组传送给目标数组,而 HMI 通讯只读取目标数组的第一个元素和最后一个元素。这样一来,只要这两个元素的值不一样,那就说明 MOVE 指令正在执行的时候,被 HMI 通讯给打断了。





以下是第三个测试,也就是 MOVE 指令原子性的测试结果。能看到,HMI 在通讯了一段时间后,出现了拿到的第一个元素和最后一个元素值不一样的状况。这就表明 MOVE 指令的执行会被 HMI 通讯给打断。怎么样,看到这儿是不是有点心慌?

其实啊,大家不用太在意、太担心这个问题。

只要记住,像 INT、REAL 这种基本类型的数据,得在处理好数据之后,再一次性赋值给 HMI 对应的变量。而对于一些复杂的数据,比如像时间日期这种包含多个变量、在 HMI 侧还需要二次处理的情况,只要加一个标志变量来指示数据有没有准备好,HMI 侧就能依照标志变量去处理数据。要是 HMI 侧只是用来显示,那就不用担心啦,因为这种情况出现的概率特别低。

PLC扫描周期甚至MOVE指令执行都会被HMI通讯中断?

http://bbs.plcjs.com/forum.php?mod=viewthread&tid=507221&fromuid=17

(出处: PLC论坛-全力打造可编程控制器专业技术论坛)

#非标自动化#

#西门子PLC#

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言