技术论坛

如何在plc工作机制下最大限度的捕捉到输入状态信息

作者 主题
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
主题:如何在plc工作机制下最大限度的捕捉到输入状态信息
精华帖精华帖星级3级 推荐帖


只看楼主 只看精华 楼主 2018-09-22 18:52:24

如何在plc工作机制下最大限度的捕捉到输入状态信息

   做plc控制工作的同事都知道plc的工作机制(扫描机制),是自左(母线)而右(线圈参考点)、自上而下(程序的标号顺序)。一个输入信号如果在一个扫描周期内反复变换状态,plc能够识别到的信息应该是距用户程序结束处END位置处的状态值,这样反复循环扫描采集、运算处理、运算结果做输出是plc最基本的工作机制。

   如果是利用200(200 smart)plc做系统控制,那么,系统有现成的几个输入上升沿和下降沿中断供用户调用:以200 samrt为例的输入上升、下降沿中断列表:

集成cpu本机的输入:


信号板输入:


   一个200 smart plc最多可以支持6个(不包含经济型,没有扩展信号板)输入地址的上升沿和下降沿中断,一般的调用应该是可以满足需求了的。可是,如果系统需要组态高速计数器项目或需要大于6个输入地址中断的系统中应用情况下,编程还是有一些难度的。

   那么,是否有一种方式可以在一定程度上弥补上述硬件的“不足”,使plc发挥到“极致”?答案当然是可以试试的,验证与实际的外部输入中断会丢失输入信息的区别。

编程思路:

1)  定义一个循环定时中断,当然为了捕捉到plc工作机制下的最大量,循环定时中断时间只能的允许范围内的最小值,200 smart循环定时中断的时间范围(1~255mS),显然只能选择最小循环定时单位1mS。

2)  在循环定时中断中编辑输入状态的记录功能,记录方式可以是指针移动记录地址存储状态编程或者是直接调用表格指令(AD_T_TBL),本验证不做存储能够验证的测试。

3)  调用外部输入I0.0的上升沿中断,作为与定时中断比较区别。

4)  2个中断进行比较,看结果的区别。

程序:

1)  创建一个工程项目,调用循环定时中断和外部输入I0.0上升沿中断:


2)  在主程序中调用:


3)  在各自的中断中编辑I0.0的输入状态值:


4)  将验证程序编译、保存后下载到plc中,按压外部输入按钮I0.0数次,看2个中断的记录差异,状态图表中监控:


按了200多次均能够同样捕捉到I0.0的状态值。

5)  如果把循环定时中断的时间调整到255mS最大值的情况又将如何?


显然,按压几次后,数值差异非常明显了,循环定时中断会丢失输入状态值。说明循环定时中断的时间设置过大(大于plc扫描周期值,很容易丢失输入状态值),这个验证结果也符合plc的工作机制。

   由于这次测试的plc的经济型的,无法编辑高速脉冲输出测试高速输入信号情况下的输入状态值差异,验证只能暂时中断了,中断应用已经中毒了,哈哈。看来,利用中断还是可以回避由plc扫描周期捕捉外部输入信息的一种编程途径,虽然验证程序尚存在一些局限性。

   首先感谢“S”侠,今天下午看到你的回复,提示在执行中断子程序时,输入的PIW与IW的概念问题,因一时粗心大意没有考虑到这些问题,在此先行谢过。

针对于你这个概念的问题,我又单独做了一个验证,程序仍然是原程序,只是重新定义的循环定时中断的周期为255(最大循环定时中断),并创建一个I0.0立即输入与IB0做比较。

程序仿真:


增加循环定时中断时间的目的是让输入捕捉由于循环周期变长,使捕捉机会少一些,更能够反映立即输入的优势。


外部I0.0端子连接的按钮按压200次后,没有明显看到MW0与MW4的差异。

在中断程序中,这个普通的输入也能够带“立即”功能?查遍200 smart系统手册,关于中断只是描述了它能够优先处理比主程序更高的权限,没有明确是对输入、输出的优先权限,再次连续按压输入I0.0,还是没有明显的差异,一时想不起来用什么方式能够编辑一个有效的程序来判断之间的区别,只能暂时放下继续验证了。



 
以下网友喜欢您的帖子:

  
重要声明:

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

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

侠士

经验值: 1950
发帖数: 161
精华帖: 0
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 1楼 2018-09-22 20:05:00
不错,学习了!
 
