您现在所在的是:

PLC论坛

回帖:0个,阅读:17 [上一页] [1] [下一页]
23679
bnnyygy
文章数:6779
年度积分:952
历史总积分:23679
注册时间:2012/3/15
发站内信
2018论坛分享达人
发表于:2026/7/11 6:28:35
#0楼
正常是TONR放在CASE外面,当然也是最合理的,但是,如果CASE太长,TONR太多,看起来也乱也不方便管理,所有考虑放到CASE里面,这样也有好处,不用的TONR不用每个周期都去判断一次。

直接上代码。<关键点:当TONR.Q=1的时候,断开TONR.IN,TONR本身还要扫描一遍,这样它自身各种状态就会复位,TONR.R一般我是没用。>


//B0启动,两个定时器2000MS来回跳转
CASE vi_step OF
0://启动,
if b0 THEN
vi_step:=10;
END_IF;
10://进入step10,定时器IN=1,
//TONR.IN=1,开始工作,
//当TONR.Q=1的时候,TONR.IN=0,+STEP跳转,
//*关键,TONR需要再次扫描一遍,它就恢复初始状态。

vb_t[0,0]:=TRUE;
if vb_t[1,0] THEN
vb_t[0,0]:=FALSE;
vi_step:=20;
end_if;
TONR(IN := vb_t[0,0],PT := 2000,R := ,Q =>vb_t[1,0] ,ET => vd_Et[0]);

20:
vb_t[0,1]:=TRUE;
if vb_t[1,1] THEN
vb_t[0,1]:=FALSE;
vi_step:=10;
end_if;
TONR(IN := vb_t[0,1],PT := 2000,R := ,Q =>vb_t[1,1] ,ET => vd_Et[1]);

END_CASE;


以上,如果自己写FB TON,应该也需要一样的时序,TON如果需要在当前STEP复位,需要多扫描一次。

当然,也可以优化一下,TONR.IN:= vi_step=当前步,这样也可以的,节约变量,代码长度


GIF 效果:

附件 GIF 2026-7-11 6-32-18.gif
[此贴子已经被作者于2026/7/11 6:39:28编辑过]

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2026 Gkong.com, All Rights Reserved

15.6001