Драйвер ODBC

Просмотр 13 сообщений - с 76 по 88 (из 88 всего)
  • Автор
    Сообщения
  • #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 год, 9 месяцев назад от 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
    Модератор

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

    #34871
    JurasskPark
    Участник

    Решил с обновлением драйвера добавить поддержку MariaDB (https://forum.rapidscada.ru/?topic=%d0%bf%d0%be%d0%b4%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%ba-mariadb-%d0%bd%d0%b0-linux-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b5), но к моему сожалению MySQL нормально подключается к MariaDB.

    https://jurasskpark.ru/pubimg/up/1727464475ac6040d.png
    https://jurasskpark.ru/pubimg/up/1727464507256fdf7.png

    Так что буду допиливать старые фишки. 🙂
    P.S. И да я вернулся и живой! 🙂

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

    Плодотворной разработки!

    #34876
    JurasskPark
    Участник

    Спасибо!

    #34877
    JurasskPark
    Участник

    https://github.com/JurasskPark/RapidScada_v6/releases/tag/DrvDbImportPlus_v6.3.0.0

    Версия 6.3.0.0 (29.09.2024)
    [+] Переход на библиотеки RapidScada 6.3.0.0 и переход на Net Core 8.0.
    [+] Добавлена возможность у строковых данных указывать длину, по которой будут автоматически генерировать теги.
    [v] Обновление библиотек на более свежие версии Net Core 8.0.
    [v] Подправление интерфейс под ноутбуки и некоторые недочеты.
    [-] Удаление источников данных ODBC и OLEDB по причине неактуальности и невозможности использования.

    https://jurasskpark.ru/pubimg/up/172756208381fb95f.png

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