主题
计数器 C
计数器分类
| 类型 | 编号范围 | 点数 | 位数 | 计数方向 | 掉电保持 |
|---|---|---|---|---|---|
| 通用计数器 | C0-C99 | 100 | 16 位 | 增计数 | 否(可改) |
| 保持计数器 | C100-C199 | 100 | 16 位 | 增计数 | 是(可改) |
| 通用 32 位双向计数器 | C200-C219 | 20 | 32 位 | 增/减 | 否(可改) |
| 保持 32 位双向计数器 | C220-C234 | 15 | 32 位 | 增/减 | 是(可改) |
| 高速计数器 | C235-C255 | 21 | 32 位 | 增/减 | 是 |
16 位计数器
- 计数范围:0~32,767(K0 与 K1 效果相同,第一次计数即动作)
- 只能增计数,到达设定值后保持
- 须用 RST 指令复位清零
LD X5
OUT C10 K9 ; 设定 C10 计数 9 次
LD C10 ; C10 到达 9 后触点动作
OUT Y0
LD X6
RST C10 ; X6 ON 时复位 C10计数值怎么读出来、怎么循环计数
C 既是触点也是数值。触点用 LD C10,当前值直接把 C10 当操作数搬走:
LD M8000
MOV C10 D8028 ; 把 C10 的当前计数值送到 D8028M8000 常通,表示"每个扫描周期都刷新一次"——现场绝大多数程序就是这个形状。 计数器当前值也能当比较的对象:
LD M8000
AND>= C10 K100 ; 计到 100 次及以上时导通
OUT M20到值后不会自己清零,必须复位
16 位计数器到设定值后触点和当前值都保持,不复位就只动作一次。 两种正规写法:
; 写法一:外部条件复位
LD X6
RST C10
; 写法二:靠自己的上升沿自复位,做「每计满 K9 个就动作一次」的循环计数
LDP C10
RST C10ZRST C10 C19 一次复位一段(批量清零比逐个 RST 省步数)。 现场统计里没有一个程序用了计数器却不复位——这不是风格问题,是这类程序根本跑不起来。
32 位计数器
- 计数范围:-2,147,483,648 ~ +2,147,483,647
- 通过 M8200~M8234 控制增/减方向:M8□□□=ON 时减计数,OFF 时增计数
- 环形计数器:增计数到上限后变为下限,反之亦然
| 计数器 | 方向控制 | 计数器 | 方向控制 | 计数器 | 方向控制 |
|---|---|---|---|---|---|
| C200 | M8200 | C210 | M8210 | C220 | M8220 |
| C201 | M8201 | C211 | M8211 | C221 | M8221 |
| C202 | M8202 | C212 | M8212 | C222 | M8222 |
| C203 | M8203 | C213 | M8213 | C223 | M8223 |
| C204 | M8204 | C214 | M8214 | C224 | M8224 |
| C205 | M8205 | C215 | M8215 | C225 | M8225 |
| C206 | M8206 | C216 | M8216 | C226 | M8226 |
| C207 | M8207 | C217 | M8217 | C227 | M8227 |
| C208 | M8208 | C218 | M8218 | C228 | M8228 |
| C209 | M8209 | C219 | M8219 | C229-C234 | M8229-M8234 |
LD X0
OUT C200 K100 ; 32 位计数器,设定值 100
LD M8200
OUT Y10 ; 显示 C200 增/减方向
LD C200
OUT Y0 ; C200 到达设定值时动作
LD X1
RST C200 ; 复位高速计数器 C235-C255
高速计数器通过硬件计数,不受扫描周期影响。输入分配如下:
| 计数器 | 类型 | X0 | X1 | X2 | X3 | X4 | X5 | X6 | X7 |
|---|---|---|---|---|---|---|---|---|---|
| C235 | 单相 | U/D | |||||||
| C236 | 单相 | U/D | |||||||
| C237 | 单相 | U/D | |||||||
| C238 | 单相 | U/D | |||||||
| C239 | 单相 | U/D | |||||||
| C240 | 单相 | U/D | |||||||
| C241 | 单相+启动复位 | U/D | R | ||||||
| C242 | 单相+启动复位 | U/D | R | ||||||
| C243 | 单相+启动复位 | U/D | R | ||||||
| C244 | 单相+启动复位 | U/D | R | S | |||||
| C245 | 单相+启动复位 | U/D | R | S | |||||
| C246 | 双相 | U | D | ||||||
| C247 | 双相+启动复位 | U | D | R | |||||
| C248 | 双相+启动复位 | U | D | R | |||||
| C249 | 双相+启动复位 | U | D | R | S | ||||
| C250 | 双相+启动复位 | U | D | R | S | ||||
| C251 | A/B 相 | A | B | ||||||
| C252 | A/B 相+启动复位 | A | B | R | |||||
| C253 | A/B 相+启动复位 | A | B | R | |||||
| C254 | A/B 相+启动复位 | A | B | R | S | ||||
| C255 | A/B 相+启动复位 | A | B | R | S |
U/D=增/减计数输入,U=增计数输入,D=减计数输入,A=A相,B=B相,R=复位输入,S=启动输入
方向控制:M8235~M8255 控制 C235~C255 的增/减方向(ON=减计数)。
未使用的定时器/计数器
没有用作定时器/计数器的编号,也可作为数据寄存器使用。