Драйвер ODBC

Просмотр 9 сообщений - с 76 по 84 (из 84 всего)
  • Автор
    Сообщения
  • #26841
    JurasskPark
    Участник

    Во время написания кода понял одну вещь, что код правильный и не правильный одновременно.

    1. Использовать

    DeviceSlice deviceSlice = new DeviceSlice();

    для передачи значений и генерировать его для каждого тега — не правильно.
    Его нужно заполнять из массивом тегов и значений.
    Это понятно.

    2. У DeviceSlice можно использовать только одно время при передачи массива тегов и значений.
    То есть получается, чтобы функционально данные были истинными, то время у всех тегов должно быть одинаковое.
    Одинаковое время у нас только у часовых и суточных значений.
    Получается, что DeviceSlice (чтобы не положить систему как я =) ) лучше использовать с тегами, у которыми признак часовой или суточный.

    3. Если я из БД вытащил значение мгновенное, заменял на одно время Datetime.Now , положил в срез значения N тегов, где у каждого своё было время, то я по сути подменил данные. С другой стороны передача Мгновенных данных — тоже подменяет данные на те, когда отработал DrvDsScadaServer. )

    Какой можно сделать итог:
    1. Текущие показания передавать через DeviceData.Set
    2. Если в запросе исторические данные (часовые или суточные), время у всех должно быть одно, то нужно генерировать DeviceSlice с одним временем, массивом тегов и массивом значений. Иначе делая DeviceSlice под каждый тег… система умирает.
    3. Делать у списка тегов признак Исторический тег или Мгновенный (Текущий), тем самым можно выбрав значения, отправить все в DeviceData.Set или только мгновенные, а часовые\суточные в DeviceSlice.
    4. Мертвая зона.
    В DrvDsScadaServer есть условие проверки жизни данных dataLifetime

    // export the slice
    if (DateTime.UtcNow — queueItem.CreationTime > dataLifetime)

    Это хорошая штука. Потому что если в БД значение лохматого года или месяца, в текущие данные такую вещь передавать нельзя, иначе никогда не поймешь, что оно умерло. Да… прямой тренд — это показатель… но всё же…

    #26842
    JurasskPark
    Участник

    https://forum.rapidscada.ru/?topic=расшифровка-статуса-каналов

    Хм… Мне кажется я теперь понял, ответ на свой вопрос почему Статус = 4.
    Я говорю DrvDsScadaServer вот тебе данные из БД… А он такой… че за старье… у них время больше текущего. Вот им признак Исторических и поставлю им 4. )

    • Этот ответ был изменен 1 год, 3 месяца назад от JurasskPark.
    #26863
    Mikhail
    Модератор

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

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

    Подберите опытным путём паузы между сеансами связи, при которых очередь не переполняется. Если паузы окажутся слишком большими, то можно ускорить передачу, использовав несколько «источников данных» в Коммуникаторе с фильтрами по устройствам.

    Некоторые тесты на производительность версии 6 уже проводились. Более подробно проблемы производительности и узкие места будут исследоваться после портирования оставшихся модулей и драйверов.

    #27242
    JurasskPark
    Участник

    Добавил на форму ListView. Посмотрел, в Translate он есть

    
    else if (elem is ListView listView)
    {
       Translate(listView.Columns, controlDict, options);
       Translate(listView.Groups, controlDict, options);
    }

    А вот как в трансляции указать название Columns я не понимаю…
    https://i.ibb.co/bJcd7WQ/001.png
    Пример, как я пытался
    https://i.ibb.co/HDHHx2b/002.png

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

    Посмотрите, например, здесь. Нужно у колонок явно установить имя. Такая особенность ListView.

    #27249
    JurasskPark
    Участник

    Спасибо большое пребольшое! Помогло! Ура!!!

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

    Если есть желание, заведите тикет на WinForms, т.к. подобная особенность ListView явно ненормальна.

    #27514
    JurasskPark
    Участник

    Обновил до версии 6.0.0.4. Тоже добавил создание каналов через Мастер.

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

    Ссылка в репозитории модулей остаётся актуальной, т.к. ведёт на общую страницу релизов.

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