1. Внешняя флэшка это аддон к плк или по сети как-нить мутить?
2. А можно допускать выполнение команды удаления файла которого нет (пока нет - это стартовый нюанс)?
3. Можно спрашивать длину файла которого нет (пока нет - это стартовый нюанс)?
4. Ниже мой код про ритэйны, там уже нет удаления каждый раз. Но справедливости ради нужно сказать, что в той версии что сейчас повесила мои два ПЛК не было условия sfo > 0 (это я уже сейчас добавил). Это может приводить к исключениям? Может ли операционка ПЛК по каким-либо своим причинам не давать ссылку на файл после выполнения SysFileOpen (я такого ни разу не видел просто)? Ведь если это не проверять получится что я буду делать SysFileClose с сылкой на файл 0, а это уже приведёт к исключению и перезагрузке ПЛК. Так ведь?




Вот так я пишу свой ритэйн

FUNCTION save_main_retain : BOOL
VAR_INPUT
END_VAR
VAR
sfo: DWORD;
sfw: DWORD;
sfc: BOOL;
size: DWORD;
END_VAR

sfo:=SysFileOpen('retain_file','w');
IF sfo > 0 THEN
sfw:=SysFileWrite(sfo, ADR(b), SIZEOF(b));
sfw:=SysFileWrite(sfo, ADR(m), SIZEOF(m));
sfw:=SysFileWrite(sfo, ADR(dta), SIZEOF(dta));
sfw:=SysFileWrite(sfo, ADR(c), SIZEOF(c));
sfw:=SysFileWrite(sfo, ADR(sta), SIZEOF(sta));
sfw:=SysFileWrite(sfo, ADR(cl), SIZEOF(cl));
sfw:=SysFileWrite(sfo, ADR(ers), SIZEOF(ers));
sfw:=SysFileWrite(sfo, ADR(mst), SIZEOF(mst));
sfc:=SysFileClose(sfo);
retain_cnt:=retain_cnt+1;
END_IF;
RETURN;


во так я его читаю

FUNCTION init_main_retain : BOOL
VAR_INPUT
END_VAR
VAR
sfo: DWORD;
sfc: BOOL;
sfgs: DWORD;
size: DWORD;
END_VAR
sfgs:=SysFileGetSize('retain_file');
IF (sfgs = SIZEOF(b)+SIZEOF(m)+SIZEOF(dta)+SIZEOF(c)+
SIZEOF(sta)+SIZEOF(cl)+SIZEOF(ers)+SIZEOF(mst))
THEN
sfo:=SysFileOpen('retain_file','r');
IF sfo > 0 THEN
SysFileRead(sfo, ADR(b), SIZEOF(b));
SysFileRead(sfo, ADR(m), SIZEOF(m)); m_:=m;
SysFileRead(sfo, ADR(dta), SIZEOF(dta)); dta_:=dta;
SysFileRead(sfo, ADR(c), SIZEOF(c)); c_:=c;
SysFileRead(sfo, ADR(sta), SIZEOF(sta));
SysFileRead(sfo, ADR(cl), SIZEOF(cl)); cl_:=cl;
SysFileRead(sfo, ADR(ers), SIZEOF(ers));
SysFileRead(sfo, ADR(mst), SIZEOF(mst)); mst_:=mst;
sfc:=SysFileClose(sfo);
END_IF;
ELSE
SysFileDelete('retain_file');
init_microstat();
init_costs();
init_config();
init_client();
init_inkass();
b.block_to_counter:=0;
b.FLAG_POST_BLOCKED := FALSE;
calc_event_request(8);
END_IF

RETURN;