西门子S7-300计数器的仿真问题
在Cpu的属性中设置Memory Clock,这样你就可以得到秒脉冲位。 然后依靠该位进行计数,一个计数器设定为60,代表秒,一个计数器设定为60代表分,一个计数器设定24代表小时,计数器的串联就可以实现了。
S7-300计数器使用:
按照一般的理解,计数器的输出位或它的常开触点应该在计数值到达预置值时接通,这种要求用大多PLC加计数器一般都能实现。但是S7-300的加计数器的计数值到达预置值时,其输出位的状态没有什么变化 。
实际上,S7-300的加计数器与众不同,计数值为0时其输出位Q为0,计数值非零时其输出位为1。为了实现计数值到达预置值时产生一个动作,可以在计数器之后使用一个比较指令(见下图),当它的计数值大于等于预置值(图中为12)时比较指令等效的触点接通,用它来驱动一个线圈。此时计数器的预置值PV实际上不起作用。 另一个更简单的方法是使用减计数器,开始计数之前写入预置值,计数值到达预置值时其计数值变为0,其输出位由1变为0,将输出位取反(用它的常闭触点控制一个线圈),就可以用来完成我们需要的操作了。
您好,非常高兴为您解答。
说一下我自己的排故思路吧!
这是一个非常简单的问题,很常见。问的也非常好!
首先,我编写了一下你的程序。现象和你的一样。
心里不是慌了吗,别慌,打开诊断缓冲区,发现有如下错误。
编程错误,而且是bcd转换错误。如上你的所言,是自己按下了i3.2,就停机了。
所以就怀疑是计数器出问题了,鼠标点在计数器上,按下神键,"F1"
有如下解释,
这个键是把初始值赋值给计数器,就是所谓的
一看,数据类型是WORD型,不过mw也没什么事。
继续看下去,发现,
它输出的是bcd码,哦,原来是mw10转换成mw14的时候出问题了,所以报的错是“bcd码转换错误”。
那接下来的就简单了,只需要转换一下就行了,加个
然后一切就正常了。
请注意,mw10的数据从你的那里的16#000a转变成为了16#0010,这样就ok了。
总结一下,就是西门子300的计数器用法比较麻烦,所以我一般不怎么用,你会问,不然用什么,简单,直接用add或者sub,注意复位,就是赋值0就ok。
还要提出你的程序的一个问题,不要直接用输入接到那几个CU,CD,正确的做法就是要加个上升沿过渡,不然几个扫描周期下,瞬间会记满的。
哦,忘了,不光计数器会出现这样的问题,定时器也一样哦。
最后嘛,还是那句话,祝你早日成为工控达人,GOOD LUCKY!!!!
西门子PLC 的通讯接口是9针的串口怎么接出来RS485的两根线?
并行口与串行口的区别是交换信息的方式不同,并行口能同时通过8条数据线传输信息,一次传输一个字节;而串行口只能用1条线传输一位数据,每次传输一个字节的一位。在串行通讯处理中,常常看到RTS\/CTS和XON\/XOFF这两个选项,这就是两个流控制的选项,目前流控制主要应用于调制解调器的数据通讯中,但对...