talbutdinov

Ответы в темах

Просмотр 15 сообщений - с 46 по 60 (из 70 всего)
  • Автор
    Записи
  • в ответ на: Работа с архивами значений #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);

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

    в ответ на: Работа с архивами значений #12604
    talbutdinov
    Участник

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

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

    в ответ на: Работа с архивами значений #12603
    talbutdinov
    Участник

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

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

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

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

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

    в ответ на: Работа с архивами значений #12593
    talbutdinov
    Участник

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

    в ответ на: Работа с архивами значений #12591
    talbutdinov
    Участник

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

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

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

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

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

    в ответ на: Работа с архивами значений #12584
    talbutdinov
    Участник

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

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

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

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

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

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

    в ответ на: Работа с архивами значений #12578
    talbutdinov
    Участник

    Кому надо будет, то из Logic вытащить пользовательские параметры линии вот так

    lgn = CustomParams.GetStringParam("login", false, "Пользователь не определен");
    pass = CustomParams.GetStringParam("password", false, "Пароль не определен");
    в ответ на: Работа с архивами значений #12577
    talbutdinov
    Участник

    1. Вы имеете ввиду Адрес LORA сервера, куда должен обращаться драйвер ?
    Вроде его надо указывать в поле «Позывной»

    В позывном я указываю ИД устройства с которого конкретный экземпляр КП тащит архив данных, а вот адрес и порт я как раз хочу хранить в линии, чтобы к ним был доступ. К пользовательским данным линии во View есть доступ через kpProps.CustomParams.Values[0], однако в Logic нет напрямую доступа, как получить, разбираюсь.

    С формами уже разбираюсь по примерам, процесс идет.

    в ответ на: Работа с архивами значений #12574
    talbutdinov
    Участник

    В целом логика работы и получения данных с сервера Веги работает и драйвер записывает данные в архив. Прошу понять, что я с VS на вы, так как до этого было Delphi, PHP, PL/SQL. Именно по этому прошу помочь разобраться с классами Rapid, так как описания нет особого и разбираться очень тяжело, а для завершения драйвера нужно следующее:
    1. Вытащить внутри драйвера адрес сервера, который указан внутри выбранной для драйвера линии, там же указан и порт. Это необходимо, чтобы драйвера понимали к какому именно серверу им подключаться.
    2. Вытащить внутри драйвера пользовательские переменные линии, там указан логин и пароль, чтобы не указывать их в каждом КП.
    3. Внутри драйвера по текущему КП вытащить датувремя последней архивной записи, чтобы понимать с какой даты начинать следующую загрузку.
    4. Внутри драйвера по текущему КП проверить есть ли в архиве запись на указанную датавремя.

    Если с окном свойств КП разберусь, то это все, что мне потребуется для завершения драйвера и будет + 1 драйвер в копилку, точнее два, так как сразу за ним еще один для Веги будет.

    в ответ на: Работа с архивами значений #12569
    talbutdinov
    Участник

    Все! Вот теперь нормально все! Теперь осталось разобраться с архивом, как получать последнюю дату записи в архив и проверить наличие записи на указанную ДатуВремя в архиве.

    в ответ на: Работа с архивами значений #12563
    talbutdinov
    Участник

    Как-то можно определить имеется ли в архиве запись на определенный момент времени? Также нужно определять крайнее время на которое имеются данные в архиве. Загрузка данных по LoRaWAN идет из архива и туда тоже надо передавать запрос с отметкой времени.

    в ответ на: Работа с архивами значений #12562
    talbutdinov
    Участник

    Да, строка в формате String и должна быть разбита на переменные

    в ответ на: Работа с архивами значений #12553
    talbutdinov
    Участник

    все данные в шестнадцатеричном формате. На php это выглядело так:
    1. задается формат строки $si11format='ctype/cbat/hnastr/ltime/ctemp/l4input', где первая буква указывает на тип, который уже понимает сколько он байт и далее название переменной, в которую поместить уже готовое значение конвертированное из шестнадцатеричного значения.
    2. А потом просто говоришь разбери мне строку $si11data=unpack($si11format,$row['data']) и дальше обращаешься к переменной, в которой готовое значение.

    А в VS подобного нет. Я посмотрю в классе …

    в ответ на: Работа с архивами значений #12548
    talbutdinov
    Участник

    Может подскажите, как правильно разложить строку на данные: 0157038077145d1a94a41e00000000000000000000000000

    Это пакет с данными из архива Веги, в котором:
    1 байт — Тип пакета, для данного пакета == 1
    1 байт — Заряд батареи, %
    1 байт — Значения основных настроек (битовое поле)
    4 байта — Время снятия показаний, передаваемых в данном пакете (unixtime UTC)
    1 байт — Температура, ⁰С
    4 байта — Показания на входе 1 (в зависимости от типа — число импульсов, либо состояние 0 – разомкнут, 1 — замкнут)
    4 байта — Показания на входе 2 (в зависимости от типа — число импульсов, либо состояние 0 – разомкнут, 1 — замкнут)
    4 байта — Показания на входе 3 (в зависимости от типа — число импульсов, либо состояние 0 – разомкнут, 1 — замкнут)
    4 байта — Показания на входе 4 (в зависимости от типа — число импульсов, либо состояние 0 – разомкнут, 1 – замкнут)

    На php это делается элементарно, но вот на VS уже все просмотрел, ранее на ней не писал, по этому сложновато.

    В целом данные я уже получаю, осталось их «разложить» и записать в архив.

    в ответ на: Работа с архивами значений #12428
    talbutdinov
    Участник

    Используйте класс CommUtils для извлечени host и port

    Нашел CommUtils.ExtractHostAndPort, но нет описания по входящим параметрам. Два последних я так понял возвращают адрес и порт, а вот какие первых два параметра входных не ясно, если порт по умолчанию еще догадываюсь, а вот что передавать первым параметром?

Просмотр 15 сообщений - с 46 по 60 (из 70 всего)