我目前正在S7 1500上使用ST(SCL)进行一个小型编码练习,其中2个数组a(长度较大的一个)和B相互比较并检查匹配元素。
但是,数组B由字母数字字符和特殊字符(分号)组成,例如:"12345;12346B;12347A"等,而数组A没有分号。我希望在分隔符或EndSeparator为";"的情况下实现拆分功能以分离数字束,并将分割的数字与阵列A元素进行比较,以检查阵列A中是否也存在12345。
由于数组A的范围未定义,我已将LOWER_BOUND和UPPER_BOUND用于数组限制。
我该怎么做?任何建议都将不胜感激。:)
参考:
#LowerBound := LOWER_BOUND(ARR := #ARRAY_B, DIM := 1);
#UpperBound := UPPER_BOUND(ARR := #ARRAY_B, DIM := 1);
SPLIT(Mode:= _dword_in_, RecSeparator:=_variant_in_, EndSeparator:=_variant_in_, SrcArray:=_variant_in_, Count=>_udint_out_, DstStruct:=_variant_inout_, Position:=_udint_inout_)
您可以编写自己的SPLIT函数。
FUNCTION SPLIT : ARRAY[0..255] OF STRING(250)
VAR_INPUT
STR: STRING(250);
CHAR: STRING(1);
END_VAR
VAR
iPos: INT;
sTest: STRING(250);
iIndex: INT;
xFinish: BOOL;
END_VAR
sTest := STR;
REPEAT
iPos := FIND(sTest, CHAR);
IF iPos = 0 THEN
SPLIT[iIndex] := sTest;
xFinish := TRUE;
ELSE
SPLIT[iIndex] := LEFT(sTest, iPos - 1);
sTest := RIGHT(sTest, LEN(sTest) - iPos);
END_IF;
iIndex := iIndex + 1;
UNTIL (xFinish = TRUE)
END_REPEAT;
END_FUNCTION
然后在代码中
VAR
arsTest: ARRAY[0..255] OF STRING(250);
END_VAR
arsTest := SPLIT('12345;12346B;12347A', ';');