Страница 7 из 8 ПерваяПервая ... 5678 ПоследняяПоследняя
Показано с 61 по 70 из 74

Тема: архивирование на спк207

  1. #61
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,255

    По умолчанию

    достаточно того, что функция записи возвращает результат отсутствие ошибок и если будет стоять любая ЖФС. Дополнительно в качестве повышения надежности желательно размонтировать флешку перед её изъятием
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  2. #62

    По умолчанию

    В проекте для чтения в файл использую библиотеку CAA_File. Основываюсь на примерах встроенной справки CoDeSys 3.5 и примере Мурата http://www.owen.ru/forum/showthread....l=1#post138038, именно эта тема мне во многом помогла.
    Выкладываю часть своего проекта - оставил только то, что относится к чтению файла архива данных (добавил только в визуализацию таблицу данных, т.к. массив данных храню только в памяти). Может кому поможет в освоении CoDeSys 3 и библиотеки CAA_File.

    Краткое описание:
    Чтение массива (1000 строк) структуры (6 столбцов) из файла D:/articles_arhiv.csv. (Для устройства Control Win V3)
    Структура: (archive_param)
    1-й элемент (article) - тип STRING(17);
    2-й элемент (inv_number) - тип UINT(0..9999);
    3-й элемент (t1) - тип TIME;
    4-й элемент (t1) - тип TIME;
    5-й элемент (t1) - тип TIME;
    6-й элемент (skip) - тип USINT;
    Величина архива (количество строк) задаётся глобальной переменной ia_max.
    Величину массива байт необходимо задать переменной ib_max ориентируясь на максимальное количество символов во всех элементах структуры.
    Путь считывания файла (чтение с USB, SD-карты или диска D) можно выбрать в объявлении переменной filename_arhchive, закомментировав соответствующие строки.
    Функцию преобразования из кодов ASCII в символы составил сам по своим нуждам, при желании можно дополнить или изменить.

    После чтения файла выдается информация:
    1. Ошибка чтения (при отсутствии файла).
    2. Пустой файл (чтение не происходит).
    3. Успешное чтение файла.

    Проект содержит комментарии и может быть переписан для чтения любого файла с данными.

    Буду признателен, если есть замечания или предложения оптимизации проекта.
    Вложения Вложения

  3. #63

    По умолчанию

    Цитата Сообщение от Мурат Ахриев Посмотреть сообщение
    var
    string_line: string[255];
    array1 [0..10] of byte;
    FileOpen : File.Open;
    FileRead: File.Read;
    Setpos :File.SetPos;
    end_var

    Для начала считываете в массив байтов

    FileRead(xExecute:= TRUE, hFile:= ........., pBuffer:= ADR(array1), szBuffer:=..........)

    Затем анализируете массив, ищите начало и конец нужной строки

    Далее

    Setpos(.........)

    Далее считываете уже нужную строку

    FileRead(xExecute:= TRUE, hFile:= ........., pBuffer:= ADR(string_line), szBuffer:=..........)
    Здравствуйте!
    Объясните мне, пожалуйста, что значит:"Затем анализируете массив, ищите начало и конец нужной строки."
    У меня есть файл размер которого будет постоянно увеличиваться. Мне необходимо в итоговую таблицу выводить данные, которые требуется найти по двум параметрам: дата и название.
    примеры просмотрены не один раз. Но никак не могу придумать как их использовать применимо к моей ситуации.

  4. #64

    По умолчанию

    1. Для измерения размера файла можно воспользоваться FILE.GetSize. Получаете количество байт в файле (file_size).
    2. Считываете в массив байт. Получаете aDataArea: ARREY [0..bmax] of BYTE, где bmax = file_size-1.
    3. Перебирая в aDataArea[0..bmax] индекс b от 0 до bmax, можно анализировать массив байт. Код 59 соответствует двоеточию, код 13 - концу строки (далее за ним 10 - перенос строки).

    Можно, конечно, далее воспользоваться FILE.SetPoz и далее FILE.Read(чтение строки). Но это опять каждый раз доступ к внешней SD или USB-flash, при большом объёме информации займет много времени (проверено).

    Я делаю так: анализируя aDataArea[0..bmax] как указано выше, преобразую данные в массив структур aArchive: ARREY[1..imax] OF struct_archive, сохраняемом в оперативной памяти. Скорость выборки будет намного выше и отсутствует работа с внешним накопителем.
    Далее по столбцам, например aArchive[i].data и aArchive[i].nazvanie, ищем нужную строку i. И выводим из строки i найденные данные.

  5. #65

    По умолчанию

    Спасибо.Попробую воспользоваться вашим примером.

  6. #66

    По умолчанию

    vniko, во-первых,спасибо Вам большое за пример. Очень упростил мне работу.
    Правда, обнаружились некоторые но...
    Размер файла,который создается заранее неизвестен,соответственно прописываю ia_max := 40000 - максимально возможное значение.Но при чтении файла в массив данных,ФБ FILE.Read выдает и .xDone = true и .xError=true, .eError = 1.
    Описание этой ошибки нет. Но при этом данные считываются.
    Понятно,что можно легко обойти её, но все же хотелось знать, что означает данная ошибка.
    Последний раз редактировалось distren; 18.05.2017 в 13:51.

  7. #67
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,255

    По умолчанию

    не пробовали возложить работу по поиску строки в непонятно_каком_изначально_размере_файла на линукс, всякие cat grep и > делают чудеса, а вместо тяжеловесой бибки CAA File использовать sysexecute
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #68

    По умолчанию

    Признаюсь даже и мысли не было.Спасибо, буду пробовать.

  9. #69

    По умолчанию

    Может вы мне сможете подсказать.
    Нужно, чтобы данные в файл записывались в течении 3 месяцев, по истечению срока, данные перезаписывались в тот же файл, не затирая предыдущие записи выше.
    Пример, были данные: 1,2,3,4,5.Прошло 3 месяца, началась перезапись 6,7,3,4,5->cледующий день 6,7,8,4,5
    Данные записываются с помощью CAA File.

  10. #70
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,255

    По умолчанию

    а почему не подходит удаление самой древней строки а новую как обычно в конец файла
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Страница 7 из 8 ПерваяПервая ... 5678 ПоследняяПоследняя

Похожие темы

  1. Архивирование данных
    от klg в разделе Master SCADA 3
    Ответов: 34
    Последнее сообщение: 27.10.2014, 17:22
  2. Архивирование журналов
    от Columbariy в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 14.09.2012, 18:49
  3. Архивирование на ПЛК
    от Руслан2 в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 07.05.2012, 14:33
  4. архивирование на Usb-флешке
    от Лёша в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 08.06.2009, 17:39

Ваши права

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