以下网友喜欢您的帖子:

  
至圣

经验值: 67548
发帖数: 14783
精华帖: 100
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 2楼 2018-09-22 20:15:00

很早以前我说过,中断,象是第二条线程。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67548
发帖数: 14783
精华帖: 100
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 3楼 2018-09-22 20:27:20

你要试什么?我觉得你在中断中使用上升缘,不象是你要的目的。不知道你是否有用错了呢?


 
以下网友喜欢您的帖子:

  
版主

经验值: 25997
发帖数: 11809
精华帖: 43
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 4楼 2018-09-22 20:29:14

简而言之,是实现什么功能?

粗看一下,似乎要实现脉冲捕捉?也是就扫描周期没有捕捉到的输入1的信号?

若是,脉冲捕捉是系统功能,在系统块中设置即可。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67548
发帖数: 14783
精华帖: 100
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 5楼 2018-09-22 21:20:16

假如扫描周期是20毫秒,假如中断间隔是5毫秒……

要捕捉持续20毫秒以上的信号。扫描和中断都能做到。


要捕捉持续20到5毫秒的  一个  信号(暂且不考虑临界边界的问题)。扫描开始会丢失信号了。中断也会有机会丢失信号。因为扫描无法再提供正确的映像信号给中断。


如果(上述))此时开启脉冲捕捉。扫描可以得知信号的到来。但是中断……有点复杂……

因为我不知道脉冲捕捉是对立即触点有作用还是对映像区有作用,或者是下一个周期的映像区有作用,又或者捕捉以后同时作用在立即输入和映像。还有一个不知道的是:读取过立即值之后,是不是同时刷新映像区,使得映像区会因此造成一个扫描周期的前和后两种状态。这个要试验过才知道。


如果上述研究的时间区间里面到来的不止一个信号,那么情况将再复杂得多。

立即值会不会更能反映实际情况?

脉冲捕捉会不会因此而覆盖了很多本周期内处于后来的信号?


我不敢再想象5毫秒以下信号的到来的情况。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67548
发帖数: 14783
精华帖: 100
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 6楼 2018-09-23 08:06:48

综述。

1脉冲捕捉,对立即触点,对映像区有怎样的操作?

2同一个扫描周期内,读立即触点多次,会不会造成映像区的多次刷新?

解答以上问题,便可以轻松解释最大限度的捕捉输入状态信息,能达到一个什么高度。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 10685
发帖数: 1561
精华帖: 33
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 7楼 2018-09-23 16:57:02

外部输入信号变化很快,PLC扫描机制是按一定周期慢悠悠地去接收这个信号,然后处理再输出,为弥补此时的不足有了中断和立即输入输出。那些在主循环程序中想要实现高速信号处理的都是徒劳:一个例子就是在主程序中使用毫秒级定时器想要实现毫秒级的定时,此时扫描周期的n毫秒就带来了n毫秒的误差。楼主试图绕开中断最大限度捕捉输入信息我认为是不现实的。就PLC而言为什么一定要处理那么快的信号?这是他分内的事吗?最近有网友提到要模拟量模块输出一个几十HZ的正弦波,就觉得对于PLC是勉为其难


工控爱好者
以下网友喜欢您的帖子:

  
至圣

经验值: 10685
发帖数: 1561
精华帖: 33
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 8楼 2018-09-23 17:30:46

回6楼:从200系统手册看到的,也许和smart一样

立即触头得到物理输入值,但过程映像寄存器并不刷新。

立即输出将新值同时写到物理输出点和相应的过程映像寄存器。

脉冲捕捉是对输入滤波之后,下面的图片自己看吧。




工控爱好者
以下网友喜欢您的帖子:

  
至圣

经验值: 67548
发帖数: 14783
精华帖: 100
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 9楼 2018-09-23 19:51:59

立即输入不刷新映像。脉冲捕捉只影响映像。

是不是?

那就有结果了……


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 楼主 10楼 2018-09-25 08:33:24
以下是引用芳季在2018-09-23 19:51:59的发言 >

立即输入不刷新映像。脉冲捕捉只影响映像。

是不是?

那就有结果了……

一起回复:

   我这个验证是回复前一个贴子的,因为没有声明给大家带来了一些阅读的困惑。

