Работа с архивами значений

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

Просмотр 15 сообщений - с 31 по 45 (из 48 всего)
  • Автор
    Записи
  • #12582
    Romiros
    Участник

    Коммуникатор не хранит этой информации. Поэтому при выкачивании архива, Вы должны сами сохранить эту информацию в файл. Я могу прислать пример.
    А можно мне тоже выслать пример? Посмотреть, как это делается профессионально.

    #12584
    talbutdinov
    Участник

    Насколько я понял, вопросы 1 и 2 выяснили.

    По поводу адреса сервера я вытащил его через hst = Connection.RemoteAddress;, порт пока не могу найти, а через CustomParams.GetStringParam("TcpPort", false, "8003"); он его не видит.

    Коммуникатор не хранит этой информации. Поэтому при выкачивании архива, Вы должны сами сохранить эту информацию в файл. Я могу прислать пример.

    Был бы очень признательным.

    Есть возможность из драйвера подключиться к Серверу, но в данном случае это будет не правильный подход.

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

    #12585
    Romiros
    Участник

    В CustomParams его нет. Там содержатся пользовательские параметры, которые добавляются при настройке линии связи. Можете их использовать для хранения нужных параметров и обращаться из драйвера.

    Есть возможность из драйвера подключиться к Серверу, но в данном случае это будет не правильный подход.

    Здесь имеется ввиду, что можно из драйвера обратиться к серверу RapidScada и получить архив, чтобы узнать какая архивная запись была последней. Но лучше хранить данную информацию в файле.

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

    Пример: драйвер ВКТ7
    Драйвер довольно старый, сейчас бы я сохранил запрашиваемые даты архивов в XML.

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

    talbutdinov, если Вы пришлёте скриншоты настроек Коммуникатора, то будет понятнее, какие параметры откуда вытащить.

    #12591
    talbutdinov
    Участник

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

    Я так понимаю, если в архив добавить данные на период, который уже существует, они будут перезаписаны?

    В целом у меня данные загружаются с тестового оборудования, сегодня монтируем основное и делаем пилотник, отпишусь по результатам. Но есть один вопросик, данные загружаются с опозданием, т.е. показания на 9-00 могут загрузить в 9-30 как вариант и Rapid на 9-00 подставляет какое-то старое значение и помечает его черным цветом, зеленым я так понимаю актуальные полученные данные.

    Так вот вопрос в том, почему он на текущие показания берет старые данные, а не последние загруженные, так как последние загруженные данные больше по значению, чем он берет. После того, как он подгрузит данные за 9 часов, цифры меняются, в 9-00 значения меняются и становятся зелеными и текущие тоже меняются. Откуда берутся эти показания, почему они не берутся последние?

    https://yadi.sk/i/4VQKrNsbEqE0cQ

    #12593
    talbutdinov
    Участник

    Еще кстати заметил, что при удалении экземпляра КП, его файл конфигурации сохраняется, и когда создаешь КП такого же драйвера и с таким же номером, то подтягивается старый файл конфигурации от предыдущего экземпляра КП.

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

    при удалении экземпляра КП, его файл конфигурации сохраняется, и когда создаешь КП такого же драйвера и с таким же номером, то подтягивается старый файл конфигурации от предыдущего экземпляра КП

    Да, это так.

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

    Скорее всего, Ваш драйвер возвращает текущие данные. Они записываются в текущий срез (черные). Когда на скриншоте наступило 9:00 эти текущие данные записались в часовой срез с меткой времени 9:00 (черные). А если потом драйвер передаст значения с меткой 9:00 не как текущие, а как архивные, то эти значения будут записаны поверх со статусом Архивный (зеленые).

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

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

    #12603
    talbutdinov
    Участник

    Уже на финишной примой прототипа. Два типа устройства уже загружают данные и отображают в часовом разрезе, в целом картина получается хорошая. Однако видимо я где-то нарушил логику создания КП и не могу понять где. Речь идет о количестве каналов и их описании. На каком этапе это все формируется и может ли изменяться в последствии. Смысл в том, что у меня драйвер обрабатывает по плану несколько типов устройств, все одинаково, разница только в том, что строка с данными в виде пакета имеет разные форматы и количество входных каналов.

    Логика такая:
    1. Создается КП, указываются основные его параметры все как полагается.
    2. Он автоматом добавляется в Коммуникатор.
    3. В свойствах КП коммуникатора настраиваем все необходимое, в том числе и тип опрашиваемого устройства, от этого зависит количество входных каналов.
    4. Создаем каналы, их количество и описание отлично совпадает с тем, что выбрано в свойствах драйвера.
    5. Загружаем все на сервер.

    Проблема заключается в том, что два первых устройства имеют количество каналов 6 и 4 соответственно. Первый тип устройства помечен как по умолчанию. Третий тип имеет 13 входных каналов.

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

    Куда смотреть, где копать? У меня если честно уже глаз замылился, а уже вот вот все сложится (

    #12604
    talbutdinov
    Участник

    Куда смотреть, где копать? У меня если честно уже глаз замылился, а уже вот вот все сложится (

    Сам разобрался )
    У меня каналы Logic прописывались единожды при создании КП. Перенес их описание в событие при подключении КП к линии и все стало на свои места.

    #12605
    talbutdinov
    Участник

    Скорее всего, Ваш драйвер возвращает текущие данные. Они записываются в текущий срез (черные). Когда на скриншоте наступило 9:00 эти текущие данные записались в часовой срез с меткой времени 9:00 (черные). А если потом драйвер передаст значения с меткой 9:00 не как текущие, а как архивные, то эти значения будут записаны поверх со статусом Архивный (зеленые).

    Не совсем понял текущие и архивные показания. У Веги по сути нет текущих показаний вообще, есть только архивные, которые я вытаскиваю из их сервера. Далее я записываю срез архива таким образом:

    si13 = new TagSrez(4);
                                            
    // убираем лишние минуты и секунды, чтобы был формат часы:00:00
    var seccol = unix.Minute * 60 + unix.Second;
    unix = unix.AddSeconds(seccol*-1);
    
    si13.DateTime = unix;
    
    si13.KPTags[0] = KPTags[0];
    SetCurData(0, kanal1, 1);
    si13.TagData[0] = curData[0];
    
    si13.KPTags[1] = KPTags[1];
    SetCurData(1, kanal2, 1);
    si13.TagData[1] = curData[1];
    
    // определяем количество дней до поверки
    kdtopv = (config.datepov - DateTime.Now).TotalDays;
    si13.KPTags[2] = KPTags[2];
    SetCurData(2, kdtopv, 1);
    si13.TagData[2] = curData[2];
    
    // отставание архива в часах
    otstov = (DateTime.Now - unix).TotalHours;
    si13.KPTags[3] = KPTags[3];
    SetCurData(3, otstov, 1);
    si13.TagData[3] = curData[3];
    
    si13.Descr = "Дата обновления " + DateTime.Now;
    AddArcSrez(si13);

    Может я что-то не так делаю? Мне вместо текущего показания по сути нужно отображать последнюю запись в архиве. Архив я формирую как часовые срезы.

    #12606
    talbutdinov
    Участник

    Вообще не совсем понятна логика отображения текущего значения, так как в текущем значении отображается значение, которое было на 15:00.

    https://yadi.sk/i/tq9ykoZdkZeVUg
    https://yadi.sk/i/hGflFw_Y1MbHpw

    • Ответ изменён 7 лет, 1 месяц назад пользователем talbutdinov.
    #12609
    Romiros
    Участник

    Если у вас нет текущих показаний, может их и не передавать на сервер? Пишите чисто архивы.
    А так то значение, которое вы отправили через SetCurData последним и будет отображаться как текущее.

Просмотр 15 сообщений - с 31 по 45 (из 48 всего)
  • Для ответа в этой теме необходимо авторизоваться.