PDA

Просмотр полной версии : Как архивировать таблицу и потом её считать на визуализации???



kukindoctor
06.11.2019, 14:38
Добрый день,не могу решить одну задачу. Есть таблица в которую при получении сигнала вводятся четыре переменных типа INT с меткой времени (5 столбцов) , как данные с этой таблицы архивировать на SD карту , а потом в нужный момент (например нажатием кнопки после пропадания электроэнергии ) восстановить эти значения в таблице на визуализации ,строк может быть до 400т например. Прошу объяснить по понятней так как я начинающий ,а ещё лучше с примером.
Или если я буду сохранять массив для этой таблицы как RETAIN хватит ли мне памяти (30Кб) если будет около 400т строк в массиве?

Евгений Кислов
06.11.2019, 18:36
Добрый день.
В вашем случае каждая строка таблица занимает 12 байт (4*2 + 1*4), то есть 400 строк = 4800 байт.
Это меньше 10% энергонезависимой памяти СПК (ее размер - 64 Кб).

С другой стороны, отображение данных в таблице в виде DT и INT может быть не очень удобно - потому что "пустые" строки будут заполнены нулевыми значениями
(примерно так: DT#1970-01-01-00:00:00 | 0 | 0 | 0 | 0). Поэтому обычно сначала переменные приводят к строковому виду и уже после этого их отображают в таблице (тогда пустые строки будут отображаться именно как пустые) - но и места строковые переменные занимают значительно больше.

Принцип работы с файлами (чтение/запись) описан здесь:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Archives_v2.0.pdf

kukindoctor
08.11.2019, 14:03
Если я правильно посчитал то после перевода переменных к строковому виду то это займёт приблизительно 8000 Байт ?

Евгений Кислов
08.11.2019, 14:06
Если я правильно посчитал то после перевода переменных к строковому виду то это займёт приблизительно 8000 Байт ?

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

kukindoctor
11.11.2019, 16:44
Понял, спасибо!

Mr_Andrson
17.12.2020, 13:29
Евгений, приветствую!

Столкнулся с похожей задачей!
Есть станция по проведению испытаний тормозной системы вагона. В исходных данных мы указываем ФИО и №вагона. После проведения испытания все необходимые параметры архивируются и записываются в sd-карту СПК107.

Задача состоит в том, чтобы по двум параметрам ФИО и №вагона подгружать в Табличку с результатами испытаний из sd-карты.
Вопрос - есть ли в codesys 3.5 инструменты для поиска в отчетах?

Евгений Кислов
17.12.2020, 13:33
Евгений, приветствую!

Столкнулся с похожей задачей!
Есть станция по проведению испытаний тормозной системы вагона. В исходных данных мы указываем ФИО и №вагона. После проведения испытания все необходимые параметры архивируются и записываются в sd-карту СПК107.

Задача состоит в том, чтобы по двум параметрам ФИО и №вагона подгружать в Табличку с результатами испытаний из sd-карты.
Вопрос - есть ли в codesys 3.5 инструменты для поиска в отчетах?

Добрый день.
Функции для работы со строками есть в библиотеках OwenStringUtils и StringUtils.

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

Mr_Andrson
17.12.2020, 13:48
Добрый день.
Функции для работы со строками есть в библиотеках OwenStringUtils и StringUtils.

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

Окей, если мы сохраняем отдельный отчет в отдельный файл, то нам ведь все равно потребуется поиск по файлу с нужной ФИО и №вагона, так ведь?

Евгений Кислов
17.12.2020, 14:35
Окей, если мы сохраняем отдельный отчет в отдельный файл, то нам ведь все равно потребуется поиск по файлу с нужной ФИО и №вагона, так ведь?

Можно сохранять ФИО и номер в имени файла:

AAA_666.txt (Андрей Андреевич Андреев, вагон 666)

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

Mr_Andrson
17.12.2020, 14:48
Точно! Спасибо большое за помощь!)

Raikkonen
29.12.2020, 15:39
Добрый день! у меня очень схожая ситуация с проверкой тормозов у вагонов.
Проверка предметов, с набором данных, приблизительно, 5 INT , 2 REAL , дата и время теста, 2 BOOL
Так же необходим поиск/выборка по одному из значений в архивных данных.
Планировал использовать ОвенАрхивер, а затем при помощи САА написать алгоритм поочередного открытия файлов и поиск по их содержимому с дальнейшим выводом на экран найденного.

Проверок будет производиться не более 20 в день.

Какое на ваш взгляд будет более простое / правильное / быстродействующее решение ?

Евгений Кислов
29.12.2020, 16:27
Добрый день.


Проверок будет производиться не более 20 в день.

А какая глубина архива нужна? Месяц, три месяца, полгода, год?

Raikkonen
29.12.2020, 17:57
не обсуждалось, думаю что два года хватит, так сказать из адекватных соображений.
Так же выгрузка нужна будет, я думаю..... пожалуй это сильно сузит варианты

Евгений Кислов
29.12.2020, 18:41
не обсуждалось, думаю что два года хватит, так сказать из адекватных соображений.
Так же выгрузка нужна будет, я думаю..... пожалуй это сильно сузит варианты

Каким образом должна происходить выгрузка?

Raikkonen
30.12.2020, 10:52
на ЮСБ флешку, или на СД, роли не играет. Желательно CSV.

Евгений Кислов
30.12.2020, 11:03
на ЮСБ флешку, или на СД, роли не играет. Желательно CSV.

Я понял. По-моему, вам проще вести два архива - текстовый для записи на накопитель (его можно организовать через OwenArchiver, как вы и планировали) и бинарный для последующего вычитывания и отображения в визуализации (через библиотеку CAA File). В бинарном будет проще организовать поиск.

Raikkonen
30.12.2020, 11:49
Спасибо! Меня посещала мысль вести два архива, но второй в ретейн массиве. Пожалуй начну реализацию с вашей идеи.