Стартовая страница › Форумы › Разработка и интеграция › Работа с архивами значений
- В этой теме 47 ответов, 4 участника, последнее обновление 7 лет, 1 месяц назад сделано
talbutdinov.
-
АвторЗаписи
-
28.06.2019 в 20:48 #12582
Romiros
УчастникКоммуникатор не хранит этой информации. Поэтому при выкачивании архива, Вы должны сами сохранить эту информацию в файл. Я могу прислать пример.
А можно мне тоже выслать пример? Посмотреть, как это делается профессионально.29.06.2019 в 10:14 #12584talbutdinov
УчастникНасколько я понял, вопросы 1 и 2 выяснили.
По поводу адреса сервера я вытащил его через
hst = Connection.RemoteAddress;, порт пока не могу найти, а черезCustomParams.GetStringParam("TcpPort", false, "8003");он его не видит.Коммуникатор не хранит этой информации. Поэтому при выкачивании архива, Вы должны сами сохранить эту информацию в файл. Я могу прислать пример.
Был бы очень признательным.
Есть возможность из драйвера подключиться к Серверу, но в данном случае это будет не правильный подход.
Почему? Проблема работы с сервером Веги заключается в том, что устройство не получив ответа от сервера по различным причинам отправит несколько одинаковых пакетов и сервер их примет. Соответственно драйвер тоже их получит и запишет несколько одинаковых срезов на одну и ту же дату.
29.06.2019 в 12:07 #12585Romiros
УчастникВ CustomParams его нет. Там содержатся пользовательские параметры, которые добавляются при настройке линии связи. Можете их использовать для хранения нужных параметров и обращаться из драйвера.
Есть возможность из драйвера подключиться к Серверу, но в данном случае это будет не правильный подход.
Здесь имеется ввиду, что можно из драйвера обратиться к серверу RapidScada и получить архив, чтобы узнать какая архивная запись была последней. Но лучше хранить данную информацию в файле.
30.06.2019 в 11:49 #12587
MikhailМодераторПример: драйвер ВКТ7
Драйвер довольно старый, сейчас бы я сохранил запрашиваемые даты архивов в XML.30.06.2019 в 11:51 #12588
MikhailМодераторtalbutdinov, если Вы пришлёте скриншоты настроек Коммуникатора, то будет понятнее, какие параметры откуда вытащить.
01.07.2019 в 08:46 #12591talbutdinov
УчастникЯ взял за основу файл конфигурации одного из существующих драйверов и туда сохраняю, как настройку экземпляра самого КП, так и дату последнего обновления, которая тоже доступна через окно настроек, если необходимо загрузить более ранние данные.
Я так понимаю, если в архив добавить данные на период, который уже существует, они будут перезаписаны?
В целом у меня данные загружаются с тестового оборудования, сегодня монтируем основное и делаем пилотник, отпишусь по результатам. Но есть один вопросик, данные загружаются с опозданием, т.е. показания на 9-00 могут загрузить в 9-30 как вариант и Rapid на 9-00 подставляет какое-то старое значение и помечает его черным цветом, зеленым я так понимаю актуальные полученные данные.
Так вот вопрос в том, почему он на текущие показания берет старые данные, а не последние загруженные, так как последние загруженные данные больше по значению, чем он берет. После того, как он подгрузит данные за 9 часов, цифры меняются, в 9-00 значения меняются и становятся зелеными и текущие тоже меняются. Откуда берутся эти показания, почему они не берутся последние?
01.07.2019 в 16:43 #12593talbutdinov
УчастникЕще кстати заметил, что при удалении экземпляра КП, его файл конфигурации сохраняется, и когда создаешь КП такого же драйвера и с таким же номером, то подтягивается старый файл конфигурации от предыдущего экземпляра КП.
01.07.2019 в 20:14 #12596
MikhailМодераторпри удалении экземпляра КП, его файл конфигурации сохраняется, и когда создаешь КП такого же драйвера и с таким же номером, то подтягивается старый файл конфигурации от предыдущего экземпляра КП
Да, это так.
01.07.2019 в 20:16 #12597
MikhailМодераторСкорее всего, Ваш драйвер возвращает текущие данные. Они записываются в текущий срез (черные). Когда на скриншоте наступило 9:00 эти текущие данные записались в часовой срез с меткой времени 9:00 (черные). А если потом драйвер передаст значения с меткой 9:00 не как текущие, а как архивные, то эти значения будут записаны поверх со статусом Архивный (зеленые).
01.07.2019 в 20:18 #12598
MikhailМодераторНа странице данных драйвера отображается, какие архивы он сформировал и передал.
02.07.2019 в 09:24 #12603talbutdinov
УчастникУже на финишной примой прототипа. Два типа устройства уже загружают данные и отображают в часовом разрезе, в целом картина получается хорошая. Однако видимо я где-то нарушил логику создания КП и не могу понять где. Речь идет о количестве каналов и их описании. На каком этапе это все формируется и может ли изменяться в последствии. Смысл в том, что у меня драйвер обрабатывает по плану несколько типов устройств, все одинаково, разница только в том, что строка с данными в виде пакета имеет разные форматы и количество входных каналов.
Логика такая:
1. Создается КП, указываются основные его параметры все как полагается.
2. Он автоматом добавляется в Коммуникатор.
3. В свойствах КП коммуникатора настраиваем все необходимое, в том числе и тип опрашиваемого устройства, от этого зависит количество входных каналов.
4. Создаем каналы, их количество и описание отлично совпадает с тем, что выбрано в свойствах драйвера.
5. Загружаем все на сервер.Проблема заключается в том, что два первых устройства имеют количество каналов 6 и 4 соответственно. Первый тип устройства помечен как по умолчанию. Третий тип имеет 13 входных каналов.
В итоге в базе конфигурации у 3-го типа устройства 13 каналов отображается, а в коммуникаторе отображается список каналов типа устройства по умолчанию. У всех типов устройств отображается список каналов по умолчанию. Соответственно, когда пытаюсь сделать запись 13 параметров в тип который определил всего 6, у меня выходит ошибка, что пытаешься впихнуть невпихуемое.
Куда смотреть, где копать? У меня если честно уже глаз замылился, а уже вот вот все сложится (
02.07.2019 в 13:07 #12604talbutdinov
УчастникКуда смотреть, где копать? У меня если честно уже глаз замылился, а уже вот вот все сложится (
Сам разобрался )
У меня каналы Logic прописывались единожды при создании КП. Перенес их описание в событие при подключении КП к линии и все стало на свои места.02.07.2019 в 13:16 #12605talbutdinov
УчастникСкорее всего, Ваш драйвер возвращает текущие данные. Они записываются в текущий срез (черные). Когда на скриншоте наступило 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);Может я что-то не так делаю? Мне вместо текущего показания по сути нужно отображать последнюю запись в архиве. Архив я формирую как часовые срезы.
02.07.2019 в 16:38 #12606talbutdinov
УчастникВообще не совсем понятна логика отображения текущего значения, так как в текущем значении отображается значение, которое было на 15:00.
https://yadi.sk/i/tq9ykoZdkZeVUg
https://yadi.sk/i/hGflFw_Y1MbHpw-
Ответ изменён 7 лет, 1 месяц назад пользователем
talbutdinov.
02.07.2019 в 18:49 #12609Romiros
УчастникЕсли у вас нет текущих показаний, может их и не передавать на сервер? Пишите чисто архивы.
А так то значение, которое вы отправили через SetCurData последним и будет отображаться как текущее. -
Ответ изменён 7 лет, 1 месяц назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.