PDA

Просмотр полной версии : Файловая ситема ПЛК100



dima-profi
01.02.2010, 16:05
Меня как системного программиста интересует, какая файловая система используется для встроенного диска ПЛК100?
есть ли возможность прочесть список хранящихся файлов из программы на ПЛК?
поддерживаются ли манипуляции с каталогами?
насколько используемая система устойчива в целом?
какая максимальная длина имени файла? какие символы можно использовать в имени файла?

Николаев Андрей
01.02.2010, 18:14
Все это есть в документации на ПЛК. Программисты обычно читают Datasheet :)
Файловая система "ОВЕН".
Работа с файлами производится с помощью библиотеки SysLibFile

Филоненко Владислав
01.02.2010, 18:51
Файловая система FFS - собственная разработка.
1. Работа с каталогами не поддержана, т.к. не поддержана у CoDeSys на момент разработки.
2. Прочесть список хранящихся файлов - см. пункт 1. А вообще разве Вы не знаете все файлы на ПЛК? чудом они там появится не могли.
3. Вполне устойчивая журналируемая система.
4. 60 символов. Все, кроме 0х00.

dima-profi
02.02.2010, 09:11
Все это есть в документации на ПЛК. Программисты обычно читают Datasheet :)
Файловая система "ОВЕН".
Работа с файлами производится с помощью библиотеки SysLibFile
Самое главное - как узнать объем свободного места - нет в описаниях

dima-profi
02.02.2010, 09:17
Файловая система FFS - собственная разработка.
1. Работа с каталогами не поддержана, т.к. не поддержана у CoDeSys на момент разработки.
2. Прочесть список хранящихся файлов - см. пункт 1. А вообще разве Вы не знаете все файлы на ПЛК? чудом они там появится не могли.

Ситуация такая - у меня в контроллере хранится архив - на каждый день по файлу, информация о файлах хранится в RETAIN PERSISTENT переменных, но при обновлении проекта, причем не всегда, происходит сброс всех переменных, соотв. информация теряется

dima-profi
02.02.2010, 09:33
SysLibFileAsync поддерживается?

Сергей71
02.02.2010, 11:09
Ситуация такая - у меня в контроллере хранится архив - на каждый день по файлу, информация о файлах хранится в RETAIN PERSISTENT переменных, но при обновлении проекта, причем не всегда, происходит сброс всех переменных, соотв. информация теряется

Такое может случится (я тоже так делал). Выход - хранить информацию о файлах в отдельном файле.

dima-profi
02.02.2010, 14:24
а также придется хранить все настройки системы управления в файле, чтобы не затерлись, следить за целостностью файла, периодически скидывать изменения.... вот лишний гемор....
Это по сути написать собственную поддержку базы данных....

Филоненко Владислав
02.02.2010, 14:52
SysLibFileAsync не поддерживается.
"Это по сути написать собственную поддержку базы данных...." - если Вы хотите функционал базы данных - надо написать базу данных. Другого пути нет.

dima-profi
02.02.2010, 15:38
подскажите, пожалуйста, сколько времени занимает выполнение каждой функции SysLibFile в случае успеха и в случае неудачи?
Вы делали такие оценки или тесты?

Филоненко Владислав
02.02.2010, 16:51
Т.к. Файловая система на чтение использует полный кэш - время исполнения на чтение мало, доли мс.
Для записи кэш на запись ~30кБайт, скорость записи на уровне 30-40кБайт в сек. Если кэш записи не переполнять - операция записи длится те-же доли мс. Если переполнить - 0.512/40=13 мс на 1 сегмент (512 байт) в среднем.

Дмитрий Артюховский
02.02.2010, 17:25
Пробовал решать задачу с архивами подобным образом.. намучился кошмар как.... а все равно, при длительной эксплуатации идет деградация файловой системы. Частенько происходят сбои при записи (критические процессы совпадают или питание пропадает.. фиг знает) и файлы неконтролируемо жрут дисковое место. Чем это кончается всем понятно ))) вплоть до повреждения файлов проекта. - БЫЛО 5 ПОДТВЕРЖДЕННЫХ СЛУЧАЕВ!!! По результатам 2 летней эксплуатации снял эти журналы. ... если очень нужны такие архивы - ведите, можно написать, но периодически кодесисом и ручками файловую систему готовьтесь чистить (((.

dima-profi
02.02.2010, 23:56
вопросов становится все больше ;)
как почистить файловую систему, если возможна ее деградация?
как сделать форматирование диска ПЛК?

DARNER
03.02.2010, 01:54
вопросов становится все больше ;)
как почистить файловую систему, если возможна ее деградация?
как сделать форматирование диска ПЛК?

"это фантастика"......сдается мне ручками токма...:)

