Стартовая страница › Форумы › Разработка и интеграция › Драйвер ODBC
- В этой теме 83 ответа, 5 участников, последнее обновление 1 год, 1 месяц назад сделано Mikhail.
-
АвторСообщения
-
14.06.2022 в 15:10 #23984JurasskParkУчастник
Добрый день.
Для сбора данных из СУБД решил написать свой драйвер ODBC c интерфейсом, который я честно украл у RapidScada =).
http://jurasskpark.magicteam.net/images/users/photos/medium/619c2b34120aaed85577fdc893c6d3e9.jpg
http://jurasskpark.magicteam.net/images/users/photos/medium/994e92a22496615758820eb3fe846e2f.jpg
http://jurasskpark.magicteam.net/images/users/photos/medium/f12f04b9f4ee512823367b58319ea91f.jpg
http://jurasskpark.magicteam.net/images/users/photos/medium/a5c8de9c8a8d60b02481274bc7f05671.jpg
http://jurasskpark.magicteam.net/images/users/photos/medium/6b08d1da05d2ce8bf65033419bd3ab90.jpg
Принцип работы в него закладывается следующий.
Вызывается библиотека, в которую передается называется проекта .xml, он считывает список запросов, в котором указано расписание, когда нужно выполнить задание, если текущее время >= ожидаемого, то выполняется запрос, иначе в проект xml записывается расчетное время выполнения, т.е. нам по расписанию нужно рассчитать ожидаемое время выполнения и текущее время.
Если время выполнения наступило, то от текущего времени мы делаем расчет начало и окончание запроса, сколько к текущему времени нужно прибавить или убрать (суток, часов, минут, секунд).
Делается запрос в БД, полученный результат анализируется на название столбца и значение из столбца вставляется в запрос. Этот запрос выполняется на СУБД приёмники.
Для того чтобы данные попадали в СУБД, я не хочу делать фиксированные названия полей или столбцов. Просто будет важен порядок, где название тега, время, значение и качество нельзя менять местами. 🙂Теперь остался вопрос. Нужно ли это к кому?
Второй. Можете объяснить логику и как работает в драйвере Таймаут, Пауза, Время, Период. В чем есть особенности, чтобы я их при написании драйвера учел и они друг другу с моим кодом не мешали.http://jurasskpark.magicteam.net/images/users/photos/medium/359c1bbf33fa9be011924f70565f913c.jpg
http://jurasskpark.magicteam.net/images/users/photos/medium/359c1bbf33fa9be011924f70565f913c.jpghttp://jurasskpark.magicteam.net/images/users/photos/medium/619c2b34120aaed85577fdc893c6d3e9.jpg
- Эта тема была изменена 1 год, 9 месяцев назад от JurasskPark.
- Эта тема была изменена 1 год, 9 месяцев назад от JurasskPark.
- Эта тема была изменена 1 год, 9 месяцев назад от Mikhail.
14.06.2022 в 15:25 #23987JurasskParkУчастник14.06.2022 в 18:45 #23993MikhailМодераторДобрый день!
Используйте просто ссылки без тегов для вставки изображений.14.06.2022 в 18:48 #23994MikhailМодераторСпасибо за разработку!
Насколько она востребована пользователями, могут ответить только они.
Это отдельное приложение или драйвер для Rapid SCADA?
Где можно скачать, попробовать?Как работают параметры КП, написано в статье Настройка обмена данными с устройствами
- Этот ответ был изменен 1 год, 9 месяцев назад от Mikhail.
14.06.2022 в 19:11 #23996JurasskParkУчастникСейчас это приложение, которое в виде Winforms + Service, которое готово на 93%.
В дальнейшем это будет драйвер Rapid SCADA, которое я выбрал для перехода в виде импортозамещения. RapidScada заменить связку Kepware+DataLogger. =)
Но так как систему скачал 2 недели назад, то если честно, то изучаю и задаю глупые вопросы 🙂15.06.2022 в 09:34 #23998manjey73УчастникДелайте сразу под 6-ю версию, не тратьте время 🙂
15.06.2022 в 23:03 #24007JurasskParkУчастникПриложение (много еще где защиты от дурака нет, но основа работает)
https://jurasskpark.magicteam.net/tmp/xODBC.zipВидео как работает
https://youtu.be/XuaPXYLzscs16.06.2022 в 08:53 #24011manjey73УчастникМне кажется вам надо делать это как модуль Сервера а не как драйвер…
16.06.2022 в 11:47 #24013JurasskParkУчастникНу для начала надо научиться писать драйвер, а модуль — это сложная штука, которая может положить и всю систему. =D
16.06.2022 в 12:45 #24017MikhailМодераторМодуль и драйвер примерно одинаковы по сложности. Но модуль действительно повесить весь сервер, а драйвер только одну линию связи.
Напишите алгоритм работы, тогда будет понятно, что ближе.16.06.2022 в 13:48 #24020JurasskParkУчастникАлгоритм (пишу для драйвера(КП)):
1. Считать конфигурацию (проект):
а. Количество запросов
б. В запросе высчитать параметры (патерн) через какой период нужно запускаться(делать запрос)
в. Если время выполненя по сравнению с текущим временем >= текущего времени, то необходимо выполнять логику дальше.
а) Вычитываем строку подключения к серверу источнику
б) Вычитываем строку подключения к серверу приёмнику
в) Вычитываем маску шаблон полей, из которой мы будет через шаблон заменять ключевые слова на значения полей. (Ключевое слово {SLOVO} ищется в SQL запросе и если находится, то вставляет на ей место значение поля)
г) Высчитываем время выполнения запрос (период ОТ и ДО), когда нужно забирать данные по сравнению с ТЕКУЩИМ ВРЕМЕНЕМ. Если в запросе есть ключевые слова {STARTDATE} и {ENDDATE}, то рассчитаеное время конвертируется в текстовые переменные, согласно шаблона и особенностей формата данных в СУБД.
д) Подключение к СУБД источнику.
е) Выполнение запроса складывается в DataTable
ё) Проходимся по таблице DataTable c помощью патерна в п. В , если в строке таблице попадается название столбца, то берем его значение (дополнительно проверяем на свойство поля не datetime ли оно, его отдельно конвертируем в строковую переменную, согласно шаблона и особенностей формата данных в СУБД.)
ж) Здесь должна быть логика, как значения полей превращаются в KpTag. У меня её пока нет. =) Но думаю, будет так
List<TagGroup> tagGroups = new List<TagGroup>();
TagGroup tagGroup = new TagGroup(«Group 1»);
tagGroup.KPTags.Add(new KPTag(1, «Tag 1»));
з) Список всех полученных запросов складывается в List<string>. Через forech проходимся по списку и отправляются в БД приёмнику.
и) Если во время выполнения появились ошибки, то повторяем процедуру, пока количество разрешенных ошибок не будет превышено т.к. каналы связи не везде хорошие (потери пакетов, спутниковая связь медленная и т.д.).
й) Записываем время выполнения. Высчитываем следующее время выполненния.
к) Переходим к следующему запросу.
г. Если время не наступило, то переходим к следующему запросу.
2. Сохранить конфигурацию (проект).- Этот ответ был изменен 1 год, 9 месяцев назад от JurasskPark.
16.06.2022 в 14:00 #24022manjey73Участникеще раз — берите Бета 6-й версии Scada. не тратьте время уже на 5-ю версию 🙂
можно и в драйвере судя по логике. Количество и состав переменных должен быть определен на стадии запуска линии.
16.06.2022 в 15:12 #24023RomirosУчастникНе пойму зачем тут RapidScada, если данные гуляют между двумя БД. А если данные поступают в БД скада, то есть смысл разбить на драйвер и модуль. По аналогии с KpDbImport и ModDbExport.
16.06.2022 в 15:21 #24024JurasskParkУчастникТупой я. 😅 Не смог заставить 6 работать 🙂
Поэтому пока 5. Потом научусь на 6ом.
Мой 6 почему то пишет «неизвестная ошибка» и работает только в DefaultSite. Ну короче все сложно 🙂16.06.2022 в 15:24 #24025JurasskParkУчастникВ библиотеке KpDbImport нужно таскать с собой библиотеки + там зашиты ссылки. И если этой БД нет, то что делать? А тут всё зависит от драйвера ODBC, есть он на машине, значит можно данные собрать 🙂
+ не нужно дополнительные настройки в DbExport делать. 🙂 -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.