Сравнение 2 массивов символов и поиск соответствия на S7 1500 (PLC)
В настоящее время я работаю над небольшим упражнением по кодированию на S7 1500 с использованием ST(SCL), где 2 массива, A (самый большой по длине) и B сравниваются друг с другом и проверяются на соответствие элементов.
Однако массив B состоит из буквенно-цифровых символов и специальных символов (точка с запятой), например: "12345;12346B;12347A" и т. Д., В отличие от массива A, в котором нет точки с запятой. Я хочу реализовать функцию Split, где Delimiter или EndSeparator равен ';' для разделения набора чисел и сравнения разделенных чисел с элементами массива А, чтобы проверить, присутствует ли 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_)
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', ';');