4、基本语法元素:注释、标识符与关键字、数据类型概览

好,咱们正式开始写代码了。不过别急,写代码之前,得先把几个最基础的东西搞清楚。就像盖房子要先认识砖头、水泥和钢筋一样。今天我们就聊聊SCL里的“砖头”——注释、标识符、关键字,还有最常用的几种数据类型。

4.1 注释:给代码加个“说明书”

注释这东西,说白了就是写给程序员自己看的。机器编译的时候会直接忽略它。但你别小看注释,我见过太多项目,半年后连自己写的代码都看不懂了。

SCL里注释有两种写法:

  • 单行注释:用 // 开头,整行都变成注释。
  • 多行注释:用 (* 开头,*) 结尾,中间可以写好几行。
// 这是单行注释,一般用来解释下一行代码
myVar := 100;  // 也可以写在代码后面

(*
  这是多行注释
  适合写一大段说明文字
  比如这个功能块的逻辑说明
*)
我的习惯:单行注释用来解释“这行在干什么”,多行注释用来解释“这段逻辑为什么这么设计”。两者分工不同,别混着用。
注意:多行注释不能嵌套!也就是 (* (* *) *) 这种写法会报错。我曾经在调试一个老项目时,就因为注释嵌套,找了整整一下午的bug。嗯,从那以后我再也不这么写了。

4.2 标识符与关键字:起名字的规矩

标识符就是你给变量、函数、块起的名字。比如 myMotorSpeedValve_Status 这些。起名字有规矩,你想想看,要是名字乱起,编译器根本认不出来。

标识符的命名规则:

  • 只能包含字母、数字和下划线(_
  • 不能以数字开头
  • 不能和关键字重名
  • 不区分大小写(但建议统一风格)
// 合法的标识符
MotorSpeed
Valve_1
temp_value
Counter_100

// 非法的标识符
1Motor      // 数字开头,不行
Motor-Speed // 有连字符,不行
Valve@1     // 有特殊符号,不行

关键字是语言保留的词,有特殊含义。你不能拿它们当变量名。比如 IFTHENWHILEVAR 这些。我刚开始学的时候,就试过把变量命名为 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 就两个状态:TRUEFALSE。对应到实际设备,就是“启动/停止”、“开/关”、“有/无”。你想想看,一个按钮按下去,信号就是 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;      // 溢出!变成负数
避坑指南:INT 做加法时很容易溢出。比如 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基本语法元素 注释 // 单行注释 (* *) 多行注释 标识符 字母/数字/下划线 不能数字开头 关键字 IF, THEN, VAR... 不能用作变量名 数据类型 BOOL / INT REAL / STRING 核心要点 注释是写给人的,标识符是给变量起名,关键字是保留词,数据类型决定存什么 选对数据类型,代码就成功了一半

好了,这一章的内容就这些。注释、标识符、关键字、数据类型,这四个东西是SCL的“地基”。地基打牢了,后面写逻辑才稳当。下一章我们开始讲变量声明和赋值,到时候这些数据类型就真正派上用场了。

专注资料整理