SCL CONCAT — 拼接字符串
把多个 STRING/WSTRING 拼成一个;注意目标长度和参数个数。
SCL 的字符串指令集中在 TIA 的“扩展指令 → 字符串 + 字符”里。它们有一个共同点:位置从 1 开始,长度是字符数,不是字节数。
STRING 默认最大 254 个字符;WSTRING 是宽字符。结果超过目标容量时会被截断,所以拼接、插入、替换前先算好长度。
这一组 9 条指令(含 CONCAT)都配完整 FB 示例,并在 PLC 云仿真里跑过边界场景:空串、越界位置、找不到、L=0 等。
把多个 STRING/WSTRING 拼成一个;注意目标长度和参数个数。
取字符串当前长度;空串返回 0。
取左边 N 个字符。
取右边 N 个字符。
从位置 P 取 N 个字符;位置从 1 开始。
查找子串位置;找不到返回 0。
在指定位置插入字符串。
删除指定位置的一段字符。
替换指定位置的一段字符。
| 需求 | 指令 |
|---|---|
| 查当前长度 | LEN |
| 取左边 / 右边 / 中间 | LEFT / RIGHT / MID |
| 查找子串位置 | FIND |
| 插入 / 删除 / 替换 | INSERT / DELETE / REPLACE |
| 拼接多个字符串 | CONCAT |
订单号格式是 AB-202601,先找分隔符,再取前后字段:
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。
从 1 开始。MID/INSERT/DELETE/REPLACE 的 P 参数第一个字符都是 1;FIND 找到时也返回 1-based 位置,找不到返回 0。
普通 ASCII 用 STRING;需要稳定处理中文等宽字符时用 WSTRING。两者不要混用,混用通常编译报错或出现乱码。
结果超过了目标 STRING[n]/WSTRING[n] 的最大容量。先算结果长度,再把目标声明大一点,或者在写入前主动截断并报警。
TIA 的约定是找不到返回 0;0 不是合法字符位置,所以用 IF Position > 0 判断是否找到。