Просмотр полной версии : TimeAndDate в СПК
Подскажите пожалуйста, как вывести время и дату с помощью стандартной библиотеки TimeAndDate.
PROGRAM PLC_PRG
VAR
time1:RTCLK.GetDateAndTime;
time2:DATE_AND_TIME;
p_2:REAL;
b1:BOOL;
END_VAR
_____________
time2:=time1.dtDateAndTime;
в итоге время не обновляется, в одной поре 1970_00_00_00-00
SPK_Tools не устраивает. Нужно именно стандартными методами.
Спасибо!
Евгений Кислов
20.10.2016, 12:13
Подскажите пожалуйста, как вывести время и дату с помощью стандартной библиотеки TimeAndDate.
PROGRAM PLC_PRG
VAR
time1:RTCLK.GetDateAndTime;
time2:DATE_AND_TIME;
p_2:REAL;
b1:BOOL;
END_VAR
_____________
time2:=time1.dtDateAndTime;
в итоге время не обновляется, в одной поре 1970_00_00_00-00
SPK_Tools не устраивает. Нужно именно стандартными методами.
Спасибо!
См. документ СПК. Системное время.
См. документ СПК. Системное время.
Много Вам благодарен!
Евгений Кислов, ArchiverSPK, как в этой библиотеке можно сохранять по событию не в один файл в сутки, а каждый раз в новый. Надо тестить оборудование на токи, и хочется, чтобы каждый раз создавался новый файлик. Т.е. нажал на архивацию, новый файл.
Спасибо!
Евгений Кислов
20.10.2016, 14:23
Евгений Кислов, ArchiverSPK, как в этой библиотеке можно сохранять по событию не в один файл в сутки, а каждый раз в новый. Надо тестить оборудование на токи, и хочется, чтобы каждый раз создавался новый файлик. Т.е. нажал на архивацию, новый файл.
Спасибо!
Тогда лучше воспользоваться библиотекой CAA File - она дает базовые блоки (открытие файла, закрытие файла, чтение, запись), с их помощью можно решить практически любую задачу. Пример использования есть в справке CODESYS.
каких нибудь примитивных примеров нет?
Евгений Кислов
20.10.2016, 14:40
каких нибудь примитивных примеров нет?
В справке CODESYS как раз предельно простые и понятные примеры.
Ищу, не могу найти библиотеку эту CAA File
Где можно скачать?
Евгений Кислов
20.10.2016, 14:56
Ищу, не могу найти библиотеку эту CAA File
Где можно скачать?
Это системная библиотека, входит в состав CODESYS.
нашел. Спасибо!
А в примерах, - это надо создавать POU и весь код примера туда загонять?
Путь забыл к USB флешке 1.
Евгений Кислов
20.10.2016, 15:10
нашел. Спасибо!
А в примерах, - это надо создавать POU и весь код примера туда загонять?
Путь забыл к USB флешке 1.
Да, именно так. Путь для USB на СПК - /mnt/ufs/media/sda1
Короче создаю в POU - PROGRAM FILE.STANDARD_PRG
он ругается, что нельзя создавать с таким именем.
Начинается гемор.
Евгений Кислов
20.10.2016, 15:21
Короче создаю в POU - PROGRAM FILE.STANDARD_PRG
он ругается, что нельзя создавать с таким именем.
Начинается гемор.
Название программы не может содержать точек (в документации, очевидно, опечатка). Переименуйте в TestFiles, например.
Переименовал, но ошибок еще больше стало.
не может там опечаток быть, там все примеры через точку.
Евгений Кислов
20.10.2016, 15:36
Переименовал, но ошибок еще больше стало.
При объявлении переменных CAA замените на FILE.CAA - это должно решить проблему.
sFileName: FILE.CAA.FILENAME:= 'TestFile.txt';
hFile: FILE.CAA.HANDLE;
...
szFileSize1: FILE.CAA.SIZE := 0;
szFileSize2: FILE.CAA.SIZE := 0;
А если написать запись через ФБ которые находятся в библиотеке? Такой вариант возможен?
Евгений Кислов
20.10.2016, 15:45
А если написать запись через ФБ которые находятся в библиотеке? Такой вариант возможен?
Извините, не понял вопрос.
Извините, не понял вопрос.
когда в поле где задаются переменные - придумываем переменную (переменная _ 1), а тип можно выбрать из соответствующей библиотеки.
27165
Переменная1:ТИП;
x1:REAL;
________________________________
а в моем случае я делаю так:
f1:FILE.Open;
f2:FILE.Write;
Чтобы мне облегчить задачу. Я честно еще не разобрался как в CDS 3.5. использовать эти библиотеки. В 2ой версии все намного проще и удобнее. ИМХО.
Евгений Кислов
21.10.2016, 08:18
Да, конечно - именно так и объявляются экземпляры ФБ библиотеки.
Да, конечно - именно так и объявляются экземпляры ФБ библиотеки.
Можете мне объяснить, какой алгоритм будет записи файла на флешку?
Алгоритм создания функциональных блоков. А то что-то я в примерах ни .. не могу разобраться, извините, что такой тупой!
мне на самом деле нужно архивировать по событию, ваши обещали еще в 2014 закончить эту библиотеку, чтобы сохраняла по событию, с разными фишками. Но в итоге, про нее забыли. Вот теперь хочу сам создать архиватор по событию и чтоб еще в CVS сохранял, мне конечно этим заниматься особо некогда, но вот сижу, думаю в дальнейшем пригодиться.
Евгений Кислов
21.10.2016, 09:59
Свяжитесь со мной по skype.
Да, именно так. Путь для USB на СПК - /mnt/ufs/media/sda1
PROGRAM PLC_PRG
VAR
xFileStdInit: BOOL:=FALSE;
uiFileStdState:UINT:=0;
sFileName: CAA.FILENAME:= '/mnt/ufs/media/sda1/TestFile.Csv/';
hFile:CAA.HANDLE;
sFileTestString:STRING:='Hello WORLD!';
sFileString:STRING:='';
szFileSize1:CAA.SIZE := 0;
szFileSize2:CAA.SIZE := 0;
filop:FILE.Open;
filwr:FILE.Write;
filrd:FILE.Read;
filcl:FILE.Close;
END_VAR
Прописываю путь на Usb flash 1 (верхнее гнездо для usb) /mnt/ufs/media/sda1/TestFile.Csv/ ничего не записывается. Хотя с помощью программы Приходько А. archiverSPK все писалось на эту флешку.
Евгений Кислов
27.10.2016, 13:45
Уберите последний слэш (/) в пути к файлу:
sFileName: CAA.FILENAME:= '/mnt/ufs/media/sda1/TestFile.Csv';
Уберите последний слэш (/) в пути к файлу:
sFileName: CAA.FILENAME:= '/mnt/ufs/media/sda1/TestFile.Csv';
Получилось. :)
Спасибо!
Уберите последний слэш (/) в пути к файлу:
sFileName: CAA.FILENAME:= '/mnt/ufs/media/sda1/TestFile.Csv';
Получилось. :)
Спасибо!
IF filrd.xError THEN
(* error handling*)
;
END_IF
Из примера.
Когда вытаскиваю флешку и снова вставляю filrd.xError=true. После этого запись не идет.
Объясните пожалуйста, как сделать так, чтобы ошибки не возникало.
Евгений Кислов
28.10.2016, 11:27
Перед извлечением флешки необходимо ее размонтировать. Для этого надо с помощью библиотеки CmpSysExec отправить в терминал нужную команду.
umount /mnt/ufs/media/sda1
Пример из документации, в целом, нужно адаптировать под себя с учетом потребностей.
Перед извлечением флешки необходимо ее размонтировать. Для этого надо с помощью библиотеки CmpSysExec отправить в терминал нужную команду.
umount /mnt/ufs/media/sda1
Пример из документации, в целом, нужно адаптировать под себя с учетом потребностей.
а как, допустим, я вытаскиваю флешку, СПК определяет, что флешка отсутствует и в этот момент посылает - "размонтировать".
Т.е. с помощью какого блока идет опрос флешки есть/нет?
Евгений Кислов
28.10.2016, 11:57
Так не получится. Можно сделать в визуализации кнопку "Размонтировать" и по ее нажатию отправлять в терминал команду. После этого крайне желательно проверить, что флешка действительно размонтировалась и вывести на экран соответствующее сообщение. И только после этого можно будет извлечь флэшку.
Готовый функционал для этого будет добавлен в будущие версии таргет-файлов.
Так не получится. Можно сделать в визуализации кнопку "Размонтировать" и по ее нажатию отправлять в терминал команду. После этого крайне желательно проверить, что флешка действительно размонтировалась и вывести на экран соответствующее сообщение. И только после этого можно будет извлечь флэшку.
Готовый функционал для этого будет добавлен в будущие версии таргет-файлов.
IF r1>100 THEN r1:=0;
END_IF
r1_str:=REAL_TO_STRING(r1);
r1_str:=Concat(r1_str,';');
sFileTestString:=r1_str;
IF NOT xFileStdInit THEN
filop(xExecute:=FALSE);
filcl(xExecute:=FALSE);
filwr(xExecute:=FALSE);
filrd(xExecute:=FALSE);
xFileStdInit:=TRUE;
uiFileStdState:=0;
ELSE
CASE uiFileStdState OF
0: (* create a new file *)
filop.sFileName:=sFileName;
filop.eFileMode:=i1;
filop.xExclusive:=TRUE;
filop(xExecute:=TRUE);
IF filop.xDone THEN
hFile:=filop.hFile;
uiFileStdState:=1;
END_IF
IF filop.xError THEN
(* error handling*)
;
END_IF
1:(* write text in the file *)
filwr.hFile:=hFile;
filwr.pBuffer:=ADR(sFileTestString);
szFileSize1:=SIZEOF(sFileTestString);
filwr.szSize:=szFileSize1;
filwr.udiTimeOut:=100000; (* 100ms Timeout *)
filwr( xExecute:=TRUE);
IF filwr.xDone THEN
uiFileStdState:=2;
END_IF
IF filwr.xError THEN
(* error handling*);
END_IF
2:(* read file - TestFile.txt*)
filrd.hFile:=hFile;
filrd.udiTimeOut:=100000; (* 100ms Timeout *)
filrd.pBuffer:=ADR(sFileString);
filrd.szBuffer:=255;
filrd( xExecute:=TRUE);
IF filrd.xDone THEN
szFileSize2:=filrd.szSize;
IF szFileSize2 = szFileSize1 THEN
uiFileStdState:=3;
ELSE
(* error handling*)
;
END_IF
END_IF
IF filrd.xError THEN
(* error handling*)
;
END_IF
3: (* close file - TestFile.txt *)
filcl.hFile:=hFile;
filcl( xExecute:=TRUE);
IF filcl.xDone THEN
uiFileStdState:=4;
END_IF
IF filcl.xError THEN
(* error handling*)
;
END_IF
4: (* end of example *)
;
END_CASE
END_IF
blinker1(ENABLE:=b1 , TIMELOW:=T#1S , TIMEHIGH:=T#1S , OUT=>xFileStdInit );
r1:=r1+0.01;
IF b2 THEN
OutUSB(cmd:='umount/mnt/ufs/media/sda1' , output_string=> , complete=> );
END_IF
Размонтирование не получилось (OutUSB библиотека OutUSB:CmpSysExec.sysExecute2;), ошибка осталась, при вторичной установке флешки записи нет.
Также не получается записывать файл в один столбец.
Записываю filop.eFileMode:=3 (MAPPD 3 Файл будет открыт в режиме записи, а записанные данные будут добавлены в конец файла.) тоже особо не получается, ставил разделитель $r$n, но записывает в столбец какие-то непонятные символы.
File.Read -> xError постоянной выдает ошибку при переключении filop.eFileMode и при вытаскивании флешки.
а как, допустим, я вытаскиваю флешку, СПК определяет, что флешка отсутствует и в этот момент посылает - "размонтировать".
Т.е. с помощью какого блока идет опрос флешки есть/нет?
смотреть надо как сконфигурирован fstab
Евгений Кислов
28.10.2016, 14:47
В команде ошибка, нет пробела после umount. Лучше тренироваться с включенным терминалом (putty и т.д.).
По поводу остального - вот пример от 3S (устанавливается через Менеджер пакетов).
смотреть надо как сконфигурирован fstab
объясните пожалуйста, про что Вы это говорите?
В команде ошибка, нет пробела после umount. Лучше тренироваться с включенным терминалом (putty и т.д.).
По поводу остального - вот пример от 3S (устанавливается через Менеджер пакетов).
Установил. А примера не могу найти :)
Темный лес для меня, написать свой архиватор, но это нужно сделать.
Евгений Кислов
28.10.2016, 18:08
При установке указывается путь, по которому распаковывается файл проекта.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot