PDA

Просмотр полной версии : Задание уставок с панели СП300



Junoka
20.08.2020, 10:01
Доброго времени суток!

Имеется контроллер ПЛК110 (slave) и панель оператора СП310 (master). Связь по ModBus RTU.

В программе контроллера есть локальные переменные с уставками для разных процессов. Эти уставки необходимо изменять с панели. Для изменения уставок применил элмент цифровой ввод данных, в котором отдельно задается значение в один сетевой регистр и отдельно считывается значение уставки через другой сетевой регистр.

Использовать RETAIN память контроллера не получилось, так как задание идет от панели оператора к ПЛК. То бишь при включении устройств на ПЛК появляются нулевые значения уставок. Появилась идея использовать PFW регистры панели оператора.

Возник вопрос, можно ли использовать PFW регистры для однократного задания значений по умолчанию для уставок при загрузке панели оператора (с использованием функциональной кнопки).

Я вижу это так:
1) загружается ПЛК
2) загружается панель оператора
3) после загрузки панели из PFW регистров однократно с использованием функциональной области записываются данные в сетевые регистры задания уставок
4) На экране уставок отображаются значения считанные из ПЛК и дальнейшее изменение уставок идет с панели вручную

Если есть какие то еще идеи работы с заданием уставок с панели оператора, буду очень признателен, если поделитесь. На форуме информация по данному вопросу есть, но все поверхностно.

В идеале конечно хотелось бы, чтобы при загрузке устройств значения уставок сначала загрузились из ПЛК в панель оператора.

Sulfur
20.08.2020, 11:33
Я делал пару проектов в подобной связке. Никаких дополнительных телодвижений не совершал. Просто в конфиге ПЛК прописывал необходимые переменные в регистры, в проекте обращался непосредственно к ним. В панели просто в в нужных окнах ввода\отображения прописывал номера регистров соответствующих переменных. И все. Все переменные сохранялись по включению. Область регистров Модбас-слейв ПЛК является ретайн по дефолту. данный способ хорош, если не требуется организовывать рецепты.

Junoka
20.08.2020, 13:54
Я делал пару проектов в подобной связке. Никаких дополнительных телодвижений не совершал. Просто в конфиге ПЛК прописывал необходимые переменные в регистры, в проекте обращался непосредственно к ним. В панели просто в в нужных окнах ввода\отображения прописывал номера регистров соответствующих переменных. И все. Все переменные сохранялись по включению. Область регистров Модбас-слейв ПЛК является ретайн по дефолту. данный способ хорош, если не требуется организовывать рецепты.

То есть достаточно прописать переменные для панели оператора в ПЛК и без локальных переменных (как на моей картинке Tust, Ohl_T_ust1, Ohl_T_ust2 и так далее) и в программе оперировать только с ними. А нужно ли куда-нибудь прописывать значения по умолчанию? Или получается так, что при первом пуске все значения уставок будут "0", далее я устанавливаю какие-либо значения всем уставкам через панель и потом они сохраняются даже после сброса питания?

Sulfur
20.08.2020, 14:36
То есть достаточно прописать переменные для панели оператора в ПЛК и без локальных переменных
Да. Переменные, объявленные в конфигурации, являются глобальными, и доступны из любого места.

А нужно ли куда-нибудь прописывать значения по умолчанию?
Если есть критические уставки, которые по определению не могут иметь нулевое значение, то я делал так:
1. Создавал POU (ST) например с именем FirstInit
2. В этой POU делал следующее:
IF Уставка_1=0 AND Уставка_2=0 ADN Уставка_3=0
THEN
Уставка_1:=Значение по умолчанию_1;
Уставка_2:=Значение по умолчанию_2;
Уставка_3:=Значение по умолчанию_3;
..
Уставка_N:=Значение по умолчанию_N;
END_IF;
---
3. В PLC_PRG в самом начале делал следующее
VAR init:bool;
END_VAR
----
IF NOT init THEN
FirstInit();
init:=TRUE;
END_IF;

------
Данный алгоритм работает так: при включении ПЛК локальная переменная init = FALSE, происходит вызов ПОУ FirstInit, где проверяется несколько ключевых переменных на нулевое состояние, и если это так, то всем требуемым переменным присваиваются значения по умолчанию. Нюанс - можно проверять несколько, а присваивать всем. Далее init переводится в TRUE, что "отключает" вызов FirstInit. Т. е. делает проверку только один раз после включения ПЛК, дабы не производить лишней и уже бесполезной работы.
Данные в регистрах Модбас-слейв сбрасываются при перепрошивке ПЛК, обновлении проекта и использования рубильника на ПЛК Работа-Стоп-Сброс (который я обычно отламываю сразу, что бы ни у кого не было соблазна поиграть с ним).

Junoka
24.08.2020, 15:02
Спасибо, что заморачиваетесь писать такой развернутый ответ! Он был очень полезен.