PDA

Просмотр полной версии : Библиотека RetainControlLib



Toshix
23.08.2021, 15:25
Всем добрый день!

Подскажите пожалуйста, кто сталкивался с проблемой: при использовании библиотеки RetainControlLib, после выполнении функции записи переменных в Retain перестают работать дискретные выхода ПЛК110-30[М02]. При этом в CodeSys, биты управления дискретными выходами (у1 и у2 в примере ниже) продолжают изменяться согласно программе.

Пример программы на которой тестировал запись в Retain:

tr1(CLK:=X1); (*детектор переднего фронта*)
IF tr1.Q THEN
IF NOT arr1[0] THEN
arr1[0]:=TRUE; (*Retain переменная*)
ELSE
arr1[0]:=FALSE;
END_IF
END_IF

y1:=arr1[0]; (*Включение реле 1*)
y2:=arr1[0]; (*Включение реле 2*)

IF temp <> arr1[0] THEN
xDone := SaveNow();
IF xDone = TRUE THEN
temp:=arr1[0];
END_IF
ELSE
xDone := FALSE;
END_IF

Cs-Cs
23.08.2021, 18:14
Вроде как в инструкции на библиотеку было написано что-то о том, что надо быть внимательным, так как при SaveNow() останавливается обработка IO в ПЛК на то время, пока все переменные не запишутся. И что это может занимать аж несколько секунд (что ли).
Я дословно не помню, но принцип там был в том, что SaveNow ставил ПЛК колом на время записи Retain.

Вот, нашёл из документации на библиотеку:
ВНИМАНИЕ! Использование функции приостанавливает выполнение программы ПЛК до заверше-ния полной записи RETAIN переменных. Запись длится около 30 мс., поэтому рекомендуется вызы-вать функцию SaveNow только когда значения RETAIN переменных были изменены.

Toshix
23.08.2021, 23:21
Согласен! Но после записи реле должны оживать, а они увы обратно не включаются, и последующие попытки их включить успехом не увенчаются. Помогает только перезапуск ПЛК

Toshix
23.08.2021, 23:24
И опять же, запись RETAIN должно остановить выполнение программы, а насколько я понимаю установка состояний выходов происходит после выполнения цикла ПЛК (выполнение программы+запись RETAIN)