PDA

Просмотр полной версии : Восстанавливаются старые значения



MichailG
19.06.2024, 12:15
Здравствуйте. Такая проблема. Загружаю проект в ПЛК-160 М2 в Codesys 2.3. ПЛК участвует в сети Modbus RTU, ПЛК - Slave, СПК - master. Обмен данными работает, все норм. Потом в какой-то момент на ПЛК остались старые значения (в ветках float), делаю сброс, стартую - значения 0, как надо. Перезагружаю ПЛК - возвращаются старые значения. А последний float экспериментальный вообще запомнил когда-то онлайн-измененное значение или с СПК передалось, не помню уже. Пробовал снимать питание с СПК, отключать провода с RS-485, удалять переменные, участвующие в обмене по сети. Заводской сброс ПЛК делал, загружал в ПЗУ новый проект (Создание загрузочного проекта), перезагружал ПК, даже удалил остальные файлы проекта и заново загружал проект с заводским сбросом, пробовал закрыть Codesys Gateway Server и другую службу Codesys, не помогает ничего. Что интересно, когда удаляю один float, все ОК, добавляю по новой, восстанавливаются старые значения, хотя переменные уже все удалены с проекта, retain не использую. Выкладываю исходный проект.

1exan
19.06.2024, 12:29
Здравствуйте. Такая проблема. Загружаю проект в ПЛК-160 М2 в Codesys 2.3. ПЛК участвует в сети Modbus RTU, ПЛК - Slave, СПК - master. Обмен данными работает, все норм. Потом в какой-то момент на ПЛК остались старые значения (в ветках float), делаю сброс, стартую - значения 0, как надо. Перезагружаю ПЛК - возвращаются старые значения. А последний float экспериментальный вообще запомнил когда-то онлайн-измененное значение или с СПК передалось, не помню уже. Пробовал снимать питание с СПК, отключать провода с RS-485, удалять переменные, участвующие в обмене по сети. Заводской сброс ПЛК делал, загружал в ПЗУ новый проект (Создание загрузочного проекта), перезагружал ПК, даже удалил остальные файлы проекта и заново загружал проект с заводским сбросом, пробовал закрыть Codesys Gateway Server и другую службу Codesys, не помогает ничего. Что интересно, когда удаляю один float, все ОК, добавляю по новой, восстанавливаются старые значения, хотя переменные уже все удалены с проекта, retain не использую. Выкладываю исходный проект.

Все переменные, объявленные внутри слейва - энергонезависимые (Retain) по умолчанию

MichailG
19.06.2024, 13:02
А как мне сбросить тогда эти переменные, я думал заводской сброс поможет? Причем, удаляю один float, переменные (точнее просто значения во float, переменные уже удалены на этот момент) обнуляются, добавляю float в свой slave, значения восстанавливаются...

MichailG
19.06.2024, 13:09
Никаких устройств не подключено в сети, другое ПО нет, которое могло бы участвовать в modbus.

1exan
19.06.2024, 14:00
А как мне сбросить тогда эти переменные, я думал заводской сброс поможет? Причем, удаляю один float, переменные (точнее просто значения во float, переменные уже удалены на этот момент) обнуляются, добавляю float в свой slave, значения восстанавливаются...

Расскажите про назначение этих сетевых переменных и зачем их нужно сбрасывать

MichailG
19.06.2024, 15:56
СПК опрашивает ПЛК циклически и выводит в таблицу на экране сигналы с датчиков и промежуточные переменные программы, а также настройки регулятора. При изменении настроек происходит запись по переднему фронту. Пока просто переменная записывается, но в дальнейшем хочу сделать так, что какой параметр изменен - тот и записывается в регистр, не все сразу, хотя это не критично. Не хотелось бы, чтобы значения постоянно писались в энергонезависимую память, ресурс тратить, да и вообще с retain переменными не хочется иметь дело. Аккумулятор как-то сдох помню, и переменные не восстановились - нули были. Я пользуюсь первоначальными значениями в объявлении переменных. Если питание с ПЛК было снято, я отслежу это (пропала связь, "флаг инициализации ПЛК" или сброса ПЛК). Сброс я отслеживаю программно. Тогда СПК запишет новые настройки. И наоборот, если настройки в режиме онлайн были изменены, СПК прочитает новые значения. Не понимаю, зачем slave по умолчанию Retain. Лучше бы это программно реализовать. Изменились настройки - записал... А с какой периодичностью записываются slave переменные? Если по отключении питания - то фиг они восстановтся при дохлом АКБ. Как-то так. Буду признателен, если посоветуете другой способ обмена данными!

MichailG
19.06.2024, 16:05
Расскажите про назначение этих сетевых переменных и зачем их нужно сбрасывать

Меня смущают старые значения, ПЛК перезагрузил - вроде бы "с нуля" должен стартануть, а там мусор этот. Хотя я могу ошибаться, не привычно просто.

1exan
19.06.2024, 17:12
СПК опрашивает ПЛК циклически и выводит в таблицу на экране сигналы с датчиков и промежуточные переменные программы, а также настройки регулятора. При изменении настроек происходит запись по переднему фронту. Пока просто переменная записывается, но в дальнейшем хочу сделать так, что какой параметр изменен - тот и записывается в регистр, не все сразу, хотя это не критично. Не хотелось бы, чтобы значения постоянно писались в энергонезависимую память, ресурс тратить, да и вообще с retain переменными не хочется иметь дело. Аккумулятор как-то сдох помню, и переменные не восстановились - нули были. Я пользуюсь первоначальными значениями в объявлении переменных. Если питание с ПЛК было снято, я отслежу это (пропала связь, "флаг инициализации ПЛК" или сброса ПЛК). Сброс я отслеживаю программно. Тогда СПК запишет новые настройки. И наоборот, если настройки в режиме онлайн были изменены, СПК прочитает новые значения. Не понимаю, зачем slave по умолчанию Retain. Лучше бы это программно реализовать. Изменились настройки - записал... А с какой периодичностью записываются slave переменные? Если по отключении питания - то фиг они восстановтся при дохлом АКБ. Как-то так. Буду признателен, если посоветуете другой способ обмена данными!

Насчёт ресурса можно не беспокоиться - перезапись памяти ведётся при отключении питания - и да, для этого используется батарейка. Но состояние батарейки можно увидеть на светодиодах ПЛК и (вроде) контролировать по значению в блоке статистики в конфигурации.
Для тех переменных, что программа ПЛК постоянно переписывает - энергонезависимость не важна, а в чём проблема, что уставки сохраняют предыдущее значение в ПЛК я не понял; СПК в любом случае может читать значения уставок постоянно, а записывать по изменению


Меня смущают старые значения, ПЛК перезагрузил - вроде бы "с нуля" должен стартануть, а там мусор этот. Хотя я могу ошибаться, не привычно просто.
Согласен, дело привычки.
И всё же там не мусор, а просто предыдущие значения

MichailG
19.06.2024, 19:09
В заключение добавлю, действительно, можно контролировать состояние батареи (возможно и в сеть передавать инфу). Даже если АКБ вышло из строя, можно отследить сброшенные переменные и присвоить безопасные значения. Благодарю за ответы.