Николаев Андрей
03.02.2010, 10:38
Форматирвоание возможно только программой обновления встроенного ПО (программой перепрошивки).
1. Не надо пытаться использовать память ПЛК как архиватор - только для аварий. На постоянное архивирование он и не заточен (нет полноценной файловой системы, управление записью производится в свободное время от выполнения цикла ПЛК - ОС на ПЛК100 так же нет).
2. Трудно винить ПЛК в том, что при пропадании питания портятся архивы... Никто же не подает в суд на майрософт, если во время составления важного отчета питание с ПК снять...
Может быть стоит с питанием разобраться???

Филоненко Владислав
03.02.2010, 15:21
1. Отформатировать ФС можно с помощью программы перепрошивки.
2. Если Вы интенсивно пишите файлы и не обеспечили надежного питания - это концептуально укороченные грабли.
3. Попытка сделать на приборе для локального регулирования за 7000р. аппаратную SCADA-систему с архивированием (сколько такие стоят?) - технический авантюризм. Это как копейкой прицеп от камаза тягать. Она сможет, но не быстро и не долго :)

dima-profi
04.02.2010, 09:28
Запись не интенсивная - от 2 до 15 записей по 74 байта в час.
А как же заливка программы и конфигурации в ПЛК? Если, как вы говорите, файловая система может деградировать, то при обновлении проекта получается надо время от времени форматировать диск....

Подскажите еще, сколько байтиков тратятся на системные нужды при создании и размещении в файловой системе файла, или по-другому - какой разумный предел количества файлов в ПЛК100?

dima-profi
04.02.2010, 09:34
1. Отформатировать ФС можно с помощью программы перепрошивки.

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

Дмитрий Артюховский
04.02.2010, 10:08
Минимум отводиться блок - 512 байт на файл. Возможный размер каталога достоверно неизвестен ))). При сбое в записи файла, форматирование не нарушается, файл может получить неправильный размер и программные библиотеки начинают неправильно работать. В большинстве случаев хватает удаления файла через браузер кодесиса, либо через программку PLC_IO. Еще одной неприятностью может стать тот факт, ну мож не факт - но очень похожее не него свойство файловой системы, выделять место для записи одним непрерывным куском. Если куска не хватает, то файл вроде и пишеться, но повреждается. При наличии большого количества файлов на диске проект очень часто заливается с ошибками. При небольшом количестве файлов ошибок в разы меньше.
Еще нужно быть внимательным при записи файла с существующим именем. Перед сохранением нужно удалить старый и запись нового выполнять не ранее следующего цикла.
У меня, одной из ошибок, было желание сохранять файлики при пропадании питания. Вроде в документации и написано про 10 минут работы, но на деле это время может быть намного меньше (состояние аккумулятора) и кроме того идет конкуренция с системными операциями (retain).
Более менее стабильные результаты получаются при использовании фиксированного количества файликов архива, с заранее определенными именами. При старте проверяем их наличие, т.е. создаем "свой каталог" существующих файлов и выполняем запись на свободные слоты, либо освобождаем слоты при исчерпании свободных. Полезно перед записью посмотреть состояние аккумулятора. Попытка строить динамические имена может вам дорого обойтись после начала эксплуатации системы )))

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

Филоненко Владислав
04.02.2010, 13:44
1. На каждый файл отводится часть 512 байтного блока, а именно остается для использования 480байт. Остальные блоки по 512 байт. Если хочется оптимизировать запись - руководствуйтесь этой информацией.
2. Как таковой каталог ни занимает никакого места.
3. Место под файл не выделяется одним куском. Как Вы вообще это смогли определить, что выделяет 1 куском, не одним, какой механизм? И делать выводы? ФС работает абсолютно иначе.
4. Большое количество файлов выражается в некотором (до 10-20%) увеличении времени для выполнения операций. Это же касается и малого размера свободной памяти на диске. Соответственно из-за замедления скорости записи - возможно срабатывание таймаутов среды CoDeSys. Увеличьте таймауты.

Дмитрий Артюховский
04.02.2010, 17:10
3. Место под файл не выделяется одним куском. Как Вы вообще это смогли определить, что выделяет 1 куском, не одним, какой механизм? И делать выводы? ФС работает абсолютно иначе.


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

dima-profi
04.02.2010, 20:04
интересная получается полемика, и главное пост Дмитрий Артюховского ставит под сомнение использование ФС в принципе, даже для хранения проекта и Retain переменных......

Филоненко Владислав
05.02.2010, 10:22
Дело совсем не в фрагментарности. Даже на пустом диске 1-й в жизни файл создается не "куском" :)
Про таймауты читали?

Дмитрий Артюховский
05.02.2010, 11:33
интересная получается полемика, и главное пост Дмитрий Артюховского ставит под сомнение использование ФС в принципе, даже для хранения проекта и Retain переменных......

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

.... А что я должен знать про тайм-ауты при выполнении "Create boot project"??? И как мне их учитывать????

Филоненко Владислав
05.02.2010, 13:23
Их надо при проблемах увеличить.
Дело в том, что при установке среды она (среда), по каким-то своим соображениям выставляет эти таймауты для разных ПК разными. И у одних они нормальные, у других слишком маленькие.