PDA

Просмотр полной версии : SysFileLib: работа с WILDCARD возможна?



drvlas
21.01.2014, 18:22
В ходе работы мой ПЛК порождает много файлов. Имена файлов становятся известны только в момент их создания. Просмотреть-то их потом легко, тем же браузером ПЛК, но выделить некую группу - не пойму как.

Работая с библиотекой SysFileLib, не нашел никаких функций работы со множеством имен файлов. Простейший пример: создано много файлов в ПЛК, нужно удалить часть из них по какому-то правилу, связанному с именем: все файлы с расширением CSV, все файлы, имя которых начинается с "2014" и так далее. В привычных нам случаях это задается *.CSV или 2014*.*
Как мне заставить ПЛК производить такие операции?
Вариант с перебором не рассматривается - имена файлов содержат полное время создания файла до секунды "2014-01-20-12-18-59" - перебрать немыслимо. Переходить к системе нумерации файлов числами натурального ряда очень не хочется...

Спасибо!

capzap
21.01.2014, 18:32
Чё это перебором не получиться, строковая команда find вроде ищет не только по символу,но и по строке,так что вычислить что файл не текущего месяца и года,вполне легко

drvlas
21.01.2014, 18:40
Мне нужно удалить (например) все файлы на прошлый месяц. В течение месяца могло быть 86400*31 разных имен файлов (ведь секунды входят в имя). То есть, мне нужно пробовать открывать по всем этим именам.
А FIND - это команда работы со строкой... А мне нужно - с директориией

capzap
21.01.2014, 19:47
Например запустили процесс, за один цикл плк убиваете возможные файлы за один час,в следущем цикле следующий час и так пройдетесь за весь прошлый месяц, не Вы же будете мышкой клацать а машина

Я бы такую задачу решал массивом ретайн, в котором бы хранил имя файла в формате Dword, при каждой новой записи проверял бы начальную ячейку массива, если дата позднее 30 суток,удалял бы запись и соответствующий файл

drvlas
21.01.2014, 20:01
Ритейн не катит. Надежность хранения меня не устраивает. Постоит ПЛК выключенный пару недель - и после включения начнет кромсать чьо-ни-попадя...


Например запустили процесс, Это идея, спасибо! Но как-то скучно. В общем-то, ПЛК загружен прилично и ставить в фон процесс с неизвестной напряженностью...

В общем, пока ясно, что очевидных решений нет. Правду написали на одном форуме про КоДеСис - хорошая система для относительно слабых процов. С переходом к контроллерам, на которых можно развернуть нормальную ОС, появляются возможности работать более современно. Мне лично КДС нравится. Но я простой юзер (хотя вот, встретилась задача, которую КДС не решает, наверное).

capzap
21.01.2014, 20:30
Ну так и переходите на трешку или вроде обновленный 110 тоже флешки принимает

drvlas
21.01.2014, 20:35
Ну так и переходите на трешкуВсему свое время. Я ж медленно осваиваюсь. Тока-тока ПЛК100 научился боль-мень юзать...

Sergey666
21.01.2014, 22:41
Ритейн не катит. Надежность хранения меня не устраивает. Постоит ПЛК выключенный пару недель - и после включения начнет кромсать чьо-ни-попадя...

Это идея, спасибо! Но как-то скучно. В общем-то, ПЛК загружен прилично и ставить в фон процесс с неизвестной напряженностью...

В общем, пока ясно, что очевидных решений нет. Правду написали на одном форуме про КоДеСис - хорошая система для относительно слабых процов. С переходом к контроллерам, на которых можно развернуть нормальную ОС, появляются возможности работать более современно. Мне лично КДС нравится. Но я простой юзер (хотя вот, встретилась задача, которую КДС не решает, наверное).

Решает !!!!
КДС не при чем .
КДС одна из лучших в мире , я с лучшей не работал .
Вам советы приходят , а вы их мимо , я ж говорил перцовка Немирофф уже не та .
Что за бред вы там про Ретаин . Что песледний раз сохранил то и подгрузит в любом состоянии аккумулятора .
Хотите классное железо на КДС - Фаствелл СПМ-902 , круче нету .
Тока от цены подохренеть можно - 1200 евро рублей.

drvlas
21.01.2014, 23:26
Решает !!!!
КДС одна из лучших в мире , я с лучшей не работал .Не смею спорить с представителем Царства Тьмы :)

Но тогда рецепт давай. Ибо вот это:

Ретаин . Что песледний раз сохранил то и подгрузит в любом состоянии аккумулятора ....не рецепт. Я не знаю, как аккумулятор сохраняет инфо в разряженом состоянии. Спрашиваю именно о работе с ФЛЕШ. Она (работа) организовуется с помощью либы, так пишут сурьезные дядьки от производителя. А в либе нет того, что душа желает. Вот я и спрашиваю, чьо делать.


Тока от цены подохренеть можно - 1200 евро рублей.Я хренеть тока от перцовки согласен. А от цены не хочу.

