FX3U 结构化 ST 里面,不能直接使用梯形图的 T、C 线圈,需要使用专用指令:
OUT_T:硬件定时器输出,替代梯形图OUT T0 KxxOUT_C:硬件计数器输出,替代梯形图OUT C0 Kxx
今天用一个多步骤灯光闪烁案例,带大家吃透 FX3U‑ST 中定时器、计数器的写法,实现分段工艺流程:绿灯闪烁→红灯闪烁→红绿灯同时闪烁完整工序。
硬件说明:FX3U PLC,GX Works2 结构化工程,使用硬件 T 定时器、C 计数器资源。
IO分配
|----|-------|-----|----|
| 输入 | | 输出 | |
| X0 | 自动运行 | Y10 | 绿灯 |
| X1 | 自动停止 | Y11 | 红灯 |
| X2 | 单周期运行 | | |
工艺逻辑:
- 按下启动 X0,或者触发 X2 单周期模式;
- 第一步:绿灯 Y10 闪烁,一共闪烁 6 次;
- 第二步:绿灯完成后,红灯 Y11 闪烁,一共闪烁 4 次;
- 第三步:红灯完成后,红绿灯同时闪烁 5 次,全部熄灭;
- X1 自动运行状态运行周期结束停止。
闪烁原理:使用两个定时器交替通断,实现灯亮 500ms、灭 500ms;计数器统计闪烁循环次数,到达设定次数切换工艺步骤。
二、完整 ST 代码
;(*例:多路闪烁计数电路, 按下启动按钮(XO),
1、绿灯(Y10)闪6次, X0自动启动,
2、然后红灯(Y11)闪4次, X1自动停止,
3、接着红绿灯同时闪5次后灭 X2自动运行一次*)
(*初始化*)
ZRST(M8002,M0,M50);
SET(M8002,M0);
(*自动启动保持停止*)
M30:=(X0 OR M30) & NOT X1;
(*自动等待*)
SET(M0&(M30 OR X2),M10);
RST(M0&(M30 OR X2),M0);
(*自动第一步(Y10)闪6次*)
M20:=M10&NOT TS0;
OUT_T(M10,TC0,10);
OUT_T(TS0,TC1,10);
RST(TS1,TC0);
OUT_C(TS1,CC0,6);
RST(CS0,M10);(*复位当前步骤*)
SET(CS0,M11);(*进入下一步*)
RST(CS0,CC0);(*复位计数器*)
(*自动第二步红灯(Y11)闪4次*)
M21:=M11&NOT TS2;
OUT_T(M11,TC2,10);
OUT_T(TS2,TC3,10);
RST(TS3,TC2);
OUT_C(TS3,CC1,4);
RST(CS1,M11);
SET(CS1,M12);(*进入下一步*)
RST(CS1,CC1);(*复位计数器*)
(*自动第三步 红绿灯同时闪5次*)
M22:=M12&NOT TS4;
OUT_T(M12,TC4,10);
OUT_T(TS4,TC5,10);
RST(TS5,TC4);
OUT_C(TS5,CC2,5);
RST(CS2,M12);
SET(CS2,M0);(*跳回等待状态*)
RST(CS2,CC2);(*复位计数器*)
(*输出逻辑,驱动外部灯*)
Y10:=M20 OR M22;
Y11:=M21 OR M22;
三、核心指令知识点讲解
⚠️FX3U 的 ST 结构化,没有 TON 功能块,必须使用硬件定时器 / 计数器指令
-
OUT_T(使能,TC编号,设定值)TC0 对应硬件 T0,T0‑T199 时基 100ms,K10 = 1000ms (1 秒)。TS0代表 T0 定时器完成触点,等价梯形图 T0 常开。 -
OUT_C(计数触发信号,CC编号,设定值)CC0 对应硬件 C0 计数器;CS0计数器到达标志。 触发信号每一次上升沿,计数器 + 1;CS0=ON代表计数到达设定值。 -
ZRST批量复位;SET/RST置位复位指令,ST 里面可以直接调用。
闪烁实现原理
OUT_T(M10,TC0,10); // M10接通,T0计时1s
OUT_T(TS0,TC1,10); // T0计时完成,启动T1计时1s
RST(TS1,TC0); // T1计时完成复位T0
TC0、TC1 互相触发,交替计时,形成 1 秒亮、1 秒灭的振荡,实现灯光闪烁。 每次闪烁完成 TS1 触发一次OUT_C,计数器记录闪烁次数。
四、流程拆解
-
上电初始化
ZRST(M8002,M0,M50),上电复位 M0‑M50,SET M0 进入待机等待状态。 -
启动逻辑
M30:=(X0 OR M30) & NOT X1;X0 自锁启动,X1 切断自锁实现停止。 X0 启动或者 X2 单周期触发,置位 M10,进入第一步流程。 -
步骤 1:绿灯闪烁 6 次 M10 激活 TC0、TC1 交替定时,Y10 闪烁; 每完成一次闪烁,CC0 计数器 + 1;
CS0=ON计数到 6 次,复位 M10,置位 M11,切换到第二步红灯闪烁。同时复位计数器 CC0。 -
步骤 2:红灯闪烁 4 次 M11 激活 同理,CC1 计数 4 次,计数完成切换 M12 进入第三步。
-
步骤 3:红绿灯同时闪烁 5 次 M12 激活 CC2 计数 5 次;计数完成,复位 M12,置位 M0 回到待机状态,等待下一次启动。
-
输出赋值
Y10:=M20 OR M22; //第一步绿灯、第三步同时闪烁时绿灯输出
Y11:=M21 OR M22; //第二步红灯、第三步同时闪烁时红灯输出
五、注意
- ✅
OUT_T、OUT_C必须使用全局硬件 TCxx、CCxx,不能使用 FB 局部变量,否则编译报错。 - 定时器完成触点是
TS0,计数器到达标志是CS0,不要直接写 TC0、CC0。 - FX3U T0‑T199 时基 100ms,K10=1 秒,不要搞错时基。
- 计数器计数完成 CS0 不会自动清零,步骤切换时手动 RST 复位计数器。