Показано с 1 по 10 из 10

Тема: архив не записывается в файл при отключении питания!

  1. #1

    По умолчанию архив не записывается в файл при отключении питания!

    Данные архива не сохраняются при отключении питания. Файл создается коректно, данные читаются тоже, если вместо переменной pwr (имя канала Power status) ставлю переменные, описывающие кнопки "Сохранить в файл" и "Прочитать из файла".
    Знаю, что при включении питания данные читаются из файла (запись в файл осуществлялась через кнопку "Сохранить в файл").
    Ниже привожу кусок из текста программы:
    VAR
    Q: INT; bArh: BOOL; bSbros: BOOL; bSort: BOOL; R_TR1: R_TRIG;
    R_TR2: R_TRIG; R_TR3: R_TRIG; N: INT; ValBuf: INT; K: INT:=0;
    R_TR4: R_TRIG; Enter: REAL; file_name:STRING[10] := 'File1';
    hFile: DWORD; file_opened: BOOL :=FALSE; size_file: DINT;
    read_fileINT; set: BOOL; R_TRIG_Read: R_TRIG;
    flagPower: BOOL; F_TRIG_Write: F_TRIG; bRead: BOOL;
    bWrite: BOOL; R_TRIG_write: R_TRIG; proba: ARRAY [0..9] OF DWORD; write_file: DWORD; size_of: DWORD; R_TRIG_PowerOut: R_TRIG;
    F_TRIG_PowerOut: F_TRIG; read: STRING; flag: BOOL;
    END_VAR

    (*ОТКРЫТИЕ/СОЗДАНИЕ/ЗАПИСЬ/ЧТЕНИЕ ФАЙЛА*)

    F_TRIG_PowerOut(CLK:=pwr);
    IF F_TRIG_PowerOut.Q THEN
    SysFileClose(hFile); (*закрываем для надежности*)
    file_opened:=FALSE;
    hFile:=SysFileOpen(file_name, 'w'); (*и создаем его*)
    write_file:=SysFileWrite(hFile, ADR(proba), SIZEOF(proba)); (*затем записываем заголовок*)
    file_opened:=SysFileClose(hFile); (*закрываем файл*)
    END_IF;

    R_TRIG_PowerOut(CLK:=pwr); (* При включении питания *)
    IF R_TRIG_PowerOut.Q THEN
    SysFileClose(hFile); (*закрываем для надежности*)
    file_opened:=FALSE;
    hFile:=SysFileOpen(file_name, 'r'); (*открываем его*)
    size_file:=SysFileGetSize(file_name); (* определяем размер файла *)
    size_of:=SIZEOF(proba);
    read_file:=SysFileRead(hFile,ADR(proba), SIZEOF(proba)); (*читаем данные из файла*)
    file_opened:=SysFileClose(hFile); (*закрываем файл*)
    END_IF

  2. #2

    По умолчанию

    Для сохранения данных в момент выкл. питания придуман retain.

  3. #3

    По умолчанию

    да, но в архиве огромное количество записей. энергонезависимой памяти может не хватить...

  4. #4

    По умолчанию

    Причем, не понимаю, почему после отключения питания программа в ПЛК не работает хотя бы N-й промежуток времени. Читаю про ПЛК-100 на сайте www.owen.ru:
    Конкурентные преимущества ПЛК 100 встроенный аккумулятор, позволяющий «пережидать» пропадание питания – выполнять программу при пропадании питания, и переводить выходные элементы в «безопасное состояние».
    В руководстве к ПЛК-100 заявлено: при случайном отключении основного питания контроллер переходит на аварийное питание и сохраняет промежуточные результаты вычислений и работоспособность интерфейсов Ethernet и Debug RS&232 в течение 10 минут.
    Светодиодная индикация и выходные элементы контроллера при этом не запитываются и не функционируют. При включении основного питания во время работы на аварийном питании контроллер сразу приступает к выполнению пользовательской программы, не тратя времени на загрузку ядра CoDeSys и сохраняя все промежуточные результаты вычислений.

    Так объясните, пожалуйста, программа будет работать N-е время после выключения питания? Например, у меня выставиться флаг flag в true после отключения питания, если он в разделе описания не объявлен как retain переменная?
    И что подразумевается под выполнением программы после выключения питания?

  5. #5

    По умолчанию

    Это значит ровно следующее:
    В контроллере встроен аккумулятор. При пропадании питания он на какое то время обеспечивает работу:
    Ethernet, 232 и обсчет программы (сохраняется в ОЗУ). Ни выхода ни что либо еще не питается - потребление большое.
    В момент, когда аккумулятор понимает, что все - записывает Retain.
    В случае, если ресурс аккумулятора полный, и он полностью заряжен - программа до перезагрузки ПЛК может "крутиться" в контроллере до 10 мин.
    Если во время, пока аккумулятор держит питание вернуть, то контроллер не будет перезагружаться и начинать с начала, а продолжит с запомненного места.

  6. #6

    По умолчанию

    Так выставится у меня flag в true или нет после отключения питания при идеальном условии (аккумулятор заряжен полностью)?
    Привожу ниже текст программы.
    1-й вариант:
    F_TRIG_PowerOut(CLK:=pwr);
    IF F_TRIG_PowerOut.Q THEN flag:=TRUE;

    2-й вариант:
    IF pwr=false THEN flag:=TRUE;
    Здесь pwr - системная переменная power status.

  7. #7

    По умолчанию

    Вы можете сами пронаблюдать работу ПЛК при выкл. питания, если залогинитесь через Ethernet. Связь не пропадет.

  8. #8

    По умолчанию

    В руководстве к ПЛК-100 заявлено: при случайном отключении основного питания контроллер переходит на аварийное питание и сохраняет промежуточные результаты вычислений и работоспособность интерфейсов Ethernet и Debug RS&232 в течение 10 минут.

    Отладка идет через rs232. При выключении питания флаг flag не меняет своего состояния (хотя вроде бы должен). Сообщение о выключении питания появляется сразу. Еще вопрос: при выключении питания, когда контроллер работает от встроееного аккумулятора, отладка по Debug RS&232 должна работь? Сейчас на мой взгляд нет - обновление переменных замирает сразу после выключения питания. Контроллер стоял включенным перед выключением неск. часов (когда проводили эксперимент). Почему?

  9. #9

    По умолчанию

    Повторяю, если залогинитесь через Ethernet. Связь не пропадет.

  10. #10

    По умолчанию

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

Ваши права

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