Форум

Форум (http://robotforum.ru/forum/index.php)
-   Роботы ABB (http://robotforum.ru/forum/forumdisplay.php?f=61)
-   -   создание списка сигналов (http://robotforum.ru/forum/showthread.php?t=5154)

Андрей Косцов 23.06.2021 12:49

создание списка сигналов
 
Добрый день!

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

По моей задумке в качестве аргументов в программу отправляются:
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."

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

Андрей Косцов 25.06.2021 14:48

Удалось решить этот вопрос. Теперь вместо списка сигналов я отправляю список строк состоящий из имён сигналов, после чего с помощью AliasIO привожу их к нужному виду. Выглядит это следующим образом:
PROC WaitSignalDI(string signal_array{*},dionum value_array{*},num alarmcode_array{*})
__Recheck:
__timeout:=FALSE;
__FOR i FROM 1 TO DIM(signal_array,1) DO
____AliasIO signal_array{i},actual_wait_signal;
____WaitDI actual_wait_signal,value_array{i}\MaxTime:=max_wai t_time\TimeFlag:=timeout;
____IF timeout THEN
______ALARM(alarmcode_array{i});
______GOTO Recheck;
____ENDIF
__ENDFOR
ENDPROC

Вызов программы выглядит следующим образом:
WaitSignalDI ["DI_signal_1","DI_signal_2"],[0,1],[101,102];

Надеюсь кому-нибудь это будет полезно ;D

Орлов Макс 25.06.2021 21:30

Цитата:

Сообщение от Андрей Косцов (Сообщение 14104)
Удалось решить этот вопрос. Теперь вместо списка сигналов я отправляю список строк состоящий из имён сигналов, после чего с помощью AliasIO привожу их к нужному виду. Выглядит это следующим образом:
PROC WaitSignalDI(string signal_array{*},dionum value_array{*},num alarmcode_array{*})
__Recheck:
__timeout:=FALSE;
__FOR i FROM 1 TO DIM(signal_array,1) DO
____AliasIO signal_array{i},actual_wait_signal;
____WaitDI actual_wait_signal,value_array{i}MaxTime:=max_wait _timeTimeFlag:=timeout;
____IF timeout THEN
______ALARM(alarmcode_array{i});
______GOTO Recheck;
____ENDIF
__ENDFOR
ENDPROC

Вызов программы выглядит следующим образом:
WaitSignalDI ["DI_signal_1","DI_signal_2"],[0,1],[101,102];

Надеюсь кому-нибудь это будет полезно ;D

божественно!


Часовой пояс GMT +2, время: 02:49.

vBulletin v3.6.2, Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co