问题的由来是这样的,当有几个信号进入plc输入,且需要记录这些信息的先、后顺序。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 63470
发帖数: 12672
精华帖: 121
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 11楼 2018-09-25 08:49:16
以下是引用WWCWWC在2018-09-25 08:33:24的发言 >10楼

一起回复:

   我这个验证是回复前一个贴子的,因为没有声明给大家带来了一些阅读的困惑。

问题的由来是这样的,当有几个信号进入plc输入,且需要记录这些信息的先、后顺序。

以下是引用芳季在2018-09-23 19:51:59的发言 >:立即输入不刷新映像...

引用详细内容:

立即输入不刷新映像。脉冲捕捉只影响映像。

是不是?

那就有结果了……

王工你的验证还是非常有意义的,对技术的想法付诸验证,点赞啊


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 楼主 12楼 2018-09-25 10:12:40
以下是引用HUANGZE75在2018-09-25 08:49:16的发言 >11楼

王工你的验证还是非常有意义的,对技术的想法付诸验证,点赞啊

以下是引用WWCWWC在2018-09-25 08:33:24的发言 >10楼:一起回复:   我这...

引用10楼详细内容:

一起回复:

   我这个验证是回复前一个贴子的,因为没有声明给大家带来了一些阅读的困惑。

问题的由来是这样的,当有几个信号进入plc输入,且需要记录这些信息的先、后顺序。

以下是引用芳季在2018-09-23 19:51:59的发言 >:立即输入不刷新映像...

引用详细内容:

立即输入不刷新映像。脉冲捕捉只影响映像。

是不是?

那就有结果了……

