技术论坛

 【Zane说编程】之关于300PLC的 SD 指令奇怪现象的讨论

返回主题列表
作者 主题
Zane
版主

经验值:56244
发帖数:16551
精华帖:319
楼主    2020-07-07 01:08:30
主题:【Zane说编程】之关于300PLC的 SD 指令奇怪现象的讨论

关于300PLC的 SD 指令奇怪现象的讨论


  起因源自以下两个主题贴的讨论:

【分享】PLC常见编程问题点总结(S7-300)

【探讨】看了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
pkh2006
奇侠

经验值:5507
发帖数:833
精华帖:10
3楼    2020-07-08 15:00:49
精华帖  主题:回复:【Zane说编程】之关于300PLC的 SD 指令奇怪现象的讨论

西门子很早就有类似文档了啊

https://support.industry.siemens.com/cs/cn/zh/view/71704589


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