梯形图之外,信捷 XD/XL 还支持用 C 语言写功能块。本课先用一个「自由计数器」让你看见:同样的逻辑,用 C 写是什么样、又怎么和 D 软元件互动。
从这课起,梯形图之外多一种写法:C 语言功能块。画面上这台机器里跑着一个最简单的例子——自由计数器,每个扫描周期把 HD2 加一,加到超过 HD1 就点亮 HM0。别急着自己写,先看懂它每一步在干什么。
C 功能块的入口固定叫 plc_main,返回值和参数都是空的。每个扫描周期它被调用一次:扫一拍,执行一遍;再扫一拍,再执行一遍。没有循环、没有等待,所有状态靠自己记在寄存器里。这一点跟梯形图一个脾气。
自由计数器就动三个量:HD1 存阈值,HD2 存计数值,HM0 是完成位。每拍 HD2 加一,只要还没追上 HD1,HM0 就保持 0;一旦追上,HM0 变 1。改 HD1 的数,就改了到时长短。
把这段 C 翻译回梯形图,其实就两步:每拍 ADD K1 D2 D2 做自增,再用 LD>= D2 D1 比较,结果 OUT M0。C 版没有黑盒,每一步都摊在源码里,看得见也改得动。
光看不够,自己动手改。把 HD1 从 10 改成 3,回车一下,HM0 立刻提前点亮;再改回 20,又要多等十几拍。计数值 HD2 一直在走,这就是自由的意思——它不归零,一直往上数。
小结一下:C 功能块就是每拍被调用的 plc_main,状态记在寄存器里,逻辑全在明面上。下一课我们把内存摊开讲清楚:W 数组对应 HD,B 数组对应 HM,字节怎么排、地址怎么算,一次说明白。