鸿信自动化 ST/C 语言模块 指令讲堂 资料下载 第 3 课
C 语言模块 · 第 3 课 基础

用 C 写一个定时器

6 段 · 共 1:25 · 数字人讲师示范 · 完全免费

用 C 实现自己的定时器:靠扫描周期累加,比梯形图定时器更灵活,也能写出梯形图难写的时序。

正在加载数字人讲师…
讲师模型较大(约 87MB),首次打开需要等待。加载完后数字人会自动开始讲解,这段时间可以先往下读讲稿。
已等待 0 秒
等待中… 在仿真器里打开

本课讲稿

1/6梯形图里一个 TMR 就够了0:13

说到定时器,梯形图上一个 TMR 就够了。可这节课我们偏要用 C 重写一遍——把黑箱拆开,看看定时器内部到底在数什么。数清楚了,C 里那几行才不神秘。

2/6功能块怎么跟 PLC 说话:W 数组 + B 数组0:10

先复习内存约定。C 功能块靠一块内存跟 PLC 对话:W 开头的数组对应 HD 寄存器,B 开头的对应 HM 位。入口固定叫 plc_main,每个扫描周期被调用一次,就这么简单。

3/6三个要素:使能、预设、当前计时0:18

一个定时器就仨要素:使能 IN、预设 PRE、已经计了多久 ET。在 C 里就是仨寄存器:HD0 放使能,HD1 放预设,HD2 拿来记当前计到多少。每拍给 ET 加一,这是心跳。

4/6到时输出 Q:为什么用大于等于0:16

计到预设就报警:ET 一到数就置输出 Q。这里有个细节——Q 得一直保持为 1,所以比较得用大于等于,不是大于。用大于的话,ET 正好等于 PRE 那一刻反倒会漏一拍。

5/6合起来:一个定时器就这几行0:13

合到一块其实没几行:使能通就每拍加一,加到预设置 Q,使能断就清零。C 好处是每一步都摊在明面上,逻辑一改就改,不像黑箱只能干看着。

6/6复位:断了使能就归零重来0:15

最后是复位。使能一断,当前计时清零、输出落下,下次通使能从头再计——这是定时器该有的样子。梯形图 TMR 也这样,断开 IN 计数归零。写 C 一样,别把状态忘了重置。