PDA

Просмотр полной версии : TimeAndDate в СПК



Пьер
20.10.2016, 11:36
Подскажите пожалуйста, как вывести время и дату с помощью стандартной библиотеки 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 не устраивает. Нужно именно стандартными методами.
Спасибо!

См. документ СПК. Системное время.

Пьер
20.10.2016, 13:03
См. документ СПК. Системное время.

Много Вам благодарен!

Пьер
20.10.2016, 14:14
Евгений Кислов, ArchiverSPK, как в этой библиотеке можно сохранять по событию не в один файл в сутки, а каждый раз в новый. Надо тестить оборудование на токи, и хочется, чтобы каждый раз создавался новый файлик. Т.е. нажал на архивацию, новый файл.
Спасибо!

Евгений Кислов
20.10.2016, 14:23
Евгений Кислов, ArchiverSPK, как в этой библиотеке можно сохранять по событию не в один файл в сутки, а каждый раз в новый. Надо тестить оборудование на токи, и хочется, чтобы каждый раз создавался новый файлик. Т.е. нажал на архивацию, новый файл.
Спасибо!

Тогда лучше воспользоваться библиотекой CAA File - она дает базовые блоки (открытие файла, закрытие файла, чтение, запись), с их помощью можно решить практически любую задачу. Пример использования есть в справке CODESYS.

Пьер
20.10.2016, 14:35
каких нибудь примитивных примеров нет?

Евгений Кислов
20.10.2016, 14:40
каких нибудь примитивных примеров нет?

В справке CODESYS как раз предельно простые и понятные примеры.

Пьер
20.10.2016, 14:53
Ищу, не могу найти библиотеку эту CAA File
Где можно скачать?

Евгений Кислов
20.10.2016, 14:56
Ищу, не могу найти библиотеку эту CAA File
Где можно скачать?

Это системная библиотека, входит в состав CODESYS.

Пьер
20.10.2016, 15:07
нашел. Спасибо!
А в примерах, - это надо создавать POU и весь код примера туда загонять?
Путь забыл к USB флешке 1.

Евгений Кислов
20.10.2016, 15:10
нашел. Спасибо!
А в примерах, - это надо создавать POU и весь код примера туда загонять?
Путь забыл к USB флешке 1.

Да, именно так. Путь для USB на СПК - /mnt/ufs/media/sda1

Пьер
20.10.2016, 15:18
Короче создаю в POU - PROGRAM FILE.STANDARD_PRG
он ругается, что нельзя создавать с таким именем.
Начинается гемор.

Евгений Кислов
20.10.2016, 15:21
Короче создаю в POU - PROGRAM FILE.STANDARD_PRG
он ругается, что нельзя создавать с таким именем.
Начинается гемор.

Название программы не может содержать точек (в документации, очевидно, опечатка). Переименуйте в TestFiles, например.

Пьер
20.10.2016, 15:32
Переименовал, но ошибок еще больше стало.

Пьер
20.10.2016, 15:36
не может там опечаток быть, там все примеры через точку.

Евгений Кислов
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:44
А если написать запись через ФБ которые находятся в библиотеке? Такой вариант возможен?

Евгений Кислов
20.10.2016, 15:45
А если написать запись через ФБ которые находятся в библиотеке? Такой вариант возможен?

Извините, не понял вопрос.

Пьер
21.10.2016, 08:02
Извините, не понял вопрос.
когда в поле где задаются переменные - придумываем переменную (переменная _ 1), а тип можно выбрать из соответствующей библиотеки.
27165

Переменная1:ТИП;

x1:REAL;
________________________________

а в моем случае я делаю так:

f1:FILE.Open;
f2:FILE.Write;

Чтобы мне облегчить задачу. Я честно еще не разобрался как в CDS 3.5. использовать эти библиотеки. В 2ой версии все намного проще и удобнее. ИМХО.

Евгений Кислов
21.10.2016, 08:18
Да, конечно - именно так и объявляются экземпляры ФБ библиотеки.

Пьер
21.10.2016, 09:50
Да, конечно - именно так и объявляются экземпляры ФБ библиотеки.

Можете мне объяснить, какой алгоритм будет записи файла на флешку?
Алгоритм создания функциональных блоков. А то что-то я в примерах ни .. не могу разобраться, извините, что такой тупой!

