PDA

Просмотр полной версии : Как считать имена файлов?



Flomaster
19.03.2008, 17:46
Приветствую всех!
Появился вопрос такого плана. В памяти ПЛК-150 ежедневно создается файл с протоколом работы системы. Имена файлов уникальные. Вопрос: каким образом программными средствами получить имена всех файлов в Flash-памяти ПЛК?

Филоненко Владислав
19.03.2008, 20:51
К сожалению, пока библиотека SysLibDir не поддерживается. В будущих прошивках мы её поддержим.

Сейчас рекомендую, т.к. имена известны - путем последовательных попыток открытия файлов на !чтение! определить какие файлы есть.
Также при создании файлов в отд. файл можно вносить список созданых файлов.

Flomaster
20.03.2008, 02:29
К сожалению, пока библиотека SysLibDir не поддерживается. В будущих прошивках мы её поддержим.

Сейчас рекомендую, т.к. имена известны - путем последовательных попыток открытия файлов на !чтение! определить какие файлы есть.
Также при создании файлов в отд. файл можно вносить список созданых файлов.

Спасибо, попробую путем перебора имен файлов.

Филоненко Владислав
20.03.2008, 08:10
Спасибо, попробую путем перебора имен файлов.
Бинарный поиск в данном случае рекомендую

Smith2007
28.09.2013, 13:33
Появилась ли поддержка SysLibDir? Или есть аналоги?

Или вопрос по другому:
Есть ли информация об устройстве памяти ПЛК? Может можно считать область памяти отвечающую за хранение файлов (имена, адреса и пр. инфа) и разобрать ее? (написать свой Dir)

Yegor
28.09.2013, 15:40
Вы не сможете получить список файлов. Но т.к. кроме вас файлы на ПЛК никто не записывает, то вы можете сами поддерживать такой список в отдельном файле, имя которого зашито в программу. Лучше расскажите, зачем вам это — опишите задачу.

Smith2007
28.09.2013, 16:05
Имеется ряд контролируемых параметров. В случае выхода параметра за пределы
нормы - генерируется текст с описанием события. Необходимо сохранять лог таких сообщений
для возможности последующего анализа. Сохранить в файл текст я научился.
Но на ПЛК память не резиновая и нужно следить следить, чтобы архив (архивные файлы)
не превысили разумный объем. При превышении необходимо скинуть архив на
внешний ресурс и удалить самые старые файлы. В качестве внешнего ресурса
думаю можно использовать фтп сервер или свой самописный сервис
Слушающий определенный порт. В случае неудачного сброса архива на ресурс повторять попытки.
Если объем занимаемого архива станет равным критическому то удалять
старые файлы без сброса архива.

Примерно так.

capzap
28.09.2013, 16:11
Имеется ряд контролируемых параметров. В случае выхода параметра за пределы
нормы - генерируется текст с описанием события. Необходимо сохранять лог таких сообщений
для возможности последующего анализа. Сохранить в файл текст я научился.
Но на ПЛК память не резиновая и нужно следить следить, чтобы архив (архивные файлы)
не превысили разумный объем. При превышении необходимо скинуть архив на
внешний ресурс и удалить самые старые файлы. В качестве внешнего ресурса
думаю можно использовать фтп сервер или свой самописный сервис
Слушающий определенный порт. В случае неудачного сброса архива на ресурс повторять попытки.
Если объем занимаемого архива станет равным критическому то удалять
старые файлы без сброса архива.

Примерно так.

а что коран не позволяет, следить за размеров файла, и если он превышает определенный размер, перед внесением записи, удалить первую строку, а затем внести новую

Smith2007
28.09.2013, 16:20
А какой функцией можно удалить первую строку? Или при каждом обращении считывать весь файл в память, а затем записывать начиная со второй? А если в файле будет 1000 строк? Как это отразиться на ресурсах ПЛК?

capzap
28.09.2013, 16:27
а затем записывать начиная со второй?
Про принцип стека FIFO слышали?

Smith2007
28.09.2013, 18:47
Про принцип стека FIFO слышали?
Про принцип слышал, а как этот принцип реализовать?

capzap
28.09.2013, 18:55
по кругу будем ходить?
Первая строка первой вошла, первой и выходить, освободить место новой информации

