第四节:数据类型与变量——工控编程的“砖瓦”
各位工程师朋友,咱们今天聊聊数据类型和变量。这玩意儿听起来基础,但说实话,我见过太多项目出问题,根源就在这上面栽了跟头。你想想看,盖房子地基没打好,后面装修再漂亮也白搭。工控编程也是这个理。
一、基本数据类型:工控世界的“原子”
基本数据类型,说白了就是PLC能直接认识的最基础的数据格式。我习惯把它们分成几类来记:
1. BOOL(布尔型)
这是最小的数据单位,就两个值:TRUE或FALSE。在梯形图里,它对应一个触点或线圈的状态。
实际应用:电机启停、阀门开关、报警信号……几乎所有数字量信号都用BOOL表示。
我的经验:BOOL变量命名时,我习惯加前缀“b_”,比如b_MotorRun、b_AlarmHigh。这样一眼就能看出是布尔量,排查问题快很多。
2. INT(整型)
16位有符号整数,范围-32768到32767。计数器、定时器预设值、模拟量转换后的原始值,经常用INT。
我曾经踩过的坑:有一次做温度采集,模拟量模块输出0-27648对应0-100度。我直接用INT变量存,结果温度超过100度时,数值溢出变成了负数,加热器还在拼命加热……后来我改成REAL类型,再也没出过这问题。
3. REAL(浮点型)
32位浮点数,能表示小数。PID运算、流量累计、压力换算,这些带小数的计算,必须用REAL。
嗯,这里要注意:REAL的精度有限,做高精度累加时,误差会慢慢累积。我一般每1000次累加做一次清零或补偿。
4. TIME(时间型)
PLC里专门存时间间隔的数据类型。格式通常是T#1h30m20s500ms这种。
我个人习惯用TIME做超时判断,比如“如果泵启动后5秒内压力没上来,就报警”。比用INT自己算秒数方便多了。
| 数据类型 | 位数 | 范围 | 典型用途 |
|---|---|---|---|
| BOOL | 1位 | TRUE/FALSE | 开关量、状态位 |
| INT | 16位 | -32768 ~ 32767 | 计数器、模拟量原始值 |
| REAL | 32位 | ±1.18e-38 ~ ±3.4e38 | PID、浮点运算 |
| TIME | 32位 | 0 ~ 24天20小时 | 定时、超时判断 |
二、用户自定义类型:把“砖瓦”砌成“预制板”
光有基本类型不够用。比如一个电机,有启停命令、运行状态、电流值、温度值……每次都要声明4个变量,太麻烦。这时候就该自定义类型上场了。
1. STRUCT(结构体)
把多个不同类型的数据打包成一个整体。我定义一个电机结构体:
TYPE MotorType :
STRUCT
b_StartCmd : BOOL; // 启动命令
b_RunStatus : BOOL; // 运行状态
r_Current : REAL; // 电流值
r_Temperature : REAL; // 温度值
t_OverloadTimer : TIME; // 过载计时
END_STRUCT
END_TYPE
声明变量时直接写:Motor1 : MotorType; 然后通过 Motor1.b_StartCmd 访问。是不是清爽多了?
我建议:把项目中所有设备都定义成结构体。这样程序结构清晰,后期维护时,改一个结构体定义,所有实例自动更新。
2. ENUM(枚举)
枚举就是给一组整数起个名字。比如设备状态:
TYPE DeviceState :
(
IDLE := 0, // 空闲
RUNNING := 1, // 运行中
FAULT := 2, // 故障
MAINTENANCE := 3 // 维护中
);
END_TYPE
用枚举代替魔法数字,代码可读性直接拉满。你想想看,看到 IF state = 2 THEN 和 IF state = FAULT THEN,哪个更直观?
三、变量作用域与生命周期:你的变量“活”多久?
这个问题,我刚开始做项目时也迷糊过。变量到底在哪儿能用?能活多久?
1. 作用域:变量能“看”到多远
- 局部变量:只在当前POU(程序组织单元)里有效。比如FB(功能块)内部的变量,外面看不见。好处是封装性好,不会互相干扰。
- 全局变量:整个项目都能访问。我一般只放系统级的参数,比如“急停状态”、“系统模式”。
我曾经犯过的错:在一个大项目里,全局变量用了上百个。结果调试时,一个地方改了值,另一个地方莫名其妙受影响。查了两天才找到原因。从那以后,我定了个规矩:能用局部变量,绝不用全局的。
2. 生命周期:变量什么时候“生”,什么时候“死”
- 全局变量:PLC上电就存在,断电才消失。适合存需要保持的数据,比如累计产量。
- 局部变量:每次调用POU时创建,调用结束就销毁。适合做临时计算。
- 保持型变量(RETAIN):断电后数据不丢失。我用来存配方参数、设备校准值。
核心原则:变量的“寿命”越长,越要小心管理。全局变量就像公共厕所,谁都能进,但卫生状况堪忧。局部变量像自家卫生间,干净但只有自己能用。
四、知识体系总览
下面这张图,是我自己总结的数据类型与变量知识框架。你看一眼,心里就有谱了:
这张图把今天讲的内容串起来了。你保存下来,写程序时对照着看,思路会清晰很多。
最后说一句:数据类型和变量,是工控编程的“砖瓦”。砖瓦选对了、放对了地方,房子才能盖得稳。别嫌基础,我见过太多高级工程师,最后栽在变量类型不匹配、作用域混乱这些“小问题”上。
公众号:蓝海资料掘金营,微信deep3321