Стартовая страница › Форумы › Разработка и интеграция › Драйвер ODBC
- В этой теме 87 ответов, 5 участников, последнее обновление 2 недели, 2 дня назад сделано JurasskPark.
-
АвторСообщения
-
24.12.2022 в 22:42 #26841JurasskParkУчастник
Во время написания кода понял одну вещь, что код правильный и не правильный одновременно.
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)Это хорошая штука. Потому что если в БД значение лохматого года или месяца, в текущие данные такую вещь передавать нельзя, иначе никогда не поймешь, что оно умерло. Да… прямой тренд — это показатель… но всё же…
24.12.2022 в 22:47 #26842JurasskParkУчастникhttps://forum.rapidscada.ru/?topic=расшифровка-статуса-каналов
Хм… Мне кажется я теперь понял, ответ на свой вопрос почему Статус = 4.
Я говорю DrvDsScadaServer вот тебе данные из БД… А он такой… че за старье… у них время больше текущего. Вот им признак Исторических и поставлю им 4. )- Этот ответ был изменен 1 год, 9 месяцев назад от JurasskPark.
26.12.2022 в 15:44 #26863MikhailМодераторСрез состоит из метки времени и данных нескольких каналов.
Сервер на порядок быстрее примет 1 срез на 100 каналов, чем 100 срезов на 1 канал, потому что каждый срез отправляется отдельным пакетом.Если драйвер в основном принимает текущие данные, то нужно увеличить паузу между сеансами связи, чтобы успевали накопиться изменения тегов и они отправлялись в виде одного среза.
Подберите опытным путём паузы между сеансами связи, при которых очередь не переполняется. Если паузы окажутся слишком большими, то можно ускорить передачу, использовав несколько «источников данных» в Коммуникаторе с фильтрами по устройствам.
Некоторые тесты на производительность версии 6 уже проводились. Более подробно проблемы производительности и узкие места будут исследоваться после портирования оставшихся модулей и драйверов.
31.01.2023 в 09:23 #27242JurasskParkУчастникДобавил на форму 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.png31.01.2023 в 15:57 #27248MikhailМодераторПосмотрите, например, здесь. Нужно у колонок явно установить имя. Такая особенность ListView.
31.01.2023 в 17:49 #27249JurasskParkУчастникСпасибо большое пребольшое! Помогло! Ура!!!
01.02.2023 в 15:35 #27266MikhailМодераторЕсли есть желание, заведите тикет на WinForms, т.к. подобная особенность ListView явно ненормальна.
23.02.2023 в 01:02 #27514JurasskParkУчастникОбновил до версии 6.0.0.4. Тоже добавил создание каналов через Мастер.
24.02.2023 в 11:31 #27515MikhailМодераторСсылка в репозитории модулей остаётся актуальной, т.к. ведёт на общую страницу релизов.
27.09.2024 в 22:20 #34871JurasskParkУчастникРешил с обновлением драйвера добавить поддержку 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. И да я вернулся и живой! 🙂28.09.2024 в 10:09 #34872MikhailМодераторПлодотворной разработки!
28.09.2024 в 10:15 #34876JurasskParkУчастникСпасибо!
29.09.2024 в 01:24 #34877JurasskParkУчастник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 по причине неактуальности и невозможности использования. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.