Страница 4 из 4 ПерваяПервая ... 234
Показано с 31 по 32 из 32

Тема: еще раз про аккумулятор или как сохранить ретайн

  1. #31
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    844

    По умолчанию

    сохраняй просто в файл и обратно считывай
    + CmpChecksum.lib
    Просто вызываешь данный блок в программе и все Retain сохраняются в файл а при запуске берутся из него (это для Codesys V3 для Raspberry PI)
    PROGRAM RetainManager
    VAR_INPUT
    RetainFilePathName : STRING := '/tmp/extend/pccard/SD_MMC0_1/Retain';
    SaveFilterTime : TIME := T#5S;
    ForceSave : BOOL;
    END_VAR
    VAR
    Init: BOOL;
    pRetainFilePathName : POINTER TO STRING;
    pCurrentApp : POINTER TO APPLICATION;
    RetainAreaSize: __XWORD;
    pRetainArea: POINTER TO BYTE;
    dwCRCSave: DWORD;
    dwCRC: DWORD;
    TOF1 : TOF := (PT := SaveFilterTime);
    R_TRIG1: R_TRIG;
    END_VAR
    VAR_OUTPUT
    RTSIECResult : RTS_IEC_RESULT;
    AttemptSaveCounter: INT;
    END_VAR

    IF NOT Init THEN
    pCurrentApp := AppGetCurrent(ADR(RTSIECResult));
    IF RTSIECResult<>0 THEN RETURN; END_IF
    RetainAreaSize := AppGetAreaSize(pApp:= pCurrentApp, uiType:= DA_RETAIN, pResult:= ADR(RTSIECResult));
    IF RTSIECResult<>0 THEN RETURN; END_IF
    pRetainArea := AppGetAreaAddress(pApp:= pCurrentApp, uiType:= DA_RETAIN, pResult:= ADR(RTSIECResult));
    IF RTSIECResult<>0 THEN RETURN; END_IF
    IF LEN(RetainFilePathName) <> 0 THEN
    pRetainFilePathName := ADR(RetainFilePathName);
    ELSE
    pRetainFilePathName := ADR(pCurrentApp^.szName);
    END_IF
    RTSIECResult := AppRestoreRetainsFromFile(pCurrentApp, pRetainFilePathName^);
    CASE RTSIECResult OF
    0: // #define ERR_OK 0x0000
    16#1E: // #define ERR_SIGNATURE_MISMATCH 0x001E /* Signature mismatch of an api function */
    16#32: // #define ERR_FILE_ERROR 0x0032 /* File error. e.g. cannot open a file for writing because it could be write protected */
    ELSE RETURN;
    END_CASE
    dwCRCSave := CRC32Finish(ulCRC:= CRC32Update(ulCRC:= CRC32Init(), pData:= pRetainArea, ulSize:= RetainAreaSize));
    Init := TRUE;
    END_IF

    R_TRIG1(CLK := ForceSave);

    dwCRC := CRC32Finish(ulCRC:= CRC32Update(ulCRC:= CRC32Init(), pData:= pRetainArea, ulSize:= RetainAreaSize));

    IF dwCRC <> dwCRCSave OR R_TRIG1.Q THEN
    IF NOT TOF1.Q OR R_TRIG1.Q THEN
    RTSIECResult := AppStoreRetainsInFile(pCurrentApp, pRetainFilePathName^); // записасать в файл
    IF RTSIECResult = 0 THEN
    dwCRCSave := dwCRC;
    END_IF
    AttemptSaveCounter := AttemptSaveCounter + 1;
    TOF1(IN := TRUE);
    END_IF
    END_IF

    IF TOF1.Q THEN
    TOF1(IN := FALSE);
    END_IF
    Последний раз редактировалось murdemon; 12.03.2015 в 22:12.

  2. #32

    По умолчанию

    я пробовал менять родной аккумулятор на оригинальный но тот тоже долго не протянул, сейчас припаял литиевый от телефона филипс и приклеил к низу верхней платы на 2х стор скотч, по сравнению со штатным очень емкий получился, успевает ретайны записать и еще через неделю остановки правильно время считает, с штатным через пару дней все обнулялось

Страница 4 из 4 ПерваяПервая ... 234

Похожие темы

  1. Аккумулятор в ПЛК
    от Sergey666 в разделе ПЛК1хх
    Ответов: 28
    Последнее сообщение: 19.09.2018, 22:34
  2. Ретайн
    от BETEP в разделе Трёп (Курилка)
    Ответов: 25
    Последнее сообщение: 09.05.2014, 08:50
  3. Как сохранить проект в контроллер
    от Constanta в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 26.04.2011, 12:40
  4. аккумулятор на длительное время
    от Леонид в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 26.11.2010, 16:49
  5. Аккумулятор в ПЛК
    от Николаев Андрей в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 13.11.2008, 15:49

Ваши права

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