Smith2007
28.09.2013, 19:09
Я не понимаю как это реализовать. Какими операциями? В файле как удалить первые строки? Добавить в файл строки - понятно. Заменить строки в файле - тоже понятно. Но как удалить - не понятно.

capzap
28.09.2013, 19:16
SysFileGetPos и SysFileSetPos в помощь, символ конца строки думаю сами отыщите

Smith2007
28.09.2013, 19:50
Как при этом уменьшится размер файла?
Я так понимаю, Вы предлагаете сделать циклическую запись. Т.е. когда достигли предела - начали писать с начала. Можно конечно и такой вариант, но не очень нравится, что свежие данные окажутся в середине файла.
И второе - это необходимо строго определить размер данных (читай строки). Иначе будем затирать прежние.

capzap
28.09.2013, 20:17
я уже называл эту идею бредом, Вы не создаете искусственный интеллект, плк у Вас не будет сам придумывать текст сообщений, скорее всего это определенный набор фраз с вставленными значениями показаний датчиков, так какого хрена записывать их в файл, если достаточно записать индекс, размером в байт и например температуру - 4 байта, хотя если речь о выходе за диапазон, то какая разница какая будет температура, главное что больше установленной границы, поэтому можно сохранять только код сообщения, соответственно решаются все проблемы, Вы будете знать что конкретно произошло и размерность будет один байт на сообщение.
ЗЫ если попадалась любая книга по созданию баз данных, то должны понять о чем я сейчас говорил (по поводу идентификаторов фраз)

Smith2007
28.09.2013, 20:47
Можно и так. Кодировать фразы и т.д. - это хорошо. Но если фраз более 10 - то уже под руками надо иметь расшифровку этих фраз. Я же хочу записать саму фразу с параметром на русском (а не код фразы) языке, что бы прочитать ее мог каждый и сразу все понять без обращения к расшифровкам. Все, что нужно - это прочесть список файлов.
Странно, что такая простая функция не поддерживается. Тем более, что через тот же ПЛК браузер видно список файлов. plc_io так же умеет получать список файлов. Значит реализация этой функции в принципе есть.

зы. я догадываюсь в чем дело... я не указал, для чего мне это надо и Вы предлагаете вариант, который можно легко использовать при условии, что дальнейший анализ архивных данных будет автоматизированным. Поправлюсь: Надо получить простой текст (произвольной длины), который можно будет открыть любым текстовым редактором.

ззы. можно завести файл в котором будут сохранены имена файлов. Но опять же криво это. Есть же уже файловая система. И обращаться лучше к исходным данным, а не к их возможным отображениям.

capzap
28.09.2013, 20:52
так кто Вам мешает в проекте иметь стандартный проиндексированный набор фраз в константах. Возьмите любую крупную библиотеку под КДС и не зря я упоминал про БД, этот принцип используется повсеместно, хранят необходимый минимум, всё остальное легко преобразуется в удобочитаемую форму при визуализации

capzap
28.09.2013, 20:54
да предвосхищаю еще один момент, забыл указать, что в моем методе необходима еще метка времени, которая занимать будет четыре байта

Yegor
29.09.2013, 12:13
Да, нужно писать в бинарном виде с фиксированным размером записей по кругу. Ритэйном тогда хранить текущую позицию в файле. plc_io — консольная, автоматизации поддаётся легко; нужно набросать ещё одну консольную прогу, которая будет из бинарника делать текстовый файл — дело пяти минут, а потом их уже обе одним bat-ником вызывать.

Sergey666
29.09.2013, 16:08
Привет Smith2007 , ну и хлопцы опытные .
Для записи фиксированных блоков в файл очень удобно использовать "Структуру" , можно писать в конец файла и в любое место , имея размер открытого файла и размер блока "Структуры" .(Это для Smith2007).
Если опыта нет зачем начинать с таких "сложных" вещей - может попроще как-то можно . Делают же как-то автоматику на "безмозглых" ПЛК (типа Direct Logic).
Только вот флэш внутренняя ПЛК100 малый размер имеет , да и "Подсадить" ее можно , если запись часто делать , а модерн 110й до ума и до серии довести не могут.