技术论坛

SCL中CASE语句有时无法捕捉脉冲信号

作者 主题
侠客

经验值: 698
发帖数: 104
精华帖: 0
主题:【探讨】SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 楼主 2022-01-19 09:10:42

大家使用SCL中的CASE语句时,有没有发现有时无法捕捉脉冲信号?


我遇见过2次,一次是使用V90伺服,在CASE语句中判断伺服定位完成的一个脉冲信号,发现有时伺服定位完成了,程序还在等待定位完成,当时不清楚啥原因,改为伺服到位使用比较位置作为完成信号。


另一次是使用RS485通讯的时候,在CASE语句中判断发送完成信号的一个脉冲信号,出现实际发送完成,程序还在等待,测试多次发现是CASE语句对于脉冲信号判断可能会出问题,这个时候想起以前控制伺服的时候也出现过类似的问题,当时就顿悟了。


CASE语句中要避免判断脉冲信号!!!


CASE语句中要避免判断脉冲信号!!!


CASE语句中要避免判断脉冲信号!!!


此后如竟没有炬火,我便是唯一的光
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1744863&b_id=50&s_id=0&num=10

版主

经验值: 76166
发帖数: 19135
精华帖: 378
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 1楼 2022-01-19 18:26:58

与信号是否脉冲信号没有太大关系。


关键是你的逻辑程序不是全扫描的,CASE指令是典型的跳转指令,你的逻辑有漏洞。


所以实质性的口号应该是,编写逻辑程序,不要用CASE指令


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
游士

经验值: 209
发帖数: 37
精华帖: 0
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 2楼 2022-01-20 08:18:45
以下是引用Zane在2022-01-19 18:26:58的发言 >1楼

与信号是否脉冲信号没有太大关系。


关键是你的逻辑程序不是全扫描的,CASE指令是典型的跳转指令,你的逻辑有漏洞。


所以实质性的口号应该是,编写逻辑程序,不要用CASE指令

case 多么好用于状态控制,为什么逻辑程序不提倡用case呢? 单片机 C 中,也是提倡用状态机来写逻辑啊。好用,明了。


 
以下网友喜欢您的帖子:

  
版主

经验值: 76166
发帖数: 19135
精华帖: 378
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 3楼 2022-01-20 17:01:53
以下是引用H·elec在2022-01-20 08:18:45的发言 >2楼

case 多么好用于状态控制,为什么逻辑程序不提倡用case呢? 单片机 C 中,也是提倡用状态机来写逻辑啊。好用,明了。

以下是引用Zane在2022-01-19 18:26:58的发言 >1楼:与信号是否脉冲信号...

引用1楼详细内容:

与信号是否脉冲信号没有太大关系。


关键是你的逻辑程序不是全扫描的,CASE指令是典型的跳转指令,你的逻辑有漏洞。


所以实质性的口号应该是,编写逻辑程序,不要用CASE指令

没几个人能用好的,看似严密的程序,其实如筛子一般到处都是漏洞


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
游士

经验值: 232
发帖数: 20
精华帖: 0
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 4楼 2022-10-07 16:00:22

最近正打算用case来做一个V90的连续动作控制呢


 
以下网友喜欢您的帖子:

  
游士

经验值: 256
发帖数: 34
精华帖: 0
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 5楼 2022-10-08 01:58:39
梯形图写的逻辑程序不用跳转指令,全逻辑是挺好的,符合plc循环扫描特性。
但也不是所有项目都适合,打个比方,可能没注意到多个分支条件在一个周期内都满足,自动状态就变化多次。个人认为用case写自动流程是适合用状态机思路写。其实说白了也是寄存器比较赋值法。
两种写法,在状态里判断事件/条件,或者在对应的事件/条件满足后判断状态。
 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4940
发帖数: 1174
精华帖: 0
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 6楼 2022-10-08 07:49:48

估计程序中判断条件太多,互相干扰等待信号


13070952128
以下网友喜欢您的帖子:

  
奇侠

经验值: 8094
发帖数: 1308
精华帖: 6
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 7楼 2022-10-08 07:59:22

沿 要包围case  是有了沿你才进行功能性的选择..沿需要两个扫描周期,,,把沿放case里面 要先将数切换到对应的语句再发生沿才能成功执行.............如果嫌麻烦就用比较......


养活一团春意思,撑起两根穷骨头
以下网友喜欢您的帖子:

  
侠士

经验值: 1315
发帖数: 238
精华帖: 0
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 8楼 2022-10-09 19:21:05
这要弄清楚你自己需要的脉冲是什么精度的,比如说us级别的、短于扫描周期的,这样的脉冲就是什么样的扫描也是无济于事的,毫秒级别的在主程序中不管是不是case结构,丢失也是很正常的,往往一个扫描周期可能会大于或者等于这个时间,这时需要使用边缘中断在后台做标记在前台程序中来使用。
往往所谓漏洞百出稳定性不好的程序基本是都是程序结构有问题,初学者犹多,程序编制从不会到会很短时间就可以了,但从会到精往往需要很久很久,前几天看一个二十年的plc工程师写的1200,结构上就是狗屎一堆。
想写好程序,建议系统学习下软件工程和数据结构这两门课程。
 
以下网友喜欢您的帖子:

  
至圣

经验值: 127315
发帖数: 22000
精华帖: 824
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 9楼 2022-10-09 23:54:35

CASE OF 与GOTO类似。就是顺控的分支跳转。

估计楼主说的是 异步通讯完成后的DONE信号吧。

肯定是把它 在写在CASE OF执行其中了。状态变了,没等到DONE就跳转了。

报文属于外层IO 的命令字、控制字、状态字。

不能嵌入在CASE OF 的CASEn中。






学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 13934
发帖数: 2007
精华帖: 43
回复:SCL中CASE语句有时无法捕捉脉冲信号


只看楼主 10楼 2022-10-10 11:31:23

边沿检测与脉冲信号,最基本的编程原则就是 每个扫描周期都要扫描!


人生就像一场旅行!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
SCL中CASE语句有时无法捕捉脉冲信号
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。