Показаны сообщения с ярлыком с6915. Показать все сообщения
Показаны сообщения с ярлыком с6915. Показать все сообщения

1 февраля 2010 г.

TwinCAT: Функциональный блок копирования файлов

Во время разработки одного из проектов для С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