Пьер
21.10.2016, 09:53
мне на самом деле нужно архивировать по событию, ваши обещали еще в 2014 закончить эту библиотеку, чтобы сохраняла по событию, с разными фишками. Но в итоге, про нее забыли. Вот теперь хочу сам создать архиватор по событию и чтоб еще в CVS сохранял, мне конечно этим заниматься особо некогда, но вот сижу, думаю в дальнейшем пригодиться.

Евгений Кислов
21.10.2016, 09:59
Свяжитесь со мной по skype.

Пьер
27.10.2016, 13:34
Да, именно так. Путь для 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';

Пьер
27.10.2016, 13:50
Уберите последний слэш (/) в пути к файлу:




sFileName: CAA.FILENAME:= '/mnt/ufs/media/sda1/TestFile.Csv';


Получилось. :)
Спасибо!

Пьер
27.10.2016, 13:51
Уберите последний слэш (/) в пути к файлу:




sFileName: CAA.FILENAME:= '/mnt/ufs/media/sda1/TestFile.Csv';


Получилось. :)
Спасибо!

Пьер
28.10.2016, 08:33
IF filrd.xError THEN
(* error handling*)
;
END_IF
Из примера.
Когда вытаскиваю флешку и снова вставляю filrd.xError=true. После этого запись не идет.
Объясните пожалуйста, как сделать так, чтобы ошибки не возникало.

Евгений Кислов
28.10.2016, 11:27
Перед извлечением флешки необходимо ее размонтировать. Для этого надо с помощью библиотеки CmpSysExec отправить в терминал нужную команду.



umount /mnt/ufs/media/sda1


Пример из документации, в целом, нужно адаптировать под себя с учетом потребностей.

Пьер
28.10.2016, 11:53
Перед извлечением флешки необходимо ее размонтировать. Для этого надо с помощью библиотеки CmpSysExec отправить в терминал нужную команду.



umount /mnt/ufs/media/sda1


Пример из документации, в целом, нужно адаптировать под себя с учетом потребностей.

а как, допустим, я вытаскиваю флешку, СПК определяет, что флешка отсутствует и в этот момент посылает - "размонтировать".
Т.е. с помощью какого блока идет опрос флешки есть/нет?

Евгений Кислов
28.10.2016, 11:57
Так не получится. Можно сделать в визуализации кнопку "Размонтировать" и по ее нажатию отправлять в терминал команду. После этого крайне желательно проверить, что флешка действительно размонтировалась и вывести на экран соответствующее сообщение. И только после этого можно будет извлечь флэшку.

Готовый функционал для этого будет добавлен в будущие версии таргет-файлов.

Пьер
28.10.2016, 14:30
Так не получится. Можно сделать в визуализации кнопку "Размонтировать" и по ее нажатию отправлять в терминал команду. После этого крайне желательно проверить, что флешка действительно размонтировалась и вывести на экран соответствующее сообщение. И только после этого можно будет извлечь флэшку.

Готовый функционал для этого будет добавлен в будущие версии таргет-файлов.


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 и при вытаскивании флешки.

capzap
28.10.2016, 14:39
а как, допустим, я вытаскиваю флешку, СПК определяет, что флешка отсутствует и в этот момент посылает - "размонтировать".
Т.е. с помощью какого блока идет опрос флешки есть/нет?

смотреть надо как сконфигурирован fstab

Евгений Кислов
28.10.2016, 14:47
В команде ошибка, нет пробела после umount. Лучше тренироваться с включенным терминалом (putty и т.д.).

По поводу остального - вот пример от 3S (устанавливается через Менеджер пакетов).

Пьер
28.10.2016, 14:48
смотреть надо как сконфигурирован fstab

объясните пожалуйста, про что Вы это говорите?

Пьер
28.10.2016, 15:15
В команде ошибка, нет пробела после umount. Лучше тренироваться с включенным терминалом (putty и т.д.).

По поводу остального - вот пример от 3S (устанавливается через Менеджер пакетов).

Установил. А примера не могу найти :)

Темный лес для меня, написать свой архиватор, но это нужно сделать.

Евгений Кислов
28.10.2016, 18:08
При установке указывается путь, по которому распаковывается файл проекта.