0

我目前正在使用 ST(SCL) 在 S7 1500 上进行小型编码练习,其中将 2 个数组 A(长度较大)和 B 相互比较并检查匹配元素。

然而,数组 B 由字母数字字符和特殊字符(分号)组成,例如:“12345;12346B;12347A”等,这与没有分号的数组 A 不同。我想实现分隔符或 EndSeparator 为 ';' 的拆分功能 将一堆数字分开并将拆分后的数字与数组 A 元素进行比较,以检查数组 A 中是否也存在 12345。

我使用 LOWER_BOUND 和 UPPER_BOUND 来限制数组,因为数组 A 的范围是未定义的。

我该怎么做?任何指针将不胜感激。:)

参考:

#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_)
4

1 回答 1

1

您可以编写自己的 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', ';');
于 2019-01-27T06:38:19.357 回答