3种PLC软件中来看ST编程中的定时器编程
昨晚的文章用同一段点动控制程序,让大家看了一下博图/三菱/3S,三个品牌PLC中ST编程的一些特点,很相似吧!今天继续用同一段定时器程序,来看看这个3种PLC中对定时器编程的异同!
同样的废话不多说了,直接上动态图来看:
1,博图ST编程调用定时器运行程序:
TIA Portal V14中的SCL程序中对定时器监控动态图
在博图中SCL编程时,因为我是在0B1块中直接写的程序,因此调用调用定时器TON时,其实是调用IEC定时器,相当于一个功能块,熟悉STEP7的人应该知道和SFB4一样,总之是FB块就需要一个DB块,因此我程序中的T1.TON,这个T1其实就是一个DB块,我给他命名成T1了!
同样这个程序就是PB1值为1时,就让CONDITION_OK为真,这样定时器的IN管脚就接通了,定时器就开始工作!时间运行5S后,定时器的Q点也就是STEP_DONE就输出为真了!
PT处是设定的延时时间,T#5S就代表是5秒钟。
注意一下Q=>"STEP_DONE",这里的这个=>符号不是比较的意思,而是输出的意思!
别的就没什么说的了,直接看另外2种PLC程序!
2,三菱ST编程调用定时器运行程序:
GX WORKS3中的定时器程序监控动态图
三菱这个程序是基于FX5U PLC的,这个TON指令,其实属于通用函数/FB下的定时器,和梯形图编程时使用的OUT T0是不一样的! OUT TO,OUTH T0这些不清楚的可以去看一下我的问答!
程序的内容是和上面博图软件中的解释一样的,就是延时接通而已,很简单!继续往下看。
3:3S codesys ST编程调用定时器运行程序:
codesys V2.39中的定时器程序监控动态图
codesys中的定时器和三菱的就很相似了,T1出现在了声明中,且是一个标准功能块FB,可以看一下变量声明中的图片:
T1是被声明成一个TON类型的参数
这个图片上T1不是被声明成TIME,而是声明成TON,这个TON是标准功能块中的一个函数!
从3种编程软件中可以看到,在ST编程中调用定时器时,其实这个定时器是相当于一个FB函数功能块!这个是他们的共同点!
博图/三菱/3S编程软件中ST编程定时器时的用法就如本篇文章所描述的,希望对小伙伴们有点帮助。STEP7软件中的定时器用法,我在问答中也有提及,需要的朋友可以关注我到主页中去搜索!
本文到此结束,感谢阅读!
跟我一起看1200手册之基本指令(定时器指令)的应用讲解
前面文章中跟大家介绍了基本指令中的位逻辑指令的使用,在本文中将继续跟大家分享关于1200的定时器指令的使用,定时器在PLC编程中是最多被用的基本指令,博途中定时器不同于step7中的定时器,在博途中没有S5定时器,而只有IEC定时器,就意味着要用到定时器的背景数据块,每调用一次定时器就会产生一个背景数据块,非常占用系统资源,那么怎么做才能减少背景数据块呢?下面会跟大家具体分享。
一、指令的位置
二、指令讲解
在1200PLC中有四种定时器:
接通延时定时器TON、关断延时定时器TOF、保持型接通延时定时器TONR、脉冲定时器。下面我们就分别进行介绍:
1、接通延时定时器
定时器采用存储在数据块中的结构来保存定时器数据,在使用定时器时要为定时器分配背景数据块。
接通延时定时器TON的时序图:
当使能端IN接通时,定时器开始定时,当前值ET递增,当前值等于预设值PT时,定时器的输出Q置位,定时器停止计数,并保持当前计数值。
当使能端IN断开时,定时器的当前值和输出状态复位。
若使能端断开时,定时器的当前值小于预设值,定时器的当前值也复位为0.
通过一个小例子来看看指令怎么用?
当按下I0.7按钮,延时5s后Q0.3接通
生成的背景数据块位于系统块中,如下图所示:
编写程序如下:
将程序下载到仿真器中,并进行仿真(前面文章中已经讲过仿真器的使用,这里就不过多赘述了)
2、关断延时定时器TOF
定时器采用存储在数据块中的结构来保存定时器数据,在使用定时器时要为定时器分配背景数据块。
时序图:
当使能端IN接通时,启动定时器,定时器当前值ET复位,定时器输出Q置位。
当使能IN断开时,当前值ET递增,当前值等于预设值PT时,定时器的输出Q复位,定时器停止计数,并保持当前计数值。
若使能端断开时,定时器的当前值小于预设值,定时器的当前值保持置位。
通过一个小例子来看看指令怎么用?
当I0.7按下,Q0.3接通,断开I0.7后5s,Q0.3断开。
下载程序并开始仿真:
(1)当I0.7接通,Q0.3接通
(2)当I0.7断开,延时5s Q0.3断开。
3、保持型接通延时定时器TONR
时序图如下:
当使能端IN接通时,定时器开始定时,当前值ET递增,当使能端IN断开时,定时器停止定时,并保持当前值,当使能端IN重新接通时,定时器继续加计时,当前值ET继续增加;当当前值ET等于预设值PT时,定时器输出置位,定时器停止计数并保持当前计数值。当定时器复位R接通时,定时器的当前值和输出状态复位。
通过一个小例子来看看指令怎么用?
当I0.7多次接通,累计接通时间达到15s,Q0.3接通,当按下I1.0时,Q0.0断开
下载程序并进行仿真:
(1)当I0.7接通时,定时器开始计时。
(2)当I0.7断开时,定时器停止计时,定时器当前值保持不变
(3)当累计定时时间达到预设值PT 15s时,定时器输出置位Q0.3接通。
(4)当I1.0接通时,定时复位,Q0.3断开。
4、脉冲定时器
时序图:
当使能端IN有上升沿时,定时器开始定时,当前值ET递增,定时器输出置位,当当前值ET等于预设值PT时,定时器输出复位,若此时使能端IN为高电平,则保持当前计数值,若使能端IN变为低电平,则定时器当前值ET清零。
在定时器运行中,新来的使能信号IN对定时器不起作用。
通过一个小例子来看看指令怎么用?
当按下I0.7,Q0.3接通5S后断开
下载程序并仿真:
(1)当I0.7接通,Q0.3接通
(2)当定时时间达到预设值5s,Q0.3断开,Q0.3共接通5s(也就是5s脉冲)
(3)当I0.7断开,则定时器清零。
S7-1200 定时器创建
S7-1200定时器创建有以下几种方法:
1. 功能框指令直接拖入块中,自动生成定时器的背景数据块,该块位于“系统块>程序资源”中,参见图2。
图2 自动生成定时器的背景数据块
2. 功能框指令直接拖入FB块中,生成多重背景,参见图3。
图3 多重背景
3. 功能框指令直接拖入FB、FC块中,生成参数实例,从TIA博途V14开始,参见图4。
图4 参数实例
4. 在DB块、FB的静态变量、FC和FB的INOUT变量中新建IEC_TIMER、TP_TIME、TON_TIME、TOF_TIME、TONR_TIME(后面四个从TIA博途V11开始)类型变量,在程序中将功能框定时器指令拖入块中时,在弹出的“调用选项”页面点击“取消”按钮,之后将该建好的变量填入指定位置。对于线圈型指令,这是首选方法。
(1) DB块中新建IEC_TIMER等类型变量(LAD/FBD),如果是IEC_TIMER等类型变量的数组,S7-1200从V2.0版本开始支持,参见图5~图7。
图5 DB块中的定义
图6 功能框定时器使用
图7 线圈型定时器使用
(2) FB的静态变量中新建IEC_TIMER等类型变量(LAD/FBD)
图8 静态变量中定义
(3) FC和FB的INOUT变量中新建IEC_TIMER等类型变量(LAD/FBD),
图9 INOUT中定义
(4) 以上三种方法的SCL版本,从TIA博途V14开始支持,参见图10。
图10 SCL中使用
从以上4个示例可以看出,IEC_TIMER、TP_TIME、TON_TIME、TOF_TIME、TONR_TIME五种数据类型没有本质的区别,可以互换使用,为使得程序明确,建议只使用定时器对应名字的数据类型。
5. 在插入DB时,选择IEC_TIMER类型的数据块,将该数据块填在指令上方。此种方法生成的数据块等同于第一种的背景数据块,位于“系统块>程序资源”中,从TIA博途V11开始,线圈型指令同样适用,参见图11。
图11 新建IEC_TIMER类型DB
S7-1200 定时器常见问题
1. 为什么定时器不计时?
答:可能原因如下:
(1)定时器的输入位需要有电平信号的跳变,定时器才会开始计时。如果保持不变的信号作为输入位是不会开始计时的。TP、TON、TONR需要IN从“0”变为“1”启动,TOF需要IN从“1”变为“0”启动。
(2)定时器的背景数据块重复使用。
(3)只有在定时器功能框的Q点或ET连接变量,或者在程序中使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET,定时器才会开始计时,并且更新定时时间。参见下图
2. 如何编程自复位定时器并产生脉冲?
答:正确答案参考下图,同时附上2种常见错误编程方式。
原因:S7-1200的定时器的时间更新发生在定时器功能框的Q点或ET连接变量时,或者在程序中使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET时。即如果程序中多次使用同一背景DB的Q点,或者既使用定时器功能框的Q点或ET连接变量,又使用背景DB的Q点,以上两种情况都会造成定时器在一个扫描周期内的多次更新,可能造成定时器不能正常使用的情况。
正确方法的流程,将程序根据指令分为两部分,如图12所示:
图12 分解正确指令
阶段1.初始"DB2".脉冲=False,于是"DB2".脉冲取反为True,触发计时器开始计时,输出的"DB2".脉冲=False,状态不变;定时时间不到,则始终在阶段1;
阶段2.当定时时间到发生在①所处的位置,在TON处定时器更新,Q输出True,因此输出的"DB2".脉冲=True,等到下周期时"DB2".脉冲取反为False,导致输出的"DB2".脉冲=False,等再到下周期时就回到了阶段1;
阶段3.当定时时间到发生在②所处的位置,不影响定时器的更新,需要到下一周期才会改变输出,就回到了阶段2。
从上可知,定时器实现了自复位,并且"DB2".脉冲=True只保持一个周期,形成了脉冲。
以第一个错误方法解释一下为什么这种方法不能实现自复位定时器并产生脉冲,如图13所示,将程序根据指令分为三部分:
图13 分解错误指令
阶段1.初始第一行"IEC_Timer_0_DB".Q=False,触发计时器开始计时,第二行,当定时时间不到,"IEC_Timer_0_DB".Q=False保持不变,输出的"DB2".脉冲=False;定时时间不到,则始终在阶段1;
阶段2.当定时时间到发生在①所处的位置,在第一行的"IEC_Timer_0_DB".Q处定时器更新,更新后,"IEC_Timer_0_DB".Q=True,取反为False,此时作为TON的输入,使得定时器复位,第二行的"IEC_Timer_0_DB".Q=False,输出的"DB2".脉冲=False,到下周期时就回到了阶段1;
阶段3.当定时时间到发生在②所处的位置,在第二行的"IEC_Timer_0_DB".Q处定时器更新,更新后,"IEC_Timer_0_DB".Q=True,输出的"DB2".脉冲=True,等到下周期时,"IEC_Timer_0_DB".Q=True,取反为False,此时作为TON的输入,使得定时器复位,第二行的"IEC_Timer_0_DB".Q=False,输出的"DB2".脉冲=False,等再到下周期时就回到了阶段1;
阶段4.当定时时间到发生在③所处的位置,不影响定时器的更新,需要到下一周期才会改变输出,就回到了阶段2。
从上可知无论定时器时间到发生在哪个点,定时器都可以实现自复位,但是只有当定时时间到发生在②所处的位置时,"DB2".脉冲=True只保持一个周期,形成了脉冲,而在①和③时"DB2".脉冲始终为False无法形成脉冲。在正常程序中②的执行时间在整个扫描周期中占比很小,因此只有很低的概率可以实现脉冲。所以不能使用此种方法,第二个错误方法与之类似。
3. 如何使用定时器实现精确定时?
答:不能做到。
举例来说,定时1s的接通延时定时器,当程序扫描到定时器功能框的Q点或ET时或者扫描到背景DB(或IEC_TIMER类型的变量)中的Q点或者ET时,如果时间为997ms,只会继续定时等下一次扫描,而下一次扫描到可能就是1003ms,此时定时器接通。也就是说几乎不可能正好1s接通,如果再配合计数器实现更长时间的定时,误差只会越来越大。
所以精确定时还是推荐使用循环中断(OB30)配合计数器来实现。
4. 定时器指令中,功能框和线圈型的区别?
答:原理上是完全一样的,细微区别:
(1) 功能框定时器上可以定义Q点或ET,在程序中可以不必出现背景DB(或IEC_TIMER类型的变量)中的Q点或者ET;而线圈型定时器必须使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET;
(2) 功能框定时器在使用时可以自动提示生成背景块,或者选择不生成;而线圈型定时器只能通过手动方式建立背景块;
(3) 线圈型定时器如果出现在网络段中间时不影响RLO的变化,如图14所示,"DB46".Static_1和I1.0同步变化。
图14 线圈型定时器示例
相关问答
怎样设置编程时间?
很多小型PLC如西门子S7-200、三菱FX2N等并不提供以小时(或大于小时)为时基的定时器。这些PLC提供的指令最大只有100ms*32767,也就是约3200杪左右,不到一小时...
PLC原始时间如何设定?
1、在联机的情况下,通过STEP7软件菜单指令直接设定系统时钟。2、菜单命令设定系统时钟3、菜单命令设定系统时钟4、菜单命令设定系统时钟上述几种方法,都会...
Plc时间是多少进制?
PLC时间通常是以二进制表示的,即每个时间单元可以用二进制数来表示。这种表示方法在控制系统中很常见,因为它能够更好地与计算机系统配合。而且,二进制表示方...
plc系统时间如何设置?
使用“设置时钟”命令设置实时时钟1.PLC通电,以太网连接编程计算机,打开编程软件STEP7-Micro/WINSMART,新建项目,重命名为“设置和读取实时时钟”,单击...
三菱plc执行一个指令需要多少时间?
每个指令他所占用的程序步是不一样的,相当于指令的容量。比如16位的加法指令ADDD0D1D2他占用7步,32位的加法指令DADDD0D2D4他占用13步,比如32位绝对位...
plc时间继电器指令?
在三菱PLC中,可以使用"TIMER"指令来实现时间延迟操作。使用此指令可以在PLC程序中创建一个时间继电器。下面是TIMER指令的语法:TIMER(TimingData,...
西门子plc时钟指令编程实例?
西门子PLC时钟指令编程实例可以通过SFC14指令来实现。在程序中定义一个时间变量,然后使用SFC14指令读取系统时间,并将其存储到定义的变量中。可以通过这个变量...
如何用PLC程序计算出置位和立即置位分别的接通时间?
用时间间隔指令编程就可以监测到接通的时间。建议你去看一下我的文章,《PLC时间间隔指令知多少?--(二)破除定时器使用个数限制》,里边我针对你这问题做了...
信捷plc怎么实现时间的改变?
信捷PLC脉冲指令加减速时间均可调设置方法:使用精确定时来做不受扫描周期影响。在用户程序执行阶段,可编程逻辑控制器总是按由上而下的顺序依次地扫描...
信捷plc定时器的分钟定时如何录入?
以三菱PLC为例先点击输出指令,输入Txx,空格,输入Kxx,确定。Txx类型说明其中定时器定时时间有1ms、10ms、100ms三类1ms:T246~T249,共4点,定时范围0.......