4、基本语法元素:注释、标识符与关键字、数据类型概览
好,咱们正式开始写代码了。不过别急,写代码之前,得先把几个最基础的东西搞清楚。就像盖房子要先认识砖头、水泥和钢筋一样。今天我们就聊聊SCL里的“砖头”——注释、标识符、关键字,还有最常用的几种数据类型。
4.1 注释:给代码加个“说明书”
注释这东西,说白了就是写给程序员自己看的。机器编译的时候会直接忽略它。但你别小看注释,我见过太多项目,半年后连自己写的代码都看不懂了。
SCL里注释有两种写法:
- 单行注释:用
//开头,整行都变成注释。 - 多行注释:用
(*开头,*)结尾,中间可以写好几行。
// 这是单行注释,一般用来解释下一行代码
myVar := 100; // 也可以写在代码后面
(*
这是多行注释
适合写一大段说明文字
比如这个功能块的逻辑说明
*)
(* (* *) *) 这种写法会报错。我曾经在调试一个老项目时,就因为注释嵌套,找了整整一下午的bug。嗯,从那以后我再也不这么写了。
4.2 标识符与关键字:起名字的规矩
标识符就是你给变量、函数、块起的名字。比如 myMotorSpeed、Valve_Status 这些。起名字有规矩,你想想看,要是名字乱起,编译器根本认不出来。
标识符的命名规则:
- 只能包含字母、数字和下划线(
_) - 不能以数字开头
- 不能和关键字重名
- 不区分大小写(但建议统一风格)
// 合法的标识符
MotorSpeed
Valve_1
temp_value
Counter_100
// 非法的标识符
1Motor // 数字开头,不行
Motor-Speed // 有连字符,不行
Valve@1 // 有特殊符号,不行
关键字是语言保留的词,有特殊含义。你不能拿它们当变量名。比如 IF、THEN、WHILE、VAR 这些。我刚开始学的时候,就试过把变量命名为 END_IF,结果编译直接报错。你想想看,编译器看到 END_IF 还以为你要结束一个条件语句呢。
| 分类 | 关键字 |
|---|---|
| 程序控制 | IF, THEN, ELSE, FOR, WHILE, REPEAT, CASE |
| 声明 | VAR, END_VAR, CONSTANT, RETAIN |
| 数据类型 | BOOL, INT, REAL, STRING, ARRAY, STRUCT |
| 其他 | PROGRAM, FUNCTION, FUNCTION_BLOCK, RETURN |
4.3 数据类型概览:选对容器装对东西
数据类型,说白了就是告诉PLC:“我这个变量要存什么类型的数据”。选错了类型,轻则数据溢出,重则设备乱动。我在项目中遇到过一位同事,用 INT 存一个温度值,结果温度超过32767度(虽然不太可能),直接变成负数,把加热器给关了。嗯,这锅得数据类型来背。
下面这四种是最常用的,你得记牢:
| 数据类型 | 说明 | 取值范围 | 典型用途 |
|---|---|---|---|
| BOOL | 布尔型,只有两个值 | TRUE 或 FALSE | 开关信号、状态标志 |
| INT | 16位有符号整数 | -32768 到 32767 | 计数器、小范围数值 |
| REAL | 32位浮点数 | ±1.18e-38 到 ±3.40e+38 | 模拟量、温度、压力 |
| STRING | 字符串 | 默认256个字符 | 报警文本、设备名称 |
咱们一个个说:
BOOL:最简单的开关
BOOL 就两个状态:TRUE 和 FALSE。对应到实际设备,就是“启动/停止”、“开/关”、“有/无”。你想想看,一个按钮按下去,信号就是 TRUE,松开就是 FALSE。简单吧?
VAR
StartButton : BOOL;
MotorRun : BOOL;
END_VAR
IF StartButton THEN
MotorRun := TRUE;
END_IF
INT:整数,但别超范围
INT 是16位的整数,范围有限。我建议你养成习惯:如果数值可能超过30000,就用 DINT(32位整数)。别问我为什么,问就是吃过亏。
VAR
Counter : INT;
BigNumber : DINT; // 32位,范围大得多
END_VAR
Counter := 1000; // 没问题
Counter := 40000; // 溢出!变成负数
32767 + 1 结果不是 32768,而是 -32768。我曾经在一条生产线上,计数器每到32767就跳变,找了半天才发现是溢出问题。
REAL:带小数点的数
REAL 就是浮点数,用来存温度、压力、流量这些模拟量。注意一点:浮点数有精度问题,别拿它做精确的相等比较。
VAR
Temperature : REAL;
Pressure : REAL;
END_VAR
Temperature := 23.5;
Pressure := 1.013e5; // 科学计数法也行
STRING:文字信息
STRING 用来存文本,比如报警信息、设备名称。默认长度是256个字符,你也可以指定长度。
VAR
AlarmText : STRING[50]; // 最多50个字符
DeviceName : STRING;
END_VAR
AlarmText := '温度过高,请检查冷却系统';
知识体系总览
下面这张图,把今天讲的内容串起来了。你一看就明白:注释是给代码加说明,标识符是起名字的规矩,关键字是保留词不能乱用,数据类型是给变量定“容器”。
好了,这一章的内容就这些。注释、标识符、关键字、数据类型,这四个东西是SCL的“地基”。地基打牢了,后面写逻辑才稳当。下一章我们开始讲变量声明和赋值,到时候这些数据类型就真正派上用场了。