Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 16

Тема: СПК110 [М01] + PersistantVars - некорректное восстановление значений при перезапуске.

  1. #1

    По умолчанию СПК110 [М01] + PersistantVars - некорректное восстановление значений при перезапуске.

    Добрый день, столкнулся со странным поведением при работе с PersistantVars.
    Задача следующая, СПК110 должен работать как Slave по Modbus RTU и Modbus TCP. По обоим каналам могут приходить новые значения для уставок. Также уставки могут меняться с сенсорной панели.
    Уставки сохраняются в PersistantVars.
    Код:
    (*Уставки для ШП1.*)	
    SpAT1_MaxFillTm: TIME (*:= T#9M*); (*Допустимое время набора давления в ресивере.*)
    SpAT1_MaxFillUpTm: TIME(*:= T#1M30S*); (*Допустимое время набора давления в ресивере.*)
    SpAT1_DrainPeriod: TIME(*:= T#6H*); (*Периодичность сброса конденсата.*)
    SpAT1_DrainTm: TIME(*:= T#7S*); (*Длительность открытия клапана сброса конденсата.*)
    
    SpL11_PurgePeriod: TIME(*:= T#2H*); (*Периодичность продувки*)
    SpL11_ML_MaxPurgeTm: TIME(*:= T#10M*); (*Макс. длительность продувки «-» линии*)
    SpL11_PL_MaxPurgeTm: TIME(*:= T#10M*); (*Макс. длительность продувки «+» линии*)
    SpL11_ML_AlmDirtyTm: TIME(*:= T#9M30S*); (*Время формирования предупреждения «Сильно забита «-» линия».*)
    SpL11_PL_AlmDirtyTm: TIME(*:= T#9M30S*); (*Время формирования предупреждения «Сильно забита «+» линия».*)
    SpL11_UDL_PurgeDelay: TIME(*:= T#5S*); (*Пауза между началом  продувки сверху и снизу.*)
    
    (*Уставки для ШП2.*)	
    SpAT2_MaxFillTm: TIME(*:= T#9M*); (*Допустимое время набора давления в ресивере.*)
    SpAT2_MaxFillUpTm: TIME(*:= T#1M30S*); (*Допустимое время набора давления в ресивере.*)
    SpAT2_DrainPeriod: TIME(*:= T#6H*); (*Периодичность сброса конденсата.*)
    SpAT2_DrainTm: TIME(*:= T#7S*); (*Длительность открытия клапана сброса конденсата.*)
    
    SpL21_PurgePeriod: TIME(*:= T#2H*); (*Периодичность продувки*)
    SpL21_ML_MaxPurgeTm: TIME(*:= T#10M*); (*Макс. длительность продувки «-» линии*)
    SpL21_PL_MaxPurgeTm: TIME(*:= T#10M*); (*Макс. длительность продувки «+» линии*)
    SpL21_ML_AlmDirtyTm: TIME(*:= T#9M30S*); (*Время формирования предупреждения «Сильно забита «-» линия».*)
    SpL21_PL_AlmDirtyTm: TIME(*:= T#9M30S*); (*Время формирования предупреждения «Сильно забита «+» линия».*)
    SpL21_UDL_PurgeDelay: TIME(*:= T#5S*); (*Пауза между началом  продувки сверху и снизу.*)
    Для проверки уставок сделано три POU:
    ModbusRtuData
    ModbusTcpData
    PLC_PRG
    Все три POU выполняются последовательно в одной задаче.


    Пример кода проверки:
    Код:
    IF SpL11_PurgePeriod.tmVal <> PersistentVars.SpL11_PurgePeriod THEN // Если значение пришедшее по Modbus не совпадает с сохранённым в СПК, то проеряем.
    	IF (SpL11_PurgePeriod.tmVal>=GVL.PurgePeriod_MIN) AND (SpL11_PurgePeriod.tmVal<=GVL.PurgePeriod_MAX) THEN // Проверка пределов.
    		PersistentVars.SpL11_PurgePeriod:= SpL11_PurgePeriod.tmVal; // Если новое значение подходит, то сохраняем в Persistant
    	ELSE
    		SpL11_PurgePeriod.tmVal:= PersistentVars.SpL11_PurgePeriod; // Если новое значение НЕ подходит, то в Modbus-регистр пишем старое значение.
    	END_IF
    	PLC_PRG.SpL11_PurgePeriod:= PersistentVars.SpL11_PurgePeriod; // Обновляем значения уставок в POU для проверки значений введённых с сенсорной панели, чтобы в данном POU не проводилась повторная проверка.
    	ModbusTcpData.SpL11_PurgePeriod.tmVal:= PersistentVars.SpL11_PurgePeriod; // Обновляем значения уставок в POU для проверки значений пришедших по каналу Modbus TCP, чтобы в данном POU не проводилась повторная проверка.
    END_IF

    Проблема возникает при отключении питания СПК и повторном включении. Все уставки кроме одной сохраняются и восстанавливаются корректно. Значение уставки SpL11_PurgePeriod: TIME, если в переменной перед выключением СПК сохранили значение T#2H (0x006D DD00), после перезагрузки СПК принимает значение T#1H 59M 03S 424MS (0x006D 0000). Если сохраняли значение T#4H (0x00DB BA00), после перезагрузки СПК принимает значение T#3H 59M 12S 384MS (0x00DB 0000). Т.е. в PersistantVars при сохранении значения сохраняется только старший значащий регистр, а вместо младшего регистра записывается ноль.

    Если закомментировать строку
    Код:
    PLC_PRG.SpL11_PurgePeriod:= PersistentVars.SpL11_PurgePeriod;
    , то проблема уходит, но она необходима, для того чтобы исключить повторную проверку уставки.
    Переменная PLC_PRG.SpL11_PurgePeriod объявлена в секции VAR_INPUT.

    Подскажите в чём может быть проблема, если сталкивались?
    Последний раз редактировалось rch; 05.06.2023 в 15:56.

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,062

    По умолчанию

    Добрый день.

    Мы еще не сталкивались с такой проблемой.

    Выложите, пожалуйста, простейший проект с минимумом переменных, в котором получится воспроизвести эту проблему.

  3. #3

    По умолчанию

    Выложил архив проекта по ссылке https://disk.yandex.ru/d/RXxnxZULYI6Xjw
    Информация о СПК:
    2023-06-06 10-31-07.JPG

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

  4. #4
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,062

    По умолчанию

    С моим СПК и вашим проектом это не воспроизвелось - после перезагрузки по питанию в строке "Периодичность продувки" отображается "0 дн 02:00:00".
    Попробуйте перепрошить контроллер на ту же версию прошивки, что у вас сейчас, со сбросом настроек.

  5. #5

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    С моим СПК и вашим проектом это не воспроизвелось - после перезагрузки по питанию в строке "Периодичность продувки" отображается "0 дн 02:00:00".
    Попробуйте перепрошить контроллер на ту же версию прошивки, что у вас сейчас, со сбросом настроек.
    Подскажите, СПК перезагрузили один раз? Если один, то попробуйте перезагрузить СПК ещё раз.

  6. #6
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,062

    По умолчанию

    Цитата Сообщение от rch Посмотреть сообщение
    Подскажите, СПК перезагрузили один раз? Если один, то попробуйте перезагрузить СПК ещё раз.
    Перезагрузил СПК по питанию 5 раз подряд. Проблема не проявилась.

  7. #7

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    С моим СПК и вашим проектом это не воспроизвелось - после перезагрузки по питанию в строке "Периодичность продувки" отображается "0 дн 02:00:00".
    Попробуйте перепрошить контроллер на ту же версию прошивки, что у вас сейчас, со сбросом настроек.
    Перепрошил через Web-интерфейс со сбросом пользовательских данных. Использовалась прошивка 2.4.0923.1000, файл tanowrt-image-owen-codesys-swu-spk1xxm01.swu.
    К сожалению проблема осталась. Подскажите на вашем СПК хотфиксы дополнительно установлены?
    IMG_20230606_115959_603.jpg

  8. #8
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,062

    По умолчанию

    Цитата Сообщение от rch Посмотреть сообщение
    Перепрошил через Web-интерфейс со сбросом пользовательских данных. Использовалась прошивка 2.4.0923.1000, файл tanowrt-image-owen-codesys-swu-spk1xxm01.swu.
    К сожалению проблема осталась. Подскажите на вашем СПК хотфиксы дополнительно установлены?
    IMG_20230606_115959_603.jpg
    Да, хотфикс установлен, но он не должен никак влиять на ситуацию.
    Вы проводите тест с тем проектом, который выложили выше?

  9. #9

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Да, хотфикс установлен, но он не должен никак влиять на ситуацию.
    Вы проводите тест с тем проектом, который выложили выше?
    Да, тест именно с тем проектом, который выложен.
    Хотфикс установлен этот swu-www-patch-spk.hotfix.swu?

  10. #10
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,062

    По умолчанию

    Цитата Сообщение от rch Посмотреть сообщение
    Да, тест именно с тем проектом, который выложен.
    Хотфикс установлен этот swu-www-patch-spk.hotfix.swu?
    Да, именно этот.
    Вы можете со мной через telegram связаться?

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 05.06.2019, 21:33
  2. ТРМ-210. некорректное отображение температуры.
    от Max1998 в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 27.10.2015, 13:58
  3. Ответов: 11
    Последнее сообщение: 28.10.2013, 13:30
  4. Ответов: 2
    Последнее сообщение: 06.05.2013, 16:13
  5. Ответов: 2
    Последнее сообщение: 03.02.2011, 15:02

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •