На CX9010-1101 (Windows CE 6.0, ARM 533 МГц) возникла задача записи данных в файл, чтобы по результатам этой записи можно было не только просмотреть весь лог, но и построить график. Логичнее всего было бы организовать запись в XLS-файл, таким образом будет обеспечена гибкость последующей обработки данных, поскольку Excel позволяет провести необходимый анализ. Клиенту останется только с помощью карты flash-памяти перетащить сохранённый файл на ПК.
Для реализации теста потребуется любой CX с USB-разъёмом, TwinCAT PLC Control, бесплатные библиотеки
Далее — пишем программу. Условно она будет разделяться на несколько основных этапов: открытие файла с получением его дескриптора, формирование строки данных, запись строки данных в файл, закрытие файла. Условимся, что файл у нас будет называться
Полагаю, излишне будет напоминать, что аналогичным образом можно создавать и обрабатывать не только XLS- и TXT-файлы, а также файлы с другими расширениями. Если в конфигурации системы имеется панель управления, то оператору было бы удобно ещё и задавать имя сохраняемого файла. А если на ПЛК установлена полноценная ОС Windows с пакетом Microsoft Office (или, как вариант, Open.Office), то можно обрабатывать графики не отходя от системы управления.
Для реализации теста потребуется любой CX с USB-разъёмом, TwinCAT PLC Control, бесплатные библиотеки
TcUtilities.lib
, TcBase.lib
, TcSystem.lib
и Standard.lib
, flash-карта для переноса файла, ПК с установленным Excel либо другой программой, позволяющей работать с табличными данными, и 40 минут свободного времени. В рамках теста в файл будут писаться строки, состоящие из двух параметров: времени (в формате [с],[мс]
) и изменяющейся в каждом программном цикле переменной.PROGRAM MAIN
VAR
file: INT;
bRun: BOOL;
fbFileOpen: FB_FileOpen;
fbFormatString: FB_FormatString;
fbFileWrite: FB_FilePuts;
fbFileClose: FB_FileClose;
fbTimer: TON;
rTime: REAL;
i: REAL;
rCount: REAL;
END_VAR
Далее — пишем программу. Условно она будет разделяться на несколько основных этапов: открытие файла с получением его дескриптора, формирование строки данных, запись строки данных в файл, закрытие файла. Условимся, что файл у нас будет называться
file.xls
и сохраняться он будет в корневом каталоге hard disk
. Очевидно, что можно организовать запись файла и во вложенной папке, предварительно созданной на ПЛК.CASE file OF
0: (*Ожидание пуска*)
IF bRun THEN
file := file + 1;
END_IF;
1: (*Отрытие файла и получение его дескриптора 'fbFileOpen.hFile'*)
fbFileOpen(
sNetId := ,
sPathName := 'hard disk\file.xls',
nMode := FOPEN_MODEWRITE OR FOPEN_MODETEXT,
ePath := PATH_GENERIC,
bExecute := TRUE,
tTimeout := t#1s);
IF NOT(fbFileOpen.bError) THEN
IF fbFileOpen.hFile <> 0 AND NOT(fbFileOpen.bBusy) THEN
fbFileOpen(bExecute := FALSE);
file := file + 1;
END_IF;
END_IF;
2: (*Подготовка данных для записи в файл*)
fbTimer(in := TRUE, pt := t#10m); (*Вызов таймера*)
rTime := TIME_TO_REAL(fbTimer.ET)/1000; (*Перевод времени в формат [с],[мс]*)
i := i + 0.1; (*Счётчик*)
rCount := SIN(i)*50 + 50; (*Простейшая sin-функция*)
file := file + 1;
3: (*Формирование строки для записи в файл*)
fbFormatString(
sFormat := '%.2f$09%.2f$L',
arg1 := F_REAL(rTime),
arg2 := F_REAL(rCount));
IF NOT(fbFormatString.bError) THEN
IF fbFormatString.sOut <> '' THEN
file := file + 1;
END_IF;
END_IF;
4: (*Запись строки*)
fbFileWrite(
sNetId := '',
hFile := fbFileOpen.hFile,
sLine := fbFormatString.sOut,
bExecute := TRUE,
tTimeout := t#5s);
file := file + 1;
5: (*Проверка записи*)
IF NOT(fbFileWrite.bError) THEN
IF NOT(fbFileWrite.bBusy) THEN
fbFileWrite(bExecute := FALSE);
file := file + 1;
ELSE
fbFileWrite(bExecute := TRUE);
END_IF;
END_IF;
6: (*Проверка останова записи*)
IF bRun AND NOT(fbTimer.OUT) THEN
file := 2;
ELSE
file := file + 1;
END_IF;
7: (*Закрытие файла*)
fbFileClose(
sNetId := '',
hFile := fbFileOpen.hFile,
bExecute := TRUE,
tTimeout := t#1s);
IF NOT(fbFileClose.bError) THEN
IF NOT(fbFileClose.bBusy) THEN
fbFileClose(bExecute := FALSE);
file := 0;
END_IF;
END_IF;
END_CASE;
Полагаю, излишне будет напоминать, что аналогичным образом можно создавать и обрабатывать не только XLS- и TXT-файлы, а также файлы с другими расширениями. Если в конфигурации системы имеется панель управления, то оператору было бы удобно ещё и задавать имя сохраняемого файла. А если на ПЛК установлена полноценная ОС Windows с пакетом Microsoft Office (или, как вариант, Open.Office), то можно обрабатывать графики не отходя от системы управления.
Комментариев нет:
Отправить комментарий