Показать сообщение отдельно
Старый 01.11.2022, 19:56   #18
младшой
Senior Member
 
Регистрация: May 2010
Адрес: Москва
Сообщения: 863
Благодарил(а): 4 раз(а)
Поблагодарили: 86 раз(а) в 67 сообщениях
По умолчанию Ответ: Как сделать так, чтобы сохранялись уставки после перезагрузки контроллера

Цитата:
Сообщение от Shurion Посмотреть сообщение
А зачем его делать если например уставки планируется менять только с weintek? зачем себе гемор придумывать или есть какие то плюсы?
Если проектом предусмотрено наличие ПЛК и панели, то лучше всего, когда ПЛК крутит управляющий алгоритм и хранит уставки внутри своей энергонезависимой памяти. Панель же только читает текущие параметры и отображает их на своих экранах, мнемосхемах и т.п. Уставки же также должны считываться панелью и записываться в ПЛК при их изменении.

Панель типа вайнтека является средством человеко-машинного интерфейса. Помимо такого несомненного плюса, как большой экран, у панели есть несомненный минус - она подвержена воздействию куда больших и серьезных внешних факторов: неаккуратные действия операторов, залитие водой, гликолем и прочим.
Повреждение панели или полный её выход из строя не должны фатально отразиться на способности системы автоматики в своем автоматическом режиме продолжать управлять технологическим процессом.

При этом, необязательно делать на ПЛК какой-то супер интерфейс с мнемосхемами и прочим. Вполне может быть достаточно системы меню для хранения этих самых уставок и вывода основных параметров работы СА.

Про хранение уставок на ПЛК Сегнетикс для работы с ними через Модбас.
Пожалуй, выложу, как я это делаю. Метод работает только с ПЛК SMH4, Trim5, Matrix.

Со стороны ПЛК идея сама по себе не нова и несколько раз уже была представлена на этом форуме:
- для внешнего устройства (панель, скада) уставки представлены через Holding Registers;
- чтобы записывать в Holding Register текущее значение уставки, взятое из памяти ПЛК, в Ethernet интерфейсе контроллера создается слейв с адресом 127.0.0.1 (я обычно называю его "S E L F");
- в слейв заносятся все необходимые Holding Registers контроллера, и они выносятся на поляну; стоит обратить внимание, что время опроса ставится = 0, чтобы запись нового значения происходила по необходимости;
- через специальный макрос каждая уставка соединена со своим Holding Register и выходом на запись нового значения в свой же Holding Register, в макрос приходит значение уставки из памяти ПЛК, а от макроса уходит значение для записи в память.

Хранение уставок здесь организовано на базе меню уставок, сделанного через SMArt.

Со стороны панели (или скады) достаточно только привязать объект (поле ввода, переключатель или что-то там еще) к Holding Register ПЛК.
Панель сама считает значение из ПЛК, отобразит его на своем экране. При изменении со стороны ПЛК, считает заново и обновит. А при изменении со стороны панели - запишет новое значение в ПЛК. И всё это - через Holding Register (по одному на уставку).

Опять же, при перезагрузке панели, уставки в ПЛК не сбрасываются в 0.

Для сравнения, при "традиционном" способе общения панели с ПЛК, когда панель читает уставку из Input Register ПЛК, а пишет в Holding Register, имеются ряд недостатков:
- необходимо при создании проекта панели привязывать каждую уставку как Input, так и Holding Register, что несколько усложняет процесс;
- приходится в панели организовывать обмен так, чтобы при запуске она сначала читала текущее значение уставки из Input и не смела записывать нули в Holding Register, что также усложняет процесс (а без танцев с бубном панель по-умолчанию будет писать 0 после старта).

Стоит обратить внимание, что в примере уставка типа Real, а Holding Register используется типа Integer (WORD, 16 bit). Преобразование типов производится с умножением и делением на коэффициент (вход "mult", в примере = 10). Таким образом, уставка со значением 21,5 будет в Holding Register со значением 215. Со стороны панели также необходимо настраивать масштабирование, чтобы она на экране отображалась 21,5. При этом, если на панели вводить новое значение 20,4 , то в ПЛК улетит оно как 204, там отмасштабируется опять и в память ПЛК запишется корректное 20,4.

В приницпе, можно сделать вариант, при котором Holding Register также типа Real, но лично мне для уставок всегда хватало точности Integer, отмасштабированного до нужного знака после запятой. При этом, Integer занимает в 2 раза меньше объема при обмене информации (Integer - 16 bit, Real - 32 bit).

Также я использую вариант для уставок типа Integer без преобразования и масштабирования, например: режимы работы, текущий сезон года, уставки временных задержек и какие-нибудь температурные уставки, которым не нужна точность даже одного знака после запятой.


Вы можете сказать: "Но ведь это усложняет программу для ПЛК".
Да, однако, тут уже решать программисту, где ему выгоднее заморочиться.
Также, данный метод работает и с OPC серверами, Скадами. Не во всех их можно легко и удобно организовать связь между Input и Holding Register уставок, да так, чтобы при перезапуске скады опять же в ПЛК не полетели нули.
А, ну еще это экономит тэги ОРС сервера/скады.

Остается вопрос: "Отчего же в ПЛК Сегнетикс приходится изворачиваться с записью в свои же Holding Registers?"
Лично я задаюсь этим вопросом уже годы. Даже задавал его Илье и Руслану на одной из выставок в Москве. Движений по разрешению его не видно, к сожалению.

ну, надеюсь, этот эпос никто не уничтожит в скором времени
Вложения
Тип файла: psl HRS.psl (196.1 Кбайт, 99 просмотров)

Последний раз редактировалось младшой, 01.11.2022 в 20:19
младшой сейчас на форуме   Ответить с цитированием
12 благодарности(ей) от: