PDA

Просмотр полной версии : В ПК210 не пойму почему не сохраняются значения переменных описанных VAR_GLOBAL RETAI



Luer
02.02.2022, 12:09
Может кто подскажет, почему после выключения эл. питания ПЛК ПК210 не сохраняются значения переменных описанных в VAR_GLOBAL RETAIN ?

VAR_GLOBAL CONSTANT
MAX_DINT : DINT := 2147483647;
END_VAR;
//================================== Описание Глобальных СОХРАНЯЕМЫХ ПЕРЕМЕННЫХ ================================================
VAR_GLOBAL RETAIN

K1_moto_H : UINT; // моточасы K1
K2_moto_H : UINT; // моточасы K2
K2_1_moto_H : UINT; //546 // моточасы K2.1
K2_2_moto_H : UINT; //547 // моточасы K2.2
K3_1_moto_H : UINT; //548 // моточасы K3.1
K3_2_moto_H : UINT; //549 // моточасы K3.2
K6_1_moto_H : UINT; //550 // моточасы K6.1
K6_2_moto_H : UINT; //551 // моточасы K6.2

K1_Cnt : UINT; // Кол-во включений K1
K2_Cnt : UINT; // Кол-во включений K2

END_VAR;

//=================================== Описание Глобальных ПЕРЕМЕННЫХ ================================================== =======
VAR_GLOBAL
/

PRU200_wDI :WORD; //Регистр DI - читаемый из ПРУ200
PRU200_wDO :WORD; //Регистр DO - отсылаемый в ПРУ200

// Описание глобальных Пользовательских переменных
FirstScan : BOOL := TRUE; // флаг старта программы и записи первоначальных уставок

P : UINT; // Счетчик повторных включений

//-------------сервисные переменные
CODESYS_DU : BOOL := FALSE;// =1 - Управление из мнемосхемы CODESYS !!! = 0 - управление из HMI Modbus RTU Master
ON_Btn : BOOL;// нажата кнопка HMI
//-------для работы с Датой и временем ПЛК ----------------------------------
PLC_Year : UINT; // Год
PLC_Month : UINT; // Месяц (1,..,12)
PLC_Day : UINT; // День месяца(1...31)
PLC_Hour : UINT;// Часы (0...23)
PLC_Minute : UINT;// Минуты (0...59)
PLC_Second : UINT;// Секунды (0...59)
PLC_Ms : UINT;// Не поддерживается
PLC_DayOfWeek : UINT; // День недели (1=Воскрес, ...7=Суббота)
PLC_Yday : UINT;// День года (1...365) 1= 1Января, ...364/365 = 31 Декабря)

//DayOfWeek : ARRAY[0..6] OF STRING := ['S','M',''D','t','tr', 'f','Su'];

stRtc: TRG_RTC; // Время в ОВЕН ПЛК210
//------------------------------------------------------------------------------
HH : UINT; // ЧЧ в ПЛК
MM : UINT; // минуты в ПЛК

//------------------------------------------------------------------------------
//Диагностика ПЛК
PLC210_xPowerInput1 : BOOL; //ПЛК: Наличие питания по входу 1
PLC210_xPowerInput2 : BOOL; //ПЛК: Наличие питания по входу 2
PLC210_xServiceButton : BOOL; //ПЛК: TRUE - кнопка нажата, FALSE - кнопка отжата
PLC210_rCpuTemp : REAL; //ПЛК: Температура CPU

MV210_101_Err : BOOL; //Признак ошибки опроса модуля MD210-101 (8AI)

//-----------------------------------------------
MB_Server : OCL.MB_TcpSlave; // ФБ для реализиации Modbus Slave
MB_Data :udtHMI_a; // MB - буфер данных Modbus Slave

UST_Grafik_T :ARRAY[0..12] OF REAL := [-40.0,-37.0,-35.0,-30.0,-25.0,-20.0,-15.0,-10.0, -5.0,0.0, 5.0, 8.0, 10.0]; // исп-ся для определения ЗДН по уличной Т

END_VAR;

Евгений Кислов
02.02.2022, 12:14
Добрый день.
Выложите ваш проект (в CODESYS: Файл - Архив проекта - Сохранить/отправить архив, выложить на файлообменник и прикрепить сюда ссылку) и подробно опишите, как воспроизвести проблему.

Luer
02.02.2022, 13:02
Входе экспериментов в эмуляторе с холодным сбросом выяснилось, что переменные(в моем случае это AnPar) пользовательского типа не сохраняют свои значения.
VAR_GLOBAL RETAIN
holdingRegisters : ARRAY[0..Global.numHoldingRegisters-1] OF CmpModbusKAPP82.ModbusHoldingRegister;
AnPar : TAnPar; //Символьная структура аналоговых параметров
AAAAAA : UINT;

Если же переменнаяAAAAAA ) объявлена стандартного типа, то она сохраняет свое значение.

Luer
02.02.2022, 13:05
TYPE TAnPar :
STRUCT
// ----ИК
L : REAL; //Уровень в колодце, м
AI_2 : REAL; //Т в павильоне, С, -50...+50
AI_3 : REAL; //Резерв
AI_4 : REAL; //Резерв
AI_5 : REAL; //Резерв
AI_6 : REAL; //Резерв
AI_7 : REAL; //Резерв
AI_8 : REAL; //Резерв
// ----AO параметры
AO1 : REAL; //Уровень в колодце, м
AO2 : REAL; //Уровень в колодце, м

Luer
02.02.2022, 13:06
Это особенность Codesys ? Подскажите ?

Евгений Кислов
02.02.2022, 13:09
Это особенность Codesys ? Подскажите ?

https://owen.ru/forum/showthread.php?t=35866&p=374175&viewfull=1#post374175

Luer
02.02.2022, 13:47
Вопрос такой : Почему в эмуляторе в онлайн введя значение в переменную ААААА и сделав Сброс холодный, значение переменной становится = 0 ?

Евгений Кислов
02.02.2022, 13:53
Вопрос такой : Почему в эмуляторе в онлайн введя значение в переменную ААААА и сделав Сброс холодный, значение переменной становится = 0 ?

Потому что так работает команда Сброс холодный:
https://help.codesys.com/webapp/_cds_cmd_reset_cold;product=codesys;version=3.5.17 .0

Retain variables are initialized, and the previous values are lost.

У меня с вашим проектом при выполнении команды Сброс холодный и переменная AnPar, и переменная AAAAAA инициализируются нулями - так что я никаких проблем не вижу.

Luer
02.02.2022, 13:55
При сбросе эл.питания ПК210 , выполняется тоже холодный рестарт ?

Если так, то как сохранять значения переменных, после сброса эл. питания ?

Евгений Кислов
02.02.2022, 13:59
При сбросе эл.питания ПК210 , выполняется тоже холодный рестарт ?

Если так, то как сохранять значения переменных, после сброса эл. питания ?

Нет, при сбросе питания холодный рестарт не выполняется.
RETAIN-переменные ПЛК210 в этом случае получат свои последние сохраненные значения.

Luer
02.02.2022, 14:23
ок. Спасибо

Luer
02.02.2022, 15:14
В нашем ПЛ210 переменные RETAIN почему то не сохраняются.
Подскажите без ПЛК в эмуляторе я могу проверить как будет работать моя программа после включения ПЛК ?
Какая физически память(MRAM) в ПЛК используется для RETAIN переменных ? (с питанием от батарейки ?)

petera
02.02.2022, 15:29
В нашем ПЛ210 переменные RETAIN почему то не сохраняются.
Подскажите без ПЛК в эмуляторе я могу проверить как будет работать моя программа после включения ПЛК ?
Какая физически память(MRAM) в ПЛК используется для RETAIN переменных ? (с питанием от батарейки ?)


https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D 0%B5%D0%B7%D0%B8%D1%81%D1%82%D0%B8%D0%B2%D0%BD%D0% B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%B 8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F %D1%82%D1%8C

Магниторезистивная оперативная память (MRAM — англ. magnetoresistive random-access memory) — запоминающее устройство с произвольным доступом на основе спиновых вентилей. Хранит информацию при помощи магнитных моментов, а не электрических зарядов.

Преимущество этого типа памяти — энергонезависимость, то есть способность сохранять записанную информацию (например, программные контексты задач в системе и состояние всей системы) при отсутствии внешнего питания.

Евгений Кислов
02.02.2022, 15:55
Подскажите без ПЛК в эмуляторе я могу проверить как будет работать моя программа после включения ПЛК ?

Нет, в эмуляторе это проверить не получится.



В нашем ПЛ210 переменные RETAIN почему то не сохраняются.

Обеспечьте завтра удаленный доступ по TeamViewer или AnyDesk - посмотрим, что у вас происходит.

Luer
02.02.2022, 17:08
1) ПЛ210 на объекте стоит. Интернета отсутствует. Я удалённо правлю ППО и пересылаю наладчику. (проверить на эмуляторе как работает ППО при выключении питания ПЛК - получается нет возможности)
2) В области VAR_GLOBAL RETAIN объявил переменную "AAAA : UINT; " , которую нигде в ППО не использую.
Наладчик подключается Codesys - онлайн, записывает в неё значение, затем выключает эл.питание ПЛК, включает, и значение переменной = 0.
3) У меня осталось только одно предположение : версия прошивки в ПЛК = 1.1.1204.1025, а Версия пакета таргет-файлов в CodeSys установлен = 3.5.14.30-10.
Причём если в CodeSys ставлю Версия пакета таргет-файлов = 3.5.14.30-03 (чтоб было соответствие) , то в проекте не определяются ПЛК (и обновить устройство не получается).
Получается нужно обновить версию прошивки в ПЛК ?

Евгений Кислов
02.02.2022, 17:19
Получается нужно обновить версию прошивки в ПЛК ?

Да, попробуйте обновить прошивку со сбросом настроек.

vitalgolov
14.04.2022, 10:29
Столкнулся с такой же проблемой. В проекте куча настроек, которые должны храниться в энергонезависимой памяти, на Schneider Modicon M241 все работало отлично, то есть переменные были объявлены в GVL как RETAIN с адресами через команду AT для возможности их изменения с TCP Modbus Master, для этого требуются прямые адреса. В OWEN данная конструкция не работает, после пропадания питания все обнуляется. При объявлении в списке PERSISTENT компилятор ругается на прямые адреса.
Как то удалось решить данную проблему? Или нужно городить костыль, при запуске перекидывать все данные из PERSISTENT в обычную память, а в цикле программы периодически перекидывать все данные обратно в PERSISTENT ? Это же полный бред, должно же быть более оптимальное решение! Как Овен подразумевает хранение энергонезависимых настроек в таких случаях?

Евгений Кислов
14.04.2022, 10:37
! Как Овен подразумевает хранение энергонезависимых настроек в таких случаях?

Мы рекомендуем использовать библиотеку OwenCommunication для таких случаев.
В ней TCP Slave организуется с помощью функционального блока MB_TcpSlave, на вход которого передается указатель на буфер данных - можно передать указатель на массив или структуру, которые объявлены как RETAIN/PERSISTENT.

vitalgolov
14.04.2022, 10:44
Именно через нее и работаю, но проблема не в этом, обмен работает прекрасно. Проблема в том, что при объявлении в Global Variables List регистров как RETAIN они после отключения питания не сохраняются, а при объявлении в списке PERSISTENT невозможно указать адреса для Modbus TCP Master.

Евгений Кислов
14.04.2022, 11:09
Именно через нее и работаю, но проблема не в этом, обмен работает прекрасно. Проблема в том, что при объявлении в Global Variables List регистров как RETAIN они после отключения питания не сохраняются, а при объявлении в списке PERSISTENT невозможно указать адреса для Modbus TCP Master.

Предоставьте, пожалуйста, удаленный доступ (TeamViewer или AnyDesk) и пришлите ваш контактный телефон (или свяжитесь со мной через skype).
Желательно, в течение ближайших нескольких часов.
Обязательно оперативно во всём разберемся.

vitalgolov
14.04.2022, 12:23
Евгений, спасибо большое за помощь, так и думал что есть гораздо простое и правильное решение, чем городить костыли, все отлично работает через символьную конфигурацию и OPC UA

