Показать сообщение отдельно
Старый 23.06.2021, 12:49   #1
Андрей Косцов
Гуру
 
Регистрация: 24.06.2015
Сообщения: 76
Сказал Спасибо: 11
Сказали Спасибо 11 раз(а) в 10 сообщении
По умолчанию создание списка сигналов

Добрый день!

Мне необходимо в большом количестве программ часто проверять различные сигналы и чтобы не переписывать одинаковые строки из программы в программу я пытаюсь написать специальную процедуру которая будет этим заниматься, а от меня потребуется только вызвать её введя соответствующие аргументы.

По моей задумке в качестве аргументов в программу отправляются:
1. Список сигналов который должен быть проверен
2. Список значений (1 или 0) который я от них ожидаю
3. Список номеров ошибок которые нужно активировать если состояние сигнала не соответствует ожидаемому
Программа поочерёдно сверяет значения и вызывает ошибку если необходимо.

На данный момент это выглядит следующим образом:
PROC WaitModule(VAR signaldi signal_array{*},dionum value_array{*},num alarmcode_array{*})
_Recheck:
_timeout:=FALSE;
_FOR i FROM 1 TO DIM(signal_array,1) DO
__WaitDi signal_array{i},value_array{i}\MaxTime:=max_wait_t ime\TimeFlag:=timeout;
__IF timeout THEN
___ALARM(alarmcode_array{i});
___GOTO Recheck;
__ENDIF
_ENDFOR
ENDPROC

Вызов выглядит так:
PROC test_3()
_WaitModule [DI_signal_1,DI_signal_2],[0,0],[1,1];
ENDPROC

Проблема заключается в том, что на строке вызова программы у меня висит ошибка "Argument error(124): Argument for 'VAR' parameter signal_array is not variable reference or is read only."

Вопрос заключается в том как заставить эту штуку работать? В качестве теста я менял список сигналов на один сигнал и он правильно проверял его нужное количество раз, из чего получается что остальная конструкция работает нормально.
Андрей Косцов вне форума   Ответить с цитированием