博图SCL语言教程:灵活加、减计数制作自己的增减计数器(CTUD)
博图SCL语言教程:使用SCL实现增减计数器(CTUD)
一、什么是增减计数器(CTUD)?
增减计数器(Up-Down Counter)是PLC编程中的基础功能块,具有以下特性:
-
CU (Count Up):上升沿触发计数值增加
-
CD (Count Down):上升沿触发计数值减少
-
R (Reset):复位计数值到0
-
LD (Load):装载预设值到当前值
-
PV (Preset Value):目标设定值
-
当
CV >= PV
时,QU 输出为True -
当
CV <= 0
时,QD 输出为True
二、SCL实现代码(完整函数块)
FUNCTION_BLOCK FB_CTUD VAR_INPUTCU: BOOL; // 加计数脉冲(上升沿有效)CD: BOOL; // 减计数脉冲(上升沿有效)R: BOOL; // 复位(优先级最高)LD: BOOL; // 装载预设值PV: INT; // 预设值 END_VARVAR_OUTPUTQ: BOOL; // 达到预设值(CV >= PV)QU: BOOL; // 上溢输出(CV >= PV)QD: BOOL; // 下溢输出(CV <= 0)CV: INT; // 当前计数值 END_VAR
VARbLastCU: BOOL; // 记录CU上次状态bLastCD: BOOL; // 记录CD上次状态 END_VAR
// 主逻辑 BEGIN// 优先级1:复位信号IF R THENCV := 0;Q := FALSE;QU := FALSE;QD := TRUE;// 优先级2:装载预设值ELSIF LD THENCV := PV;QU := (CV >= PV);QD := (CV <= 0);Q := QU;// 正常计数逻辑ELSE// 检测CU上升沿IF CU AND NOT bLastCU THENCV := CV + 1;END_IF;// 检测CD上升沿IF CD AND NOT bLastCD THENCV := CV - 1;END_IF;// 更新输出状态QU := (CV >= PV);QD := (CV <= 0);Q := QU;END_IF;// 保存当前状态供下次扫描使用bLastCU := CU;bLastCD := CD; END_FUNCTION_BLOCK
三、使用示例
1. 在OB1中调用计数器
PROGRAM MAIN VARmyCTUD: FB_CTUD; // 实例化计数器bStartCount: BOOL; // 启动计数信号bResetCount: BOOL; // 复位信号iSetValue: INT := 6; // 预设值 END_VAR// 主程序 BEGINmyCTUD(CU := bStartCount, // 连接计数脉冲CD := FALSE, // 本例只使用加计数R := bResetCount, // 复位信号LD := FALSE, // 本例不使用装载PV := iSetValue // 设置目标值);// 当计数值达到10时触发动作IF myCTUD.Q THEN// 执行目标动作...END_IF; END_PROGRAM
2. 监控关键值
变量名 | 值 | 说明 |
---|---|---|
myCTUD.CV | 7 | 当前计数值 |
myCTUD.QU | FALSE | 未达到预设值 |
myCTUD.QD | FALSE | 计数值大于0 |
四、关键特性说明
-
信号优先级:
-
复位(R) > 装载(LD) > 计数(CU/CD)
-
复位时强制CV=0并清除输出
-
-
边沿检测:
// 典型上升沿检测结构 IF currentSignal AND NOT lastSignal THEN// 执行动作 END_IF;
-
输出更新规则:
-
QU = (CV >= PV)
-
QD = (CV <= 0)
-
Q = QU
(兼容标准CTUD行为)
-
五、实际应用场景
-
生产线工件计数(进料+1/剔除-1)
-
仓库库存管理(入库+1/出库-1)
-
电梯楼层定位(上行+1/下行-1)
六、调试技巧
-
在博图监控表中添加
myCTUD
的所有变量 -
使用强制表功能测试CU/CD信号
-
通过HMI显示当前计数值CV
七、SCL实现优势
-
代码紧凑:比LAD/FBD节省70%屏幕空间
-
灵活扩展:可轻松添加计数限制、速率计算等功能
-
复用性强:封装后的FB可在整个项目中调用
提示:在频繁高速计数的场合(如编码器脉冲),建议使用博图原生的"高速计数器"模块!
通过这个SCL实现的CTUD计数器,您可以获得比传统梯形图更简洁高效的代码结构。根据实际需求,可扩展添加以下功能:
-
计数范围限制(MIN/MAX)
-
计数速率计算
-
掉电保持功能
-
多重预设值支持
建议将此FB保存在项目库中,方便后续工程复用。