lazy
22.01.2014, 17:18
Ритейн не катит. Надежность хранения меня не устраивает. Постоит ПЛК выключенный пару недель - и после включения начнет кромсать чьо-ни-попадя...

чо правда? прям кромсать? ретейн переменные при выключении плк сохраняюцо на флешке в виде файла )

кста. типа "журналирование в кольцевой файл" я где то на форуме выкладывал. исходники. )

drvlas
22.01.2014, 17:43
ретейн переменные при выключении плк сохраняюцо на флешке в виде файла Точно. Видел такой файл в ПЛК-браузере. Хех... Не допер. Тогда можно указатель так хранить, верно. Несколько проще, не работать с двумя файлами. Спасибо!
Одно "но". Пробовал как-то запускать ПЛК без аккума вовсе. Тогда примочка со слежением за аварией питания не работала (что-то я пытался записать в файл, но фейл). То есть, как я тогда сделал вывод, аккум нужен, хоть плохонький. Вот почему ритейн я и предал анафеме. Рано?

drvlas
22.01.2014, 17:48
"журналирование в кольцевой файл" я где то на форуме выкладывал. исходники. )Искал и по "кольц", и по "журнал" в твоих сообщениях. Не нашел. Ну, не старшно, главное идея.

Валенок
22.01.2014, 18:49
Соббсно кольцо - это 2 и более файла (не рассматриваю перезапись одного). По мере заполнения последнего - сносим первый. А проблему запоминани текущего активного можно решить и без допфайла и ретайна -используя размер.

drvlas
22.01.2014, 19:27
(не рассматриваю перезапись одного)А почему, собсно? Я как раз делаю сейчас (еще не знаю, как получится, много отрываюсь) открытие файла на RW, потом SysFileSetPos и запись одного события, потом SysFileGetPos и прячу полученный DWORD в ритейн-переменную... Должно бы... Смогу проверить через пару часов.


проблему запоминани текущего активного можно решить и без допфайла и ретайна -используя размер.Ага, а тогда номер записи как запомнить?

Валенок
22.01.2014, 19:41
Ага, а тогда номер записи как запомнить? жесткий бинарник (от Yegor'а) смотрим ?

drvlas
22.01.2014, 19:53
жесткий бинарник (от Yegor'а) смотрим ?Не обязательно... Я щас решил сначала как раз не бинарник сделать, для пробы.
Главное ведь не в том, как ВЫЧИСЛИТЬ позицию записи, а как запомнить (номер записи от начала или саму позицию). Она запоминается у меня в ритейн...

capzap
22.01.2014, 20:01
Не обязательно... Я щас решил сначала как раз не бинарник сделать, для пробы.
Главное ведь не в том, как ВЫЧИСЛИТЬ позицию записи, а как запомнить (номер записи от начала или саму позицию). Она запоминается у меня в ритейн...

может я попробую, жесткий бинарник подразумевает, если у Вас одна запись составляет в совокупности 10 байт например, то восьмая запись должна начаться с 81 байта от начала файла или записей. Таким образом, зная размер бинарника мы знаем сколько в нем записей и пора ли "затирать" первую запись, чтоб добавить новую и при этом файл оставался с тем же размером

Валенок
22.01.2014, 20:02
Ну так ведь сам номер записи лежит в записи. А вычислить позицию при старте можно например бинарным поиском разрыва последовательности в номерах записи.
Ну или тупой перебор, при старте не страшно.

Валенок
22.01.2014, 20:10
Я щас решил сначала как раз не бинарник сделать, для пробы.

В csv читаем хвостик, ищем последний номер записи. Он там вроде перед датой

PS
Из csv кстати тоже можно сделать а-ля бинарник - пробелы помогут. Только это не кошерно как-то

drvlas
22.01.2014, 21:03
мы знаем сколько в нем записей и пора ли "затирать" первую записьКак. уважаемый коллега? Как мы знаем. что пора затирать? Для этого нам надо знать не только размер файла (это ясно), но и количество записей. которые мы произвели на текущий момент. Я об этом и говорю: номер записи.
Ладно, если вы до сих пор думаете, что я ошибаюсь - дайте мне самому убедиться в этом. Или убедить вас в обратном :) У меня еще целый вечер впереди

capzap
22.01.2014, 21:12
у меня нет плк, мне не начем подготовить проект с записью файла. Бинарный файл это как тетрис, с одной лишь разницей, что пустот не бывает, каждая новая строка заполняет весь стакан и как я уже говорил, если запись десять байт, то файл размером 780 байт будет иметь 78 строк, определились что количество записей должно быть 100 строк, значит после того как размер файла достигнет 1кБ, нужно начинать затирать десять первых байт, чтоб добавить новые десять байт

lazy
23.01.2014, 14:29
гы гы. с чего вы взяли что указатель "просрочившийся" в ретейне останецо свежим в в вашей реализации его хранения в файле? )
за остальное, лень ввязывацо. )

где то здесь кароч:
http://www.owen.ru/forum/showthread.php?t=7648&page=4