Чтение из нескольких архивных файлов

Стартовая страница Форумы Разработка и интеграция Чтение из нескольких архивных файлов

Просмотр 12 сообщений - с 1 по 12 (из 12 всего)
  • Автор
    Сообщения
  • #17302
    vg
    Участник

    Здравствуйте!

    В примере на сайте rapidscada.ru показана следующая возможность:

    using Scada.Data;
    ...
    SrezTableLight snapshotTable = new SrezTableLight();
    SrezAdapter adapter = new SrezAdapter();
    adapter.FileName = @"C:\SCADA\ArchiveDAT\Cur\current.dat";
    adapter.Fill(snapshotTable);

    Но, наверняка должен быть способ как считать за один заход данные по нескольким дням (то есть несколько файлов) и поместить это всё в одну таблицу SrezTableLight? То есть, например старт от 23.09.2020 15:28:00, а финиш 28.09.2020 13:47:00.

    Пока что я вижу только следующий вариант:
    Определить по диапазону нужные архивные файлы, считать каждый файл в новый экземпляр SrezTableLight и добавить методом AddSrez() к первому экземпляру SrezTableLight циклами остальные данные из других экземпляров.

    Возможно существует более простой способ, который я не вижу.

    #17303
    vg
    Участник

    P.S.

    А если можно сразу считать срезы по конкретным входным каналам, то это будет просто фантастика.

    #17308
    Mikhail
    Модератор

    Добрый день!

    Опишите, пожалуйста, задачу в целом.
    Внутри серверного модуля доступна переменная ServerData, которая содержит методы для считывания данных из архива по конкретным каналам.

    > за один заход данные по нескольким дням
    В текущей версии — пробежаться в цикле по датам. В 6-й версии будет одна команда для выбора конкретных каналов за произвольный период.

    #17309
    Mikhail
    Модератор

    Если интересно посмотреть, как будет, то ссылка.
    А сейчас так.

    #17323
    vg
    Участник

    В целом задача выглядит следующим образом:

    По нажатию на графический элемент в веб-интерфейсе SCADA-системы сформировать отчёт в файле Word, в котором будут отображаться архивные данные в виде таблиц и графиков.

    По сути я уже все данные достал, но реализация кривая(на мой взгляд), как моя жизнь, из-за большого количества костылей. Костыли эти у меня получились в виду того, что я не понял как считать только то, что мне нужно в приложении и соответственно считываю в данный момент весь архив за нужный период. Затем с помощью метода AddSrez() «соединяю» все экземпляры SrezTableLight и получаю «общую» таблицу. После этого перебираю всю эту большую таблицу для извлечения нужных мне данных и сохраняю только данные по необходимым каналам.

    Основная сложность для меня представляется в определении данных по номеру канала, так как весь итоговый SrezTableLight я оставлять не хочу, так как он слишком громоздкий, а в новой структуре (я записываю в List<List<List<object>>> :)) номер канала записываю в нижнем List`е и в итоге получается много ненужных операций при извлечении данных. Я понимаю, что алгоритм плохой, но по другому не придумал.

    Мы с Вами уже обсуждали ранее некоторые моменты и Вы рекомендовали делать это отдельным приложением, а не модулем (из-за требований к безопасности модуля, если не ошибаюсь).

    #17325
    vg
    Участник

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

    #17327
    Mikhail
    Модератор

    Приложение для формирование отчётов — это скорее должен быть клиент, который подключается к SCADA-Серверу и получает от него данные по протоколу TCP. Модуль здесь не подходит по смыслу. Прямой доступ к файлам базы и архивов технически возможен, но архитектурно не красив.

    #17329
    vg
    Участник

    Благодарю за ответ. Подскажите пожалуйста что почитать, куда посмотреть для разработки такого клиента?

    #17332
    a80808
    Участник

    А вариант экспорта во внешнюю БД + какой то штатный генератор отчетов типа BI или Crystal?

    #17335
    Mikhail
    Модератор

    Подскажите пожалуйста что почитать, куда посмотреть для разработки такого клиента?

    Существующие клиенты — это Вебстанция и Коммуникатор. Найдите в их коде использование класса ServerComm.

    А вариант экспорта во внешнюю БД + какой то штатный генератор отчетов типа BI или Crystal?

    Тоже вариант, достойный рассмотрения. Наверное, потребуется экспортировать не только архив, но и базу конфигурации.

    #17336
    Mikhail
    Модератор
    #17344
    vg
    Участник

    Большое спасибо за ответы.

Просмотр 12 сообщений - с 1 по 12 (из 12 всего)
  • Вы должны авторизироваться для ответа в этой теме.