Драйвер ODBC

Просмотр 15 сообщений - с 1 по 15 (из 25 всего)
  • Автор
    Сообщения
  • #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.jpg

    http://jurasskpark.magicteam.net/images/users/photos/medium/619c2b34120aaed85577fdc893c6d3e9.jpg

    • Эта тема была изменена 2 недели, 3 дня назад от JurasskPark.
    • Эта тема была изменена 2 недели, 3 дня назад от JurasskPark.
    • Эта тема была изменена 2 недели, 3 дня назад от Mikhail.
    #23987
    JurasskPark
    Участник

    Пока редактировал тему, уже вышло время, поэтому ссылки на изображение не дает добавить. Попробую здесь. 🙂




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

    Добрый день!
    Используйте просто ссылки без тегов для вставки изображений.

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

    Спасибо за разработку!
    Насколько она востребована пользователями, могут ответить только они.
    Это отдельное приложение или драйвер для Rapid SCADA?
    Где можно скачать, попробовать?

    Как работают параметры КП, написано в статье Настройка обмена данными с устройствами

    • Этот ответ был изменен 2 недели, 3 дня назад от Mikhail.
    #23996
    JurasskPark
    Участник

    Сейчас это приложение, которое в виде Winforms + Service, которое готово на 93%.
    В дальнейшем это будет драйвер Rapid SCADA, которое я выбрал для перехода в виде импортозамещения. RapidScada заменить связку Kepware+DataLogger. =)
    Но так как систему скачал 2 недели назад, то если честно, то изучаю и задаю глупые вопросы 🙂

    #23998
    manjey73
    Участник

    Делайте сразу под 6-ю версию, не тратьте время 🙂

    #24007
    JurasskPark
    Участник

    Приложение (много еще где защиты от дурака нет, но основа работает)
    https://jurasskpark.magicteam.net/tmp/xODBC.zip

    Видео как работает
    https://youtu.be/XuaPXYLzscs

    #24011
    manjey73
    Участник

    Мне кажется вам надо делать это как модуль Сервера а не как драйвер…

    #24013
    JurasskPark
    Участник

    Ну для начала надо научиться писать драйвер, а модуль — это сложная штука, которая может положить и всю систему. =D

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

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

    #24020
    JurasskPark
    Участник

    Алгоритм (пишу для драйвера(КП)):
    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 недели, 1 день назад от JurasskPark.
    #24022
    manjey73
    Участник

    еще раз — берите Бета 6-й версии Scada. не тратьте время уже на 5-ю версию 🙂

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

    #24023
    Romiros
    Участник

    Не пойму зачем тут RapidScada, если данные гуляют между двумя БД. А если данные поступают в БД скада, то есть смысл разбить на драйвер и модуль. По аналогии с KpDbImport и ModDbExport.

    #24024
    JurasskPark
    Участник

    Тупой я. 😅 Не смог заставить 6 работать 🙂
    Поэтому пока 5. Потом научусь на 6ом.
    Мой 6 почему то пишет «неизвестная ошибка» и работает только в DefaultSite. Ну короче все сложно 🙂

    #24025
    JurasskPark
    Участник

    В библиотеке KpDbImport нужно таскать с собой библиотеки + там зашиты ссылки. И если этой БД нет, то что делать? А тут всё зависит от драйвера ODBC, есть он на машине, значит можно данные собрать 🙂
    + не нужно дополнительные настройки в DbExport делать. 🙂

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