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

26 апреля 2011 г.

TwinCAT: Запись данных в файл

На CX9010-1101 (Windows CE 6.0, ARM 533 МГц) возникла задача записи данных в файл, чтобы по результатам этой записи можно было не только просмотреть весь лог, но и построить график. Логичнее всего было бы организовать запись в XLS-файл, таким образом будет обеспечена гибкость последующей обработки данных, поскольку Excel позволяет провести необходимый анализ. Клиенту останется только с помощью карты flash-памяти перетащить сохранённый файл на ПК.


Для реализации теста потребуется любой CX с USB-разъёмом, TwinCAT PLC Control, бесплатные библиотеки TcUtilities.lib, TcBase.lib, TcSystem.lib и Standard.lib, flash-карта для переноса файла, ПК с установленным Excel либо другой программой, позволяющей работать с табличными данными, и 40 минут свободного времени. В рамках теста в файл будут писаться строки, состоящие из двух параметров: времени (в формате [с],[мс]) и изменяющейся в каждом программном цикле переменной.

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

29 января 2010 г.

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

Пишем функциональный блок, производящий поиск файлов на внутренних дисках ПЛК и ПК производства BECKHOFF, работающих под управлением Windows NT, W2K, XP, XPe, CE. Для нормальной работы блока в проект необходимо включить библиотеку TcUtilities.lib, поставляемую вместе с TwinCAT. Наш функциональный блок будет выдавать массив файлов (вместе с расширениями), массив имён файлов (без расширений) и флаг завершения поиска.

(*Описание входов и выходов функционального блока*)
FUNCTION_BLOCK FB_SEARCH_FILES
VAR_INPUT
   bSearch, bAbort, bReset: BOOL;      (*Управление блоком*)
   sDirectory: STRING;                 (*Директория для поиска*)
END_VAR
VAR_OUTPUT
   sFile: ARRAY [1..99] OF STRING;     (*Массив файлов*)
   sName: ARRAY [1..99] OF STRING;     (*Массив имён файлов*)
   bDone: BOOL;                        (*Поиск завершён*)
END_VAR
VAR
   bySearch: BYTE;
   fbFileSearch: FB_EnumFindFileEntry := (sNetID := '', tTimeout := t#10s);
   iNumber: BYTE := 1;
END_VAR