Показано с 1 по 3 из 3

Тема: ArchivatorOwenLib - ограничения при записи в файл

  1. #1

    По умолчанию ArchivatorOwenLib - ограничения при записи в файл

    Коллеги прошу помощи. Не могу понять как библиотека ArchivatorOwenLib ведет запись на диск.
    Задача записывать в файл по нажатию кнопки или событию
    массив 6 параметров (в строку) на 500.
    По кнопке все пишется исправно. За один заход 1 строка или
    если организовать цикл FOR, то можно по нажатию кнопки
    за раз стабильно 10 строк записать, на 20 строках уже
    вешается виртуальный контроллер (как будет реальная панель
    себя вести не знаю).
    Поэтому пришлось сделать цикл через IF с использованием таймера - каждую секунду по 10 строк, НО!!!
    Если я 50 раз нажму кнопку, то все супер, запись идет великолепно.
    Если в цикле, то записывается только первые 10 строк т.е первый проход, далее цикл работает, но запись на диск не идет.
    Поставил точки останова, посмотрел пошагово, все ОК цикл работает правильно, запись не идет.

    Кусок кода. Run_write AND R_Pause.Q каждую секунду запускают цикл FOR, в нем записываю 10 строк, выход и через секунду снова.
    Код:
    R_EnableWriteArchiv(CLK := V_G_EnableWriteArchiv); //Запуск по кнопке
    R_Pause(CLK := PLC_PRG.FB_Blink_1s.OUT);           //Запуск по таймеру 1сек
    IF R_EnableWriteArchiv.Q THEN Run_write := TRUE; END_IF
    
    IF Run_write AND R_Pause.Q THEN
    		FOR i := 1+x TO 10+x BY 1 DO
    			//Get data for archive
    			FB_GetData.SetHead();
    			FB_GetData(
    				Name:= 'N', 
    				Tip:= 4, 
    				Znachenie:= ADR(ST_G_Tablo_Full[i].DegaN_Time), 
    				ErrCode=> , 
    				StrOut=> , 
    				StrOutHead=> );
    			... ... ...	
    			FB_GetData(
    				Name:= 'Error', 
    				Tip:= 4, 
    				Znachenie:= ADR(ST_G_Tablo_Full[i].DegaN_Error), 
    				ErrCode=> , 
    				StrOut=> , 
    				StrOutHead=> );
    			//Write data to disc
    			FB_WriteData(
    				Enable:= R_EnableWriteArchiv.Q, 
    				ArcPnt:= ADR(FB_GetData), 
    				NameArc:= 'arhiv', 
    				Path:= 'C:\', (*'/var/log/',*) 
    				Mode:= 0, 
    				ErrCode=> );	
    		END_FOR	
    		IF x >= V_GC_ArchivMaxN-10 THEN 
    			x := 0;
    			Run_write := FALSE;
    		ELSE
    			x := x + 10;
    		END_IF
    END_IF
    Функциональный блок Arhiv_To_Flash.
    Вложения Вложения

  2. #2

    По умолчанию

    Коллеги ура, мы его победили
    Камень преткновения вход WriteData(Enable), его надо сбрасывать после записи. Я бы его назвал Start, а не Enable т.к по фронту на входе происходит запись, а не при вызове разрешенного к записи блока.
    Разработчики укажите это пожалуйста в хелпе.
    Как итог массив 6х500 string переменных записывается по 10 строк, в каждой 6 переменных за один цикл. При записи более 20 строк виртуальный контроллер зависает. При экспериментах от 20 до 50 строк получалось записывать в цикле, я выбрал 10 для стабильности. Правда пока на виртуальном контроллере, как на реальной панельке не знаю.

    Соответственно вопрос к разработчикам, если есть здесь конкретный специалист который эту библиотеку разрабатывает:
    а. Каковы ограничения при записи? Можно ли увеличить количество данных записываемых за цикл. Может можно оптимизировав типы данных в плане уменьшения размера можно увеличить количество строк записываемых за раз в файл или есть другие тонкости.
    б. Возможно ли изменить вариант выходного формата - приблизить его к CSV. Заменить #000=, #001= на точку с запятой или ту же решетку. С точкой-запятой получим практически готовый CSV. Если будет просто решетка то в Эксель есть импорт где символ разделителя (должен быть именно 1 символ) можно указать. Решетка не удобна т.к в тексте может быть формат времени T#1S например, точка с запятой тоже может встречаться. Самый лучший вариант это добавить вход для блока где можно указывать символ разделителя, если не указан, то создавать файл как есть сейчас например.

    В целом библиотека работает, за что разработчикам отдельное спасибо

  3. #3

    По умолчанию

    Поддерживаю alexmaemur. Использовал библиотеку ArchivatorOwenLib. Есть необходимость увеличить длину строки больше 255 байт. И приблизить Файл к CSV было-бы здорово.

Похожие темы

  1. Ответов: 28
    Последнее сообщение: 18.08.2015, 20:39
  2. Ограничения файловой системы ПЛК?
    от Дмитрий Артюховский в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 26.01.2009, 21:22
  3. Ответов: 2
    Последнее сообщение: 16.01.2008, 09:41
  4. Ограничения по количеству переменных в MODBUS
    от Павел ГОН в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 24.04.2007, 11:53

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •