比较2个字符数组并在S7 1500(PLC)上找到匹配项



我目前正在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', ';');

相关内容

  • 没有找到相关文章

最新更新