Евгений Кислов
14.04.2022, 12:26
Евгений, спасибо большое за помощь, так и думал что есть гораздо простое и правильное решение, чем городить костыли, все отлично работает через символьную конфигурацию и OPC UA

Рад, что всё получилось.
Уточню только, что мы настроили обмен не через OPC UA (он не поддерживается для iP серии), а через символьный протокол CODESYS.

AndreyN
25.05.2022, 09:43
Здравствуйте, можно поподробнее описать решение данной проблемы?

Евгений Кислов
25.05.2022, 10:02
Здравствуйте, можно поподробнее описать решение данной проблемы?

Добрый день.
В данном случае решением проблемы был отказ от Modbus TCP и переход на OPC UA.

AndreyN
25.05.2022, 10:20
У меня панель Kinco и ПЛК210. Kinco Modbus TCP Master. После отключения питания уставки (RETAIN) переданные с панели пропадают (Holding registers).
Как побороть эту проблему?

Евгений Кислов
25.05.2022, 12:15
У меня панель Kinco и ПЛК210. Kinco Modbus TCP Master. После отключения питания уставки (RETAIN) переданные с панели пропадают (Holding registers).
Как побороть эту проблему?

Организуйте обмен через библиотеку OwenCommunicaton (ФБ MB_TcpSlave).
Карту регистров блока (указатель на нее - pData) объявите в области RETAIN.

AndreyN
25.05.2022, 14:08
Евгений, большое спасибо! Помогло!

IgorKIV
04.12.2022, 21:49
Подскажите пожалуйста, а решение первичной проблемы найдено?

проблема - обнуляются все Retain переменные при отключении именно питания - если в эмуляции нажать сброс то не обнуляются.
Добрый день, прошу помощи, после какого то момента перестали сохраняться энергонезависимые переменные на контроллере 210 03

Переменные храняться в GVL VAR_GLOBAL RETAIN

В симуляции при сбросе контроллера они сохраняются
При сбросе контроллера через Онлайн сброс – значения сохраняются
Есил отключить питание контроллера и потому включить все переменные преобретают значение инициализации.

Что я делаю не так?
Проект в приложенном файле.
Проверка – запускаем проект заходим в визуализацию settings выбираем станок 1 и жмем галочку включен и номер станка 1, еще например задать количество мест 5
64278
отлючаем питание контроллера – включаем – все обнулилось.


Переменные
64279

Что меняется и почему сохраняется при сбросе в эмуляции а по питантю когда сброс все обнуляется. Пожалуйста помогите.

доступ по энидеск могу предоставить

IgorKIV
04.12.2022, 22:23
не совсем сам верю но вроде поборол проблему
Онлайн- режим работы - переключил с Отладка на Работа
и о чудо все стало сохраняться - не знаю должно ли так быть но проблема ушла проблемы пока нет.
раз 10 уже перезагрузил - все сохраняется :)
64280

Tacio
02.03.2023, 09:22
А есть ли какой файловый доступ к MRAM?
Имеется ПЛК210 на новой прошивке и требуется сохранять уставки и наработку. Но, если я правильно понял из документации, RETAIN переменные переинициализируются, если сделать Cold Reset.
Нам необходимо, чтобы наработка и уставки не стирались при Cold Reset, поэтому задачу решаем периодической записью во flash. Может как-то можно работать с MRAM как с файловой системой или ещё каким образом туда писать бинарные данные?

Tacio
02.03.2023, 16:20
читали что нибудь про persistent https://help.codesys.com/webapp/_cds_vartypes_retain_persistent;product=codesys;ve rsion=3.5.10.0
Прощу прощения, в своём сообщении имел ввиду не Cold Reset, а Reset Origin. Persistent в данном случае тоже не подходят.

Евгений Кислов
02.03.2023, 16:23
Прощу прощения, в своём сообщении имел ввиду не Cold Reset, а Reset Origin. Persistent в данном случае тоже не подходят.

У пользователя нет инструментов для работы с MRAM напрямую и, в целом, это не очень разумный подход.
В вашем случае вы можете записывать ваши данные файл в пользовательской файловой системе.