SCL LOWER_BOUND — 数组下界
读数组下界;配合 VARIANT/ARRAY[*] 使用。
数组相关的 SCL 指令分成两类:读边界/元素数(LOWER_BOUND、UPPER_BOUND、CountOfElements)和转字节流(Serialize、Deserialize)。
数组下界不一定是 0;通用代码要用 LOWER_BOUND/UPPER_BOUND 动态取范围,不要写死 0..N。
Serialize/Deserialize 适合把结构体/数组写到通信缓冲区或文件;POS 是零基索引,类型/对齐必须两边一致。
| 需求 | 指令 |
|---|---|
| 读下界/上界 | LOWER_BOUND / UPPER_BOUND |
| 读元素总数 | CountOfElements |
| 结构/数组转字节流 | Serialize |
| 字节流转回结构/数组 | Deserialize |
| 数组之间复制 | MOVE_BLK |
1#Low := LOWER_BOUND(ARR := #Data, DIM := 1);
2#High := UPPER_BOUND(ARR := #Data, DIM := 1);
3FOR #i := #Low TO #High DO
4 // ...
5END_FOR;
1#Pos := 0;
2#Ret := Serialize(SRC_VARIABLE := #Source, DEST_ARRAY := #Buffer, POS := #Pos);
3// ...
4#Pos := 0;
5#Ret := Deserialize(SRC_ARRAY := #Buffer, DEST_VARIABLE := #Target, POS := #Pos);
通信/文件两端的结构定义要一致;缓冲区要够大。
不一定。Array[0..7] 下界是 0,Array[1..8] 下界是 1;通用代码用 LOWER_BOUND 读,不要写死。
CountOfElements 直接返回元素总数;UPPER_BOUND 返回上界,还要减去下界再加 1 才是长度。
零基:第一次调用前 POS=0,调用后 POS 是已用字节数;缓冲区低界建议从 0 开始。
DEST/SRC 必须是 ARRAY of BYTE 或 CHAR;结构定义两边一致;标准访问有 64 KB 上限,优化访问有固件版本要求。