作者 | 主题 |
---|---|
Zane 至圣 经验值: 75765 发帖数: 19245 精华帖: 376 |
楼主 2020-07-07 01:08:30
主题:【Zane说编程】之关于300PLC的 SD 指令奇怪现象的讨论 关于300PLC的 SD 指令奇怪现象的讨论 起因源自以下两个主题贴的讨论: 【探讨】看了yzs贴后 ,探讨以下300PLC的 SD 指令奇怪现象 为此我做了如下测试: 第一组: 图1: 图2: 图3: 图4: 可以看出,第一组中图1~图4的程序中计数器的输入变量如果是M10.0的话,程序指令排列顺序无论怎样都是可以正确执行的。 第二组:直接使用定时器T0标志位作为计数器的输入变量 图5: 可以看出,图5中程序计数器不工作。 图6: 图6中换一下梯形图排列次序,将计数器程序移至定时器程序之前,计数器工作。 这就是所谓的STEP 7 S7-300的SD指令异常吗,非也。 但这就能说图5是错误的,图6是正确的吗?
不是,只是前者捕捉到定时器标志位电平变化的概率极小,而后者捉到定时器标志位电平变化的概率极大,原因是,由于本程序是实现一个周期振荡的信号,定时器标志位高电平存在的时长极短,在一些情况下无法跨两个扫描周期存在,标志位刚一刷新成高电平,立即就执行了定时器指令又清零了,导致计数器指令如果在定时器指令之后执行的话,就很难能捕捉到定时器标志位的电平变化。 其实两者一样的存在问题,逻辑上的漏洞。 定时器的工作原理还是那样,定时器在使能后可以认为在后台继续运行,并自动更新定时器的标志位。
图7.1 图7.2 如果我们在定时器指令与计数器指令之间插入足够的延时,那计数器是存在捕捉到计数输入信号的电平变化的可能性的,也就是说定时器标志位的刷新因为延时,在同一个扫描周期内,在定时器指令之后而在计数器指令之前的概率大大增加。 我们通过图7.1及图7.2所示的例程中可以看到,计数器可以工作,但不能确保百分之百能捕捉到计数变量的电平变化。 因此最后的结论:我还是推荐第一组的编程方式,放之四海而皆准。但最标准的振荡信号程序应使用两个定时器来搭建,高电平与低电平都需要有一定的时长,而不是某一个电平的时长极短,甚至不能跨两个扫描周期存在。
Zane
注册自动化系统工程师
Always save before download
|
CoolCool的猪 至圣 经验值: 16693 发帖数: 1307 精华帖: 2 |
4楼 2020-07-08 17:24:50
主题:回复:【Zane说编程】之关于300PLC的 SD 指令奇怪现象的讨论 非常好
同一个问题ID下,已经先回答此问题的人,如再参考我答案而修改自己答案的,就是王八蛋!
|