Протокол JP

Просмотр 15 сообщений - с 1 по 15 (из 35 всего)
  • Автор
    Сообщения
  • #35958
    JurasskPark
    Участник

    История. Начало.
    Сейчас я пишу разработку для RapidScada. Ничего необычного, простой Modbus (стандартный), но там на устройстве Динамограмма.
    https://vseonefti.ru/useful/kak-chitat-dinamogrammy.html

    С чтением и отрисовкой проблем у меня не должно быть.
    Но во время разработки я задумался о том, что рисовать на вебе кнопочки, картинки я еще смогу, но вот передачу команд 15 и 16 функцией сделать — гемморойно. + ощущение что динамограмму на графике бесплатном я не нарисую.

    Подумал, ага, раз ты такой ленивый, ну сделаешь плагин к Администратору и пускай человек запускает Администратор, нажимает кнопочку плагина и будет там рисоваться из сервера показания текущие, на тренд графике отрисовываться динамограмма… Но…

    Стоит ли выдумывать какой-то свой протокол Client — TCP, который будет общаться с драйвером на Коммуникаторе или лучше изучить протокол RapidScada и научиться Telecommand отправлять из плагина?

    P.S.
    А то я уже продумал стандарт протокола JP (смесь Modbus и SECS).

    #35959
    JurasskPark
    Участник

    http://jurasskpark.ru//up/1733173954f7faa6e.jpg
    Читаю протокол (возможно старый, т.к. 2022 года), понимаю, что клиент — это Server, а сервер — это коммуникатор.
    Потому что только Server может знать поступали ли команды с веба и админки в очередь и с какого id пользователя.

    Но вот если с длиной команды, функцией, Id пользователя, тип команды — всё ясно и понятно, то что такое номер канала управления и как по нему будет определяться устройство на коммуникаторе — мне не ясно.
    + последовательность обмена данными еще надо реализовывать… 🙁

    #35960
    JurasskPark
    Участник

    Что еще…
    По сути опять мы же знаем, что драйвер отправляет логи на сервер. Сервер их получает и пишет на диск. Читает ли Администратор логи с диска или получает пот сервера по TCP — не смотрел и не изучал. Врать не буду. Но интересно )

    Вообщем нужно ваше мнение. Как лучше сделать и правильнее.

    #35961
    JurasskPark
    Участник

    Ради интереса, какой протокол я смиксовал.

    Байт[00] — Длина сообщения
    Байт[01] — Master или Slave (0 — Master, 1 — Slave)
    Байт[02] — Необходим ответ на сообщение или нет (0 — нет, 1 — да)
    Байт[03] — Адрес устройства (мл.)
    Байт[04] — Адрес устройства (ст.)
    Байт[05] — Раздел устройства (информация об устройстве, данные текущие, исторические) (от 0 до 255)
    Байт[06] — Функция
    Байт[07] — ID записи (счётчик)
    Байт[08] — ID записи (счётчик)
    Байт[09] — ID записи (счетчик)
    Байт[10] — ID записи (счетчик)
    ———————
    Данные [n] — элементов
    Байт[х0] — Формат данных
    Байт[х1] — Длина данных
    Байт[х2-xn] — Данные
    ———————
    Байт[n] — Check Sum (сумма всех элементов в сообщении без последнего байта)

    В формате данных будут стандартные
    SHORT
    USHORT
    INT
    UINT
    LONG
    ULONG
    FLOAT
    DECIMAL
    Так и текстовые
    ASCII
    UTF8
    Так и необычные
    LIST[количество элементов] список
    BOOL истина / ложь
    То есть в текстовом виде LIST
    LIST[2]
    UTF8[5] USERS
    INT[2] 01.02.03.04 05.06.07.08

    #35962
    manjey73
    Участник

    Михаил как-то упоминал, что можно сделать драйвер, поверх другого драйвера.
    Если применительно к Modbus.
    То есть добавить те самые функции Modbus, которых сейчас в нем нет.

    Читает логи, если я правильно понимаю Администратор через Агента с диска, так как Коммуникатор и Web могут быть на других ПК. Там вообще взаимодействие идёт через Агента.

    #35963
    manjey73
    Участник

    1. Много приборов, где есть информация, которой не место в штатных БД scada, просто чтобы не занимало место. Но которую иногда хочется видеть и понимать.
    Думаю Динамограммы попадают в эту категорию. Но сейчас в 6-й версии появились раздельные настройки для БД и этим надо научиться пользоваться.
    По мне, так все равно можно было сделать по другому 🙂 на текущий момент можно ограничить время хранения БД. Или как вариант попробовать писать по изменению, но с хранением больший промежуток времени. в общем надо разбираться и тестировать какой из режимов больше подойдет для хранения диаграмм.
    Тогда просто под каждый прибор создается БД для диаграммы на нужное количество каналов.
    В драйвере можно указывать маску архива БД.

    2. то что такое номер канала управления и как по нему будет определяться устройство на коммуникаторе
    тут ничего не понял, но возможно это из той же серии, как определять входные, выходные и т.д. каналы в базе при работе из Модуля? то есть обращаясь к базе можно по номеру канала определить в принципе все связи, в том числе и какое устройство.

    3. Драйвер не отправляет логи на сервер, он их пишет в файл там, где работает Коммуникатор, то есть это функция Коммуникатора сохранять логи. Потом их читает Админка через Агент.

    з.ы. мое мнение, надо не придумывать свое, а использовать то, что есть в ядре, возможно улучшая.

    #35964
    manjey73
    Участник

    Так же Михаил писал, что через Агента из WEB можно даже сервер перегрузить.
    И вроде как через Агента можно прочитать всю базу и получить нужную информацию.

    #35965
    JurasskPark
    Участник

    http://jurasskpark.ru/pubimg/up/173320503291b7e3b.jpg

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

    #35966
    JurasskPark
    Участник

    Вообщем, вердикт использовать протокол Михаила. 🙂
    А по номеру канала(тега) научиться отправлять команды Telecommand.

    Теперь вопрос другой.
    Точка входа для Телекоманды должен быть сервер.
    Если сервер и агент(коммуникатор) общаются по протоколу — тут ясно и понятно.

    А вот как отправить команду в сервер, чтобы он дальше здоровался и общался как ему хочется и с кем хочется(агент или коммуникатор)? 🙂

    #35967
    manjey73
    Участник

    не доступен твой сайт. Ни с работы, ни из дома (проверил только что)

    #35968
    JurasskPark
    Участник

    Screenshot-2024-12-03-09-18-53-382-com-yandex-browser
    Там стоит заглушка. Разве нет?

    #35969
    JurasskPark
    Участник
    #35970
    manjey73
    Участник

    Под протоколом имеется ввиду взаимодействие между сервером и другими компонентами, Коммуникатор, Агент и т.д.? Ну наверное да, если в нем есть все необходимое.

    Возможно надо будет писать Модуль, который будет переводить команды WEB плагина в нужные команды Серверу и Коммуникатору.
    Модуль с..ка быстрый 🙂

    Надо понять архитектуру что и как. Если это Modbus, только те команды, которых нет в штатном, я так понял лучше делать свой драйвер поверх штатного драйвера Modbus. Чтобы не писать уже готовые по новому кругу, а только то, что требуется сверху. Ну и учитывать возможность штатной настройки архивов или по маске сразу из драйвера (конфига для чего-то)

    А дальше думать. Просто плагин Web, плагин плюс модуль или как-то иначе.

    #35971
    JurasskPark
    Участник

    Главная задача понять, как в сервер передать команду, чтобы он разрулил где канал находится и сам передал в коммуникатор.
    Если Михаил ответит, что так нельзя (но веб же отправляет в сервер), то тогда будем из плагина напрямую в агент или коммуникатор учиться слать.

    #35972
    manjey73
    Участник

    Из дома открыл. з.ы. а почему просто ссылку на протокол не написать?
    Надо бы ее поискать, сам не помню, какой у меня последний 🙂

    В общем надо точно понимать, что ты хочешь получить в итоге?
    Например есть ли необходимость писать прямо таки плагин, если с чтением диаграмм может справиться штатный График или Графики Про ?
    Подать в свой драйвер (или надстройку над другим драйвером) команды из web можно ведь и через Сервер штатными средствами.

    Если штатные Графики или Про не справятся с отрисовкой — тогда да, свой плагин.

    2. Справятся ли текущие БД при определенных настройках с задачей?

    Отсюда уже и плясать.

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