黄工您好!

   这个贴子我是回复有这个问题(链接:关于编辑plc控制程序“位”操作的记录,http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1507986&b_id=4&s_id=26&num=4#anch)后,对“shine”侠的一些疑问的验证。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67548
发帖数: 14783
精华帖: 100
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 13楼 2018-09-25 14:29:19

中断里面的立即输入和一般输入当然有区别啦。

输入发生;end指令;立即输入执行;一般输入执行;end指令。

输入发生;end指令;一般输入执行;立即输入执行;end指令。

上述两个次序执行结果一样。

end指令;输入发生;一般输入执行;立即输入执行;end指令。

end指令;输入发生;立即输入执行;一般输入执行;end指令。

上述两个次序一般输入都得不到信号。

输入发生;end指令;输入终结;立即输入执行;一般输入执行;end指令。

输入发生;end指令;输入终结;一般输入执行;立即输入执行;end指令。

上述,立即输入得不到信号。一般输入有信号。

这样表达我感觉很难说到位,怎么说好呢?

立即就是立即,不管中断不中断。

一般输入就是映像区,不管现实有没有信号。



 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 楼主 14楼 2018-09-25 14:53:51
以下是引用芳季在2018-09-25 14:29:19的发言 >13楼

中断里面的立即输入和一般输入当然有区别啦。

输入发生;end指令;立即输入执行;一般输入执行;end指令。

输入发生;end指令;一般输入执行;立即输入执行;end指令。

上述两个次序执行结果一样。

end指令;输入发生;一般输入执行;立即输入执行;end指令。

end指令;输入发生;立即输入执行;一般输入执行;end指令。

上述两个次序一般输入都得不到信号。

输入发生;end指令;输入终结;立即输入执行;一般输入执行;end指令。

输入发生;end指令;输入终结;一般输入执行;立即输入执行;end指令。

上述,立即输入得不到信号。一般输入有信号。

这样表达我感觉很难说到位,怎么说好呢?

立即就是立即,不管中断不中断。

一般输入就是映像区,不管现实有没有信号。


我开始没有验证时,也是这样理解有区别的。

但是,验证的结果且且没有看出不同,可能是由于验证程序过于简单,得到的一个“非正常状态”下的结果。



 
以下网友喜欢您的帖子:

  
至圣

经验值: 67548
发帖数: 14783
精华帖: 100
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 15楼 2018-09-25 15:23:00
以下是引用WWCWWC在2018-09-25 14:53:51的发言 >

我开始没有验证时,也是这样理解有区别的。

但是,验证的结果且且没有看出不同,可能是由于验证程序过于简单,得到的一个“非正常状态”下的结果。


你就只做了楼顶上的这个程序试验吗?我就是没明白你做的程序的意图。你如果要看清立即和常规输入的区别,你必须要充分拖延扫描周期。如果你想在中断中观察立即和常规输入的行为,那么你很难控制中断发生的时刻。不是你想谁先中断就谁先中断。而且中断时刻还要看end指令,还要看输入发生时刻。

200好像是超过30秒扫描周期强制stop,这里有很多时间让你用输入中断去检查立即输入和一般输入的行为。


你的程序一方面要管理拖延的程度,做出适当的肉眼可以观察和可以操作的拖延。你可能甚至要在中断中做拖延。另一方面要及时解除拖延,避免输入信号进不去映像区。整个扫描周期使用sm0.6做扫描指示,以便人机同步。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 楼主 16楼 2018-09-25 15:28:10
以下是引用芳季在2018-09-25 15:23:00的发言 >15楼

你就只做了楼顶上的这个程序试验吗?我就是没明白你做的程序的意图。你如果要看清立即和常规输入的区别,你必须要充分拖延扫描周期。如果你想在中断中观察立即和常规输入的行为,那么你很难控制中断发生的时刻。不是你想谁先中断就谁先中断。而且中断时刻还要看end指令,还要看输入发生时刻。

200好像是超过30秒扫描周期强制stop,这里有很多时间让你用输入中断去检查立即输入和一般输入的行为。


你的程序一方面要管理拖延的程度,做出适当的肉眼可以观察和可以操作的拖延。你可能甚至要在中断中做拖延。另一方面要及时解除拖延,避免输入信号进不去映像区。整个扫描周期使用sm0.6做扫描指示,以便人机同步。

以下是引用WWCWWC在2018-09-25 14:53:51的发言 >:我开始没有验证时,...

引用详细内容:

我开始没有验证时,也是这样理解有区别的。

但是,验证的结果且且没有看出不同,可能是由于验证程序过于简单,得到的一个“非正常状态”下的结果。


季侠,你可能对我这个验证有误解了。

我只想知道在中断子程序中执行的立即输入型指令与一般输入型指令有区别?

我在上面做的验证,200次是没有区别的,后来,又做了几次均没有区别。

反过来,如果这2种类型的指令放在主程序或者其它子程序,当然是有区别的。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67548
发帖数: 14783
精华帖: 100
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 17楼 2018-09-25 16:32:45


这样测试行不行?

主程序定义中断和拖延扫描。最后显示每个扫描的时间界线。

中断就输出按键的信号。

没有了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67548
发帖数: 14783
精华帖: 100
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 18楼 2018-09-25 16:49:05
以下是引用WWCWWC在2018-09-25 15:28:10的发言 >

季侠,你可能对我这个验证有误解了。

我只想知道在中断子程序中执行的立即输入型指令与一般输入型指令有区别?

我在上面做的验证,200次是没有区别的,后来,又做了几次均没有区别。

反过来,如果这2种类型的指令放在主程序或者其它子程序,当然是有区别的。

没错。我的确没理解到哪个点上。我开始的一些疑问给938解了,然后就自我感觉还可以。但是还是没理解透你的意图。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:如何在plc工作机制下最大限度的捕捉到输入状态信息
推荐帖


只看楼主 只看精华 楼主 19楼 2018-09-25 16:56:46
以下是引用芳季在2018-09-25 16:49:05的发言 >18楼

没错。我的确没理解到哪个点上。我开始的一些疑问给938解了,然后就自我感觉还可以。但是还是没理解透你的意图。

以下是引用WWCWWC在2018-09-25 15:28:10的发言 >:季侠,你可能对我这...

引用详细内容:

季侠,你可能对我这个验证有误解了。

我只想知道在中断子程序中执行的立即输入型指令与一般输入型指令有区别?

我在上面做的验证,200次是没有区别的,后来,又做了几次均没有区别。

反过来,如果这2种类型的指令放在主程序或者其它子程序,当然是有区别的。

我验证的目的是在中断子程序被调用时,普通的输入与立即输入是否有区别?

这个问题的由来是上一个贴子上来的,shine侠曾经提示过有区别的,但我把它放在中断子程序验证,没有看到有区别。如果放在主程序上你那个验证非常能够说明问题,这个我知道的。

这个是我验证的结果:

我是用同一个输入地址I0.0来验证不同输入指令下的结果。



 
以下网友喜欢您的帖子:

  
收起
如何在plc工作机制下最大限度的捕捉到输入状态信息
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。