Просмотр полной версии : Архивы на flash ПЛК
Моисеев Алексей
26.01.2011, 09:21
Всем доброе утро. Существует идея, сохранения архивов работы установки, на flash память ПЛК(retain уже не хватает). Установка в течении определенного времени накапливает информацию, затем в начале часа происходит запись накопленной информации на flash. После определенного времени файлы будут удаляться и будут записываться новые. Для предоставления информации на верхний уровень, выставляется идентификатор имени файла, затем файл читается и заполняется буфер, из которого уже scada считывает необходимые значения. Вопрос вот чем, будет ли жизнеспособна данная идея, количество файлов будет 120, размер каждого около 6 кбайт,. Деградация файловой системы будет иметь место или нет? Если да,примерно через какое время? Может у кого нибудь есть опыт работы в этом направлении...
Александр Приходько
26.01.2011, 10:13
Здравствуйте. Если есть скада, зачем усложнять жизнь и делать архивы в ПЛК, когда можно получать текущие данные и вести архивацию в скаде.
Реализация задачи как было описано выше возможна, но трудоемка. Помимо этого ресурс памяти контроллера достаточно ограничен. Если данные будут писаться очень часто, то память быстро начнет портится.
Моисеев Алексей
26.01.2011, 15:53
Скада действительно есть, но так требует заказчик и с тем приходиться считаться. Период между процессами записи будет не менее одного часа. Просто есть смысл работать в этом направлении или искать другой выход ???Да и сколько если прикинуть, память может так проработать?
Моисеев Алексей
27.01.2011, 07:49
Раскрою более шире: будет существовать 2 группы файлов. 1 группа - каждый файл будут размером около 11 кбайт,количество 92. Запись будет осуществляться поэтапно, через каждый час, примерно по 450 байт, в начале следующих суток будет заводиться следующий файл, "время жизни" файла 3 месяца, после этого он удаляется, таким образом суммарный размер файлов около 1 Мбайт.
2 группа: размер файла 12 Кбайт, количество 12. Запись также поэтапно, в начале каждых суток, по 368 байт, "время жизни" 1 год, общий размер примерно 140 Кбайт. Да и если я правильно понимаю, процесс чтения на ресурсе флэш памяти сказывается мало?
Александр Приходько
27.01.2011, 10:13
Ресурс одного сектора 10 000 записей. Один сектор ~5кбайт. Если делать запись не в один файл, а в разные, размещенные по всей области памяти сектора, то тогда ресурса Flash хватит на очень длительный срок. Но если делать один архив и постоянно делать в него записи, то это не оч. хорошо.
Александр Приходько
27.01.2011, 10:16
P.S. если не ошибаюсь то в ПЛК нет возможности командой получить список файлов. Вам нужен будет либо массив с именами файлов и датами создания типа Retain, либо доп файл со сводной информацией. Грамотная реализация архивов на ПЛК не тривиальна, поэтому еще раз рекомендую скаду.
10 000 записей
маловато что-то для современной памяти.
вроде сейчас норма под миллион.
а в старину было до 100 000 записей.
???
или я что то путаю?
Николаев Андрей
27.01.2011, 14:06
Стандартные характеристики стандартной FLASH памяти.
Моисеев Алексей
27.01.2011, 15:12
Записываться и будет в разные....К примеру 1 группа файлов: в течении суток,по истечении каждого календарного часа в один файл записывается некая информация(т.е. максимум 24 процесса записи в один файл,больше впоследствии процессов записи не будет только чтение), затем по наступлении следующих суток пишется уже в другой файл. И так до того как количество файлов не превысит 92(т.е. через 3 месяца) , затем самый первый("старый") файл удаляется, пишется новый, следующий старый удаляется,пишется новый, и т.д. "по кольцу".
Массив с именами будет(имя файла - дата его создания). При включении ПЛК, массив читается из файла в озу и впоследствии при изменении будет корректироваться там же,при выключении старый файл с массивом переменных удаляется , записывается новый из озу.Включения и отключения будут очень редки....
Скада да, есть. Но мы подстраиваемся под желания заказчика, а не он под нас, к сожалению.
а задача да, не тривиальна, была бы обычной не было бы этой темы и у меня головной боли тоже не было :)
Моисеев Алексей
01.02.2011, 08:39
Не уж то с этим никто не сталкивался? :confused:
Не уж то с этим никто не сталкивался? :confused:
Взгляни вот это http://owen.ru/forum/showthread.php?t=7648 мне показалось должно помочь :-)
Моисеев Алексей
01.02.2011, 12:18
Спасибо за ссылки, по поводу реализации вопросов нет, вопросы остались по поводу надежности и "живучести" файловой системы, хотя скорее всего только реальная эксплуатация позволит дать на это ответ ...
Дмитрий Артюховский
02.02.2011, 11:33
на самом деле грусно с этим... я убрал архивы из флэша... да, конечно все работает, но возможные сбои ведут к деградации файловой системы. Основная проблема возникает при ухудшении качества аккумулятора и частыми отключениями ПЛК. Программа не успевает корректно записаться и появляются сбойные кластеры.... все это дело заканчивается сбоем всей файловой системы и плк перестает грузить проект. Лечится переформатированием флэшпамяти. Лучше уж использовать модуль подключения SD карты, хоть и приходиться его использовать через "задний" проход, а внутренний флэш оставить для хранения проекта и возможных настроек и конфигурационных файлов.
Моисеев Алексей
02.02.2011, 16:21
скорее всего так и будет, заморачиваться не будем, время терять не стоит. Возникает другой вопрос,а если попробовать все реализовать на плк304,и писать архивы на sd карту памяти или usb flash? Да и пользователю будет удобнее, пришел, sd(usb flash) вытащил, скопировал весь архив на ноут...
Возникает другой вопрос,а если попробовать все реализовать на плк304,и писать архивы на sd карту памяти или usb flash?
Если можно будет сохранять свои данные на sd или USB карту, то на мой взгляд всё будет отлично работать. создаем каждый день файлы для хранения данных за день типа d_2011_02_02.csv и пусть файлы там болтаются. Только не забыть данные выкладывать не в корень диска, а в директорию :-)
Моисеев Алексей
03.02.2011, 08:47
Теперь всё ясно. Всем спасибо за отзывы...Буду ждать прихода ПЛК304. Было совсем замечательно, если даже кто нить примером поделился сохранения какой либо переменной в файл....
Евгений Пашигоров
03.02.2011, 09:28
Проблема ведения архивов на ПЛК остро стоит и для меня.
На старом-старом ПЛК100 получилось использовать штатный модуль архиватора, который ведет архив длиной около 300кб.
В новых прошивках архив урезали до 30кб. Это очень мало. Я написал свой модуль архиватора, работающий через файловые функции. Но через несколько месяцев работы стали появляться странные сбои в работе ПЛК.
Грубо говоря. нарушалась логика работы прошитой программы. Файл архива тоже портился.
Вопросы.
Распределяет ли файловая система ПЛК равномерно запись во флеш-память для уменьшения износа?
Ведется ли контроль свободного места при записи файлов (и если нет, возможно ли его запрограммировать)?
Николаев Андрей
03.02.2011, 10:33
Запись ведется равномерно. Отслеживание свободной не ведется - при окончании начинается запись "с верху"
Филоненко Владислав
03.02.2011, 11:11
Запись ведется равномерно. Если нет места - записи не ведется. Ресурс - 300 миллионов записей. Вот и посчитайте, сколько раз вы записываете в секунду.
Евгений Пашигоров
03.02.2011, 11:30
Тут какое-то противоречие. Или нет контроля свободного места (тогда мы не узнаем, когда перезаписывать или останавливать запись), или все-таки контроль есть. Меня собственно волнует, возможно ли, записывая файл, залезть куда-нибудь в программную память (то есть, куда не следует)?
Обычно нужны архивы за дни или недели, а то и месяцы. Поэтому запись идет раз в минуту или раз в 10 минут, а для месяцев еще реже.
То есть, файловую систему можно порушить только незакрытыми файлами при пропадании питания и/или перезапуске ПЛК?
При перезапуске (reset) файлы автоматически не закрываются?
Дмитрий Артюховский
03.02.2011, 15:31
нет, автоматически не закрываются, но при старте можно выполнить CLOSE() и тогда закроется и с файлом можно будет работать....
при большом количестве файлов и сбойных кластеров может происходить еще одна неприятность - время на монтирование файловой системы приблизится к времени срабатывания ватчдога, и контроллер перезагрузиться, так и не запустившись.. понятно сто процесс будет бесконечным....
собственно осознание реальности этих проблем скорее всего и подвигло овеновцев на ограничение размера архивов и уменьшение времени работы на аккумуляторах
Логвиненко Андрей
03.02.2011, 17:03
Добавлю свои сто грамм.
Я сделал архив следующим образом:
-первые 4 байта это UDINT переменная, в которой храню положение последней записи,
-запись имеет фиксированный размер, устанавливается максимальное количество записей в архиве,
-при добавлении новой записи,если номер последней записи меньше максимального размера, новая запись помещается в конец архива,
счетчик записей увеличивается на 1, при достижении максимального размера счетчик записей обнуляется, новая запись затирает первую запись, следующая вторую и т.д.
- при чтении архива задается номер искомой записи относительно последней, зная размер архива, положение последней записи и её размер определяется положение начала запрашиваемой записи относительно начала архива и её чтение.
- файл открывается в постоянно в режиме 'w' при первом обращении на запись после старта и закрывается при отключении питания.
Сейчас на объекте используется архив размером 1024 записи, длинна записи 200 байт. периодичность записей - в среднем 10 раз в час.
Какой ресурс флеш- памяти будет в таком режиме?
Будет определяться частотой записи в первые 4 байта. В Вашем случае надолго хватит.
Филоненко Владислав
04.02.2011, 10:47
Тут какое-то противоречие. Или нет контроля свободного места (тогда мы не узнаем, когда перезаписывать или останавливать запись), или все-таки контроль есть. Меня собственно волнует, возможно ли, записывая файл, залезть куда-нибудь в программную память (то есть, куда не следует)?
При перезапуске (reset) файлы автоматически не закрываются?
Контроль есть! Андрей Николаев немного ошибся.
При перезагрузке всего ПЛК файлы закрваются, но при перезагрузке программы ПЛК - нет, т.к. файлы -не часть ядра CoDeSys и используются не только им.
Так что в начале программы просто закройте все файлы, к-е используете.
Логвиненко Андрей
04.02.2011, 18:41
Еще вопрос:
- данные пишутся на flash при выполнении sysfilewrite или при закрытии файла?
Евгений Пашигоров
07.02.2011, 14:15
Спасибо. И еще один вопрос: как определить оставшееся место для файлов?
Илья Кареткин
16.02.2011, 13:06
Уважаемые, коллеги для считывания АРХИВОВ из ОВЕН ПЛК на уровне прошивки ПЛК поддерживается: модуль архивирования и модуль передачи по 20-ой функции Modbus!!! как-то данный аспект был опущен нашими специалистами.. И не какого кода, сплошные клики пкм: Инструкция по конфигурированию ПЛК (http://www.kipshop.ru/Documentation/lectus/plc_arhiv_lectus.zip)
Евгений Пашигоров
24.02.2011, 10:55
на уровне прошивки ПЛК поддерживается: модуль архивирования и модуль передачи по 20-ой функции Modbus!!! И не какого кода, сплошные клики пкм: Инструкция по конфигурированию ПЛК (http://www.kipshop.ru/Documentation/lectus/plc_arhiv_lectus.zip)
Правда, везде скромно умалчивается о максимально допустимом размере файла архива в 30 килобайт!
Для меня, так это насмешка над понятием архив. При том, что размер флеш-памяти контроллера допускает объемы в десятки раз больше.
Приходится все делать самому. Да и ладно, лишь бы заявленный функционал работал так, как описано. А то постоянно на какие-то грабли натыкаешься.
Так и не получил ответа на свой вопрос, имеется ли возможность узнать, сколько осталось места на флешке под файл?
Плк 150 запись и чтение
зап:
dwHandle := SysFileOpen('Pr_XX.t','w');
SysFileWrite(dwHandle,ADR(Pr_XX),SIZEOF(Pr_XX));
SysFileClose(dwHandle);
tmp:=REAL_TO_WORD((cc+10)*10);
dwHandle := SysFileOpen('cc.t','w');
SysFileWrite(dwHandle,ADR(tmp),SIZEOF(tmp));
SysFileClose(dwHandle);
Чтение:
dwHandle := SysFileOpen('Pr_XX.t','r');
SysFileRead(dwHandle,ADR(Pr_XXf),SIZEOF(Pr_XXf)-1);
SysFileClose(dwHandle);
dwHandle := SysFileOpen('cc.t','r');
SysFileRead(dwHandle,ADR(tmp),SIZEOF(tmp)-1);
SysFileClose(dwHandle);
ccf:=WORD_TO_REAL(tmp);
ccf:=ROUND((ccf / 10 - 10),1);
Все это работает, но ЧУЮ что как то через Ж*ПУ.
подскажите?
Запись у меня проходит редко 1 раз в месяц а может и в год.
Просто настохринело менять аккумуляторы.
У меня 8-12 плк150 и сенсорная панель (так 8 раз с тремя типами панелей), с панели поменяли уставку в одном из плк, плк видит что значение изменилось и делает запись.
Ayyyy--
Тут черная дыра что ли?
Филоненко Владислав
24.02.2012, 08:40
Еще вопрос:
- данные пишутся на flash при выполнении sysfilewrite или при закрытии файла?
Реализовано кэширование записи Write Back с принудительной записью на Flash со скоростью ~30кБайт в секунду. Т.е. если записывать не быстрее - запись идет практически сразу на flash
Филоненко Владислав
05.03.2012, 10:09
Отвечаю на стертый вопрос:
"
Создана пользователем: Валенок
Дата создания: 24.02.2012 11:24
Извините - можно расширеннее про кэш.
Вроде как запись просходит в момент _работы_ sysfilewrite, т.е. она типа inline, в отличие от многих других функций.
"
Запись происходит в ОЗУ. Всегда. И затем в фоновом режиме ОЗУ синхронизируется с Flash. Синхронизация идет со скоростью ~30 кБайт в секунду. Если размер данных для синхронизации превышает ~32кБайта - то запись из неблокирующей переводится в режим блокирующей, т.е. возврат из функции записи произойдет после синхронизации данных.
P.S. был в командировке, поэтому задержка
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot