что возвращает функция записи? Отсюда и найдете ответ как контролировать записаны ли все подготовленные для этого данные
что возвращает функция записи? Отсюда и найдете ответ как контролировать записаны ли все подготовленные для этого данные
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Точно!!! Спасибо!
Честно сказать уже столько раз поднимался этот вопрос что наверное набил аскомину и уважаемой техподержке и всем мною глубоуважаемым старожилам сего форума.Я понимаю что судьбу можно обмануть писать эти переменные куда угодно, но почему не зля сделать это стартдными для кодесус методами зачем все эти танцы с бубнами,я специально в последних проектах вывел с модуля статистики ресурс аккумулятора и тут произошло чудо он показывает 600 а переменные не сохраняются,а то прекрасно понял что панечка померла а как это объяснить начальству и всем остальным заинтеросавын лицам
жекон, из модуля статистики нормально работает только температура процессора )
Можете задействовать вход под контакт от реле, сидящего на основном питании, и по пропаже этого сигнала записывать в память то, что вы хотели.Сообщение от Максим Tomahawk
Автоматизирую, как завещал нам Генри Форд
Скиньте пожалуйста пример правильной работы с SysLibFile. Как правильно записывать и читать?что возвращает функция записи? Отсюда и найдете ответ как контролировать записаны ли все подготовленные для этого данные
При замене аккумуляторов в 2-ух ПЛК160 выяснилось, что установленные на заводе аккумуляторы раздуло. И почему-то в паспорте к ПЛК160 пишут, что установлен LIR2477, на самом деле там LIR2466.
сохраняй просто в файл и обратно считывай
+ 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х стор скотч, по сравнению со штатным очень емкий получился, успевает ретайны записать и еще через неделю остановки правильно время считает, с штатным через пару дней все обнулялось