А кокой вообще смысл ретайна для области слейва ?
Если там текущая инфа с этого же плк - она им успешно и запишется
Если туда сливает инфу внешний мастер, то при включении связи еще и нету - зачем юзать тени прошлых сеансов ?
Вид для печати
А кокой вообще смысл ретайна для области слейва ?
Если там текущая инфа с этого же плк - она им успешно и запишется
Если туда сливает инфу внешний мастер, то при включении связи еще и нету - зачем юзать тени прошлых сеансов ?
Я в этой области храню настройки, которые пользователь может ввести с АРМа оператора. Например, верхние и нижние границы аналогового датчика. Их устанавливают с АРМа оператора, но при этом они должны сохраниться при отключении питания с контроллера.
Ну и берите их со слейва и переносите в ретайн. 2-3 строчки
Меня в целом устраивает стандартный механизм, только не пойму почему не работает вышеизложенное?
вышеизложенное ни где не применяется, если Вы хотите воспроизвести ситуацию с незапланированной перегрузкой плк, то делайте её с помощью бесконечного цикла. Сброс из КДС это только сброс, сделать его могут только намеренно и даже если Вы что то придумаете от этого, злоумышленник найдет другой способ уничтожить данные, в конце концов есть кувалда
Нет. Меня интересует процесс инициализации. Почему он не работает?
а где Вы задаете инициализацию в слейве? Инициализация конфиг обнуляет, ни какого отношения к сохранению последних значений она(инициализация) не имеет. Вас тогда должно удивлять, что ФБ не сохраняют, свои внутренние сохраненные значения, после сброса
Описанные "странности" никакого отошения к штатной работе не имеют. Это процесс отладки.
Для сохранения данных в момент отладки Вам необходимо реализовать механизм сериализации (например считывание массива ОЗУ Slave в файл перед отладкой и восстановление после).
Ничего тут сложного нет. Но стандартным такой механизм никогда не будет.
Тем более если вы меняете код программы - ПЛК обязан сбросить всё, т.к. у него нет никакой информации о том, что следует сохранять.
Владислав, попробую объяснить по-другому, что мне не нравиться. И если Вы подскажете, что можно сделать, то я буду благодарен.
Как я уже писал, если я вношу изменения в проект, которые не поддерживают горячее обновление кода, то после загрузки нового проекта, все переменные из области Modbus Slave становятся равны нулю, даже если им заданы начальные значения, как это сделано в проекте из поста №1.
Чтобы проинициализировать их мне нужно сделать следующее:
1. Сброс (заводской);
2. Сброс по переключателю на ПЛК110 М02;
3. Изменение конфигурации контроллера (например, добавление переменной в область Modbus Slave);
4. Загрузка проекта.
5. Переменные из области Modbus slave принимают начальные значения.
Ввиду того, что контроллер от инженерной станции находится на значительном расстоянии (5 км), то пункт 2 представляет наибольшее неудобство. Дополнительно отмечу, что те же действия без пункта 2 или без пункта 3 не приводят к желаемому результату, т.е. сброс по переключателю и изменение конфигурации обязательны.
Отсюда мои вопросы.
Вопрос 1.
Команда CoDeSys "Сброс (заводской)" и сброс по переключателю на ПЛК110, как видно, не одно и то же. В чем разница? Что сбрасывает одна и что вторая?
Вопрос 2.
Почему переменные из области Modbus slave при первоначальной загрузке принимают начальные значения, заданные в программе, а при заводском сбросе их не инициализируют этими значениями? Это невозможно реализовать? Или это ошибка?