跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL 字符串指令

SCL 字符串指令

西门子 SCL 字符串指令:长度、截取、查找、插入、删除、替换和拼接。位置从 1 开始,含完整 FB 示例、参数表和常见坑。

SCL 的字符串指令集中在 TIA 的“扩展指令 → 字符串 + 字符”里。它们有一个共同点:位置从 1 开始,长度是字符数,不是字节数。

STRING 默认最大 254 个字符;WSTRING 是宽字符。结果超过目标容量时会被截断,所以拼接、插入、替换前先算好长度。

这一组 9 条指令(含 CONCAT)都配完整 FB 示例,并在 PLC 云仿真里跑过边界场景:空串、越界位置、找不到、L=0 等。

SCL 字符串指令 9

怎么选

需求 指令
查当前长度 LEN
取左边 / 右边 / 中间 LEFT / RIGHT / MID
查找子串位置 FIND
插入 / 删除 / 替换 INSERT / DELETE / REPLACE
拼接多个字符串 CONCAT

一个常见的解析例子

订单号格式是 AB-202601,先找分隔符,再取前后字段:

SCL
1#Dash := FIND(IN1 := #OrderNo, IN2 := '-');
2IF #Dash > 0 THEN
3   #Plant  := LEFT(IN := #OrderNo, L := #Dash - 1);
4   #Period := MID(IN := #OrderNo, L := 6, P := #Dash + 1);
5END_IF;

注意 FIND 找不到返回 0,不能直接拿 0 去做 MID 的起始位置;先判断 #Dash > 0。

常见问题

SCL 字符串位置从 0 还是 1 开始?

从 1 开始。MID/INSERT/DELETE/REPLACE 的 P 参数第一个字符都是 1;FIND 找到时也返回 1-based 位置,找不到返回 0。

STRING 和 WSTRING 怎么选?

普通 ASCII 用 STRING;需要稳定处理中文等宽字符时用 WSTRING。两者不要混用,混用通常编译报错或出现乱码。

为什么字符串结果被截断了?

结果超过了目标 STRING[n]/WSTRING[n] 的最大容量。先算结果长度,再把目标声明大一点,或者在写入前主动截断并报警。

FIND 找不到为什么返回 0?

TIA 的约定是找不到返回 0;0 不是合法字符位置,所以用 IF Position > 0 判断是否找到。

← 返回 SCL 指令手册