Стартовая страница › Форумы › Разработка и интеграция › Драйвер ODBC
- В этой теме 123 ответа, 6 участников, последнее обновление 1 месяц, 3 недели назад сделано
Mikhail.
-
АвторСообщения
-
14.06.2022 в 15:10 #23984
JurasskPark
УчастникДобрый день.
Для сбора данных из СУБД решил написать свой драйвер 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
-
Эта тема была изменена 2 года, 8 месяцев назад от
JurasskPark.
-
Эта тема была изменена 2 года, 8 месяцев назад от
JurasskPark.
-
Эта тема была изменена 2 года, 8 месяцев назад от
Mikhail.
14.06.2022 в 15:25 #23987JurasskPark
Участник14.06.2022 в 18:45 #23993Mikhail
МодераторДобрый день!
Используйте просто ссылки без тегов для вставки изображений.14.06.2022 в 18:48 #23994Mikhail
МодераторСпасибо за разработку!
Насколько она востребована пользователями, могут ответить только они.
Это отдельное приложение или драйвер для Rapid SCADA?
Где можно скачать, попробовать?Как работают параметры КП, написано в статье Настройка обмена данными с устройствами
-
Этот ответ был изменен 2 года, 8 месяцев назад от
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. Сохранить конфигурацию (проект).-
Этот ответ был изменен 2 года, 8 месяцев назад от
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 делать. 🙂 -
Эта тема была изменена 2 года, 8 месяцев назад от
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.