PDA

Просмотр полной версии : Запись данных в файл с помощью CAA.File



d-view
08.11.2016, 16:33
Во вложении архив проекта с ФБ, в основе которого библиотека CAA.File. Запись производится в файл *.csv. Данные записываются в строку (нужно преобразовать данные в STRING и собрать строку через CONCAT). ФБ автоматически добавляет дату и время в строку и так же автоматически добавляет месяц и год в имя файла (новый месяц - новый файл). Этот проект делал для Modicon TM251MESE, но, думаю проблем в работе на СПК быть не должно. Путь для записи файла /LOG/<имя_файла>_<месяц>_<год>.csv Каждый ФБ создает свой файл (при условии разных имен файлов) или дописывает строку в конец существующего файла. Единственное условие - запуск ФБ по очереди.
Если кто будет пробовать - отпишитесь о работе данного ФБ на СПК.

vniko
08.12.2016, 10:26
d-view, не обязательно иметь СПК, чтобы попробовать работоспособность проекта в CoDeSys 3 для СПК.
Удобнее использовать виртуальный контроллер (значок в панели задач CODESYS Control Win SysTray) , а не эмуляцию:
http://www.owen.ru/forum/showthread.php?t=20069&p=227019&viewfull=1#post227019
Ваш пример после обновления библиотек и устройства загрузился в Control Win V3 (CoDeSys 3.5 SP5 Patch5).
Добавление записи в существующий файл работает, но для создания нового файла код надо дорабатывать (при открытии файла используется режим MAPPD).
P.s. В документе "СПК. Системное время" рекомендуется наиболее простая и функциональная библиотека CAA DTUtil.

slonegd
18.01.2017, 16:03
Решил тоже разобраться с этой библиотекой (CAA_FILE).
Какая-то ерунда в следующем:
При записи в файл STRING:='test', в файле иероглифы. Думаю что-то с кодировкой, но читая этот же файл, получаю в строке эти же 4 иероглифа. При этом массив байт записывается, читается без проблем и искажений.
Может кто подскажет, что я упускаю.
Вот экран в отладке:
28789

Трофимов Артем
18.01.2017, 20:44
можете приложить проект тут или ссылку в личку?

slonegd
19.01.2017, 09:53
да, конечно, только не судите строго это проект исследование.

Евгений Кислов
19.01.2017, 10:16
У меня ваш проект работает корректно. Так что, вероятно, вы правы насчет проблем с кодировкой на ПК.

28794

slonegd
19.01.2017, 15:17
Странное дело. Залил в СПК и тоже иероглифы. Но проблема больше не актуальна, переписал блок по другому принципу.

slonegd
06.02.2017, 12:51
Во вложении простой проект, который записывает по команде с визуализации в файл одну структуру, и читает в другую структуру из того же файла.
Когда работал с внутренней памятью СПК, всё работало. Файл создавался, всё писалось, всё читалось.
В архиве я пытаюсь работать уже на флешке (usb). Прописал путь из СПК faq. И тут вылезло странное дело. Файл на флешке не появляется, но функция записи и чтения работают. то есть куда то он это пишет. Достал флешку из usb, запустил проект и всё РАБОТАЕТ, в файл пишется и читается, но файла то НЕТ. Ткните носом, где я туплю, пожалуйста.

slonegd
06.02.2017, 16:23
Пробую проверить флешку на совместимость по инструкции из этого поста http://www.owen.ru/forum/showthread.php?t=14698&p=122116&viewfull=1#post122116
Подрубился к СПК через winscp. Флешка не вставлена, но папка sda1 есть и в ней есть мои файлы из программы. Подключаю флешку, жму обновить и там уже файлы с флешки.

Проанализировав всё, подумал, что моя программа создает эту папку до того, как СПК успевает примонтировать флешку. Вставил в программу задержку на 10 секунд. Всё заработало как надо и файл на флешке появился. Теперь такой вопрос: а как определить из программы, примонтировалась ли флешка, чтобы не ждать 10 секунд, а начать работу сразу после того, как флешка в системе?

Евгений Кислов
06.02.2017, 17:49
Пробую проверить флешку на совместимость по инструкции из этого поста http://www.owen.ru/forum/showthread.php?t=14698&p=122116&viewfull=1#post122116
Подрубился к СПК через winscp. Флешка не вставлена, но папка sda1 есть и в ней есть мои файлы из программы. Подключаю флешку, жму обновить и там уже файлы с флешки.

Проанализировав всё, подумал, что моя программа создает эту папку до того, как СПК успевает примонтировать флешку. Вставил в программу задержку на 10 секунд. Всё заработало как надо и файл на флешке появился. Теперь такой вопрос: а как определить из программы, примонтировалась ли флешка, чтобы не ждать 10 секунд, а начать работу сразу после того, как флешка в системе?

В принципе, варианта два:

1. Послать команду в терминал (см. библиотеку CmpSysExec). Подойдет, например, mount или df -h.
2. Через функционал таргет-файлов. См. http://www.owen.ru/forum/showthread.php?t=25756