Во время разработки одного из проектов для С6915 обнаружился небольшой нюанс: TwinCAT не имеет готового функционального блока для копирования файлов. Конечно, есть библиотека
Итак, разработанный (см. код ниже) блок позволяет создавать копию файла в пределах одного
TcSystem.lib, содержащая всё необходимое для создания, записи и чтения файлов, но не более того. Между тем её функционал вполне позволяет создать свой собственный блок, производящий копирование файлов.Итак, разработанный (см. код ниже) блок позволяет создавать копию файла в пределах одного
AmsNetId. Т.е. нельзя, к примеру, произвести копирование с одного ПК/ПЛК на другой, который имеет иной IP- и NetId-адрес. Но вот сделать копию файла из локальной папки в другую, или, допустим, на карту памяти и обратно — легко.(*Описание входов/выходов функционального блока*)
FUNCTION_BLOCK FB_COPY_FILES
VAR_INPUT
sSrcNetId: T_AmsNetId;
sSrcFileName: T_MaxString;
sDestNetId: T_AmsNetId;
sDestFileName: T_MaxString;
bExecute: BOOL;
tAdsTimeOut: TIME;
END_VAR
VAR_OUTPUT
bBusy: BOOL;
bError: BOOL;
iErrId: UDINT;
END_VAR
VAR
fbFileOpen: FB_FileOpen;
fbFileClose: FB_FileClose;
fbFileRead: FB_FileRead;
fbFileWrite: FB_FileWrite;
iHandleSrcFile: UINT := 0;
iHandleDestFile: UINT := 0;
iStep: INT;
fbRisingEdge: R_TRIG;
byBuffRead: ARRAY [1..100] OF BYTE;
iReadLength: UDINT := 0;
END_VAR