Страница 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

    По умолчанию

    Добрый день.

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

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

  3. #3

    По умолчанию

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

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

  4. #4

    По умолчанию

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

  5. #5

    По умолчанию

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

  6. #6

    По умолчанию

    Цитата Сообщение от 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

    По умолчанию

    Цитата Сообщение от 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

    По умолчанию

    Цитата Сообщение от 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, 12:30
  4. Ответов: 2
    Последнее сообщение: 06.05.2013, 15:13
  5. Ответов: 2
    Последнее сообщение: 03.02.2011, 15:02

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

Ваши права

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