Вход

Просмотр полной версии : СПК210. Проблема с RETAIN и её решение



Евгений Кислов
17.02.2025, 13:28
Добрый день, коллеги.

В последнее время мы столкнулись с рядом сообщений от клиентов, у которых в СПК210 наблюдаются проблемы с энергонезависимыми (RETAIN и PERSISTENT) переменными.

Проявление проблемы: после перезагрузки СПК210 энергонезависимые переменные не восстанавливают свои значения, а инициализируются начальными.
Причем при повторной перезагрузке сохраненные до первой перезагрузки значения корректно восстанавливаются.

Частота проявления проблемы: может быть разной. От одного раза на десятки-сотни перезагрузок до условно-стабильного воспроизведения (один раз из 5...10 перезагрузок).

Сопутствующие эффекты при проявлении проблемы:

не работает интерфейс RS-485-3 (не удается открыть COM-порт);
загрузка контроллера занимает примерно на 20 секунд дольше, чем обычно.


Причина проблемы: в процессе загрузки контроллера не определяется плата расширения, через которую подключены микросхема MRAM и интерфейс RS-485-3.
Этим объясняется задержка на этапе загрузки (происходит несколько попыток определения платы расширения с таймаутами).

Гарантированное детектирование проблемы:

если в терминале Linux ввести команду lsusb - то в выводе будет 3 устройства (при определении платы расширения - их будет 4):

82001

в логе загрузки контроллера (можно посмотреть его командой dmesg или в web-конфигураторе: Cостояние - Журналы - Журнал ядра) будут сообщения следующего характера:

82002



В данный момент наши разработчики занимаются исследованием проблемы для ее последующего устранения.
Наиболее вероятный сценарий - релиз новой прошивки, в которой проблема будет устранена.
При появлении новой информации - тема будет обновлена.

Прямо сейчас есть обходное решение для смягчения последствий проблемы:



1. Установить в CODESYS пакет компонентов OwenAppTools_v3.5.17.3.package (https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/01_Components/OwenAppTools_v3.5.17.3.package) (через CODESYS Installer).

2. Добавить в проект компонент OwenSpk210RetainBoard: ПКМ на узел Device - Добавить устройство - Разн. - OwenAppTools - OwenSpk210RetainBoard и нажать внизу кнопку Добавить устройство.

82004

3. Объявить в программе две переменные типа BOOL - одна из них будет соответствовать ошибке определения платы расширения, вторая - команде перезагрузки СПК.
Написать следующий код:



VAR
xIsRetainBoardNotFound: BOOL;
xReboot: BOOL;
END_VAR

// Область кода
IF xIsRetainBoardNotFound THEN

xReboot := TRUE;

END_IF


Желательно разместить этот код в первой из вызываемых программ проекта.

Пример для языка CFC:

82003

4. Привязать переменную xIsRetainBoardNotFound к каналу Плата RETAIN не обнаружена компонента OwenSpk210RetainBoard.
Привязать переменную xReboot к каналу Reboot компонента Watchdog.

82005

5. Результат: если при загрузке контроллера плата расширения не будет обнаружена, то произойдет перезагрузка контроллера.
С подавляющей вероятностью после нее плата расширения будет обнаружена.




Upd. - проблема устранена в прошивке 3.7.0228.1046 (https://owen.ru/forum/showthread.php?t=33954&p=459353&viewfull=1#post459353).

Евгений Кислов
14.03.2025, 09:15
Проблема устранена в прошивке 3.7.0228.1046 (https://owen.ru/forum/showthread.php?t=33954&p=459353&viewfull=1#post459353).