Стартовая страница › Форумы › Вопросы без категории › Управление com портом в рантайме.
- В этой теме 51 ответ, 6 участников, последнее обновление 7 месяцев, 2 недели назад сделано Mikhail.
-
АвторСообщения
-
08.03.2022 в 11:01 #22211RomirosУчастник
За основу такого программного шлюза можно взять Коммуникатор, работающий без участия Сервера.
Можно хотябы в общих словах как именно?
Я написал тестовое консольное приложение, которое слушает TCP порт(условно 12000) и устанавливает TCP соединение с двумя другими TCP портами(12001 и 12002), каждый из которых прослушивают уже своя систем сбора данных соответственно. RapidScada сидит на «основном» порте(12001), другая система на «приоритетном»(12002). При опросе RapidScada, данные из порта 12001 передаются в порт 12000 и обратно. При опросе приоритетной системой (появлении данных от порта 12002), пакеты данных от порта 12001 игнорируются, пока тишина в порте 12002 не превысит установленный временной предел. Как прога для тестирования это работает. Надеюсь что понятно объяснил.
Вопрос как подобный алгоритм повторить с использованием исходного текста коммуникатора? Есть возможность манипулировать данными между линиями связи? Или имелось ввиду что-то другое? Может мой подход неверный. Конечно было бы идеально задействовать коммуникатор, поскольку там уже готово распаралеливание потоков и юзер интерфейс.
- Этот ответ был изменен 2 года, 1 месяц назад от Romiros.
08.03.2022 в 11:40 #22213MikhailМодераторНужно уточнить:
1. Используются какие-то конкретные протоколы обмена данными или это должно быть универсальное решение, не зависящее от протоколов?
2. Какая физическая архитектура для связи между устройствами и ПО (Ethernet, RS-485 и т.п.)?08.03.2022 в 13:16 #22216RomirosУчастник1. Думаю лучше делать универсальное решение, полностью прозрачные порты.
2. Используются виртуальные com порты Moxa Nport для физических линий связи и TCP порты для gprs.Обе системы сбора позволяют работать в режиме TCP сервера, поэтому можно перевести виртуальные COM порты в Moxa в режим TCP клиента, чтобы свести решение задачи в распараллеливание только TCP портов.
08.03.2022 в 23:14 #22239manjey73УчастникНе важно, виртуальный порт или прямое соединение TCP клиента — важно, что на другом конце RTU(ASCII) устройство.
Опросить устройство двумя мастерами в данном случае можно только двумя способами.
1. строго в разное время
2. создав шлюз (кто будет выступать шлюзом уже дело десятое, либо это преобразователь протокола MGate с несколькими сокетами и самостоятельно опрашивающий RTU устройство, либо какое-то программное решение).кстати на счет MGate не очень уверен, не попадалось в руки.
09.03.2022 в 15:00 #22260MikhailМодератор1. Думаю лучше делать универсальное решение, полностью прозрачные порты.
Интересная и сложная задача. Коммуникатор 6-й версии позволяет обращаться к общим данным из исходного кода разных линий связи. Нужно реализовать хаб для перенаправления и синхронизации запросов и ответов.
Использование Коммуникатора в качестве основы ускорит разработку, т.к. Коммуникатор предоставляет:
— готовые каналы связи,
— теги, в которые можно выводить состояние связи и вспомогательную информацию,
— журналирование.Будем рады разработать на заказ. Если будете разрабатывать самостоятельно, расскажите о процессе и результате.
09.03.2022 в 20:22 #22269RomirosУчастникСпасибо за ответ. Пока что не знаю разрабатывать или нет.
Нашел программку, которая разделяет TCP порт на несколько портов, потестирую триальную версию, посмотрим как будет работать. Может это вообще нежизнеспособно.06.09.2023 в 09:25 #29665manjey73УчастникСделал команды на остановку, запуск линии — вопрос как контролировать в WEB что линия запущена/остановлена ?
Ну и опять же — в таблицах не хватает режима для команд — Отправить сразу
- Этот ответ был изменен 7 месяцев, 3 недели назад от manjey73.
06.09.2023 в 09:44 #29668JurasskParkУчастниквопрос как контролировать в WEB что линия запущена/остановлена ?
Тег, который всегда будет больше нуля, если линия запущена. Например, мгновенное значение чего-либо, например, температуры. И по формуле определять истина или ложь. 😅
Шутка.
06.09.2023 в 10:11 #29669manjey73УчастникНу это не совсем тот метод, что хотелось бы 🙂
Нужен канал Status для линии как сделано для устройств. Работает/не работает
типа LineStatusМожет есть зарезервированное имя тега для этого?
06.09.2023 в 14:00 #29673MikhailМодераторПотребуется привязывать канал к линии. Не очень удобно, но пока других идей нет. На данный момент не реализовано, но функция нужная, поэтому со временем появится, надеюсь.
06.09.2023 в 17:04 #29677manjey73УчастникКак-то все половинчато реализовывается 🙂
Сделали статус для Устройства, сразу логически напрашиваются статусы для Линии и для Коммуникатора, если он удаленный…
07.09.2023 в 14:26 #29681MikhailМодераторСтатус должен каким-то образом передаваться в канал. Вопрос заключается в том, как наиболее удобно привязать этот канал.
08.09.2023 в 07:33 #29690RomirosУчастникМожет быть что-то типа битовой маски. Чтобы в каждом устройстве в теге Status шел составной сигнал: Статус коммуникатора, статус линии, статус устройства.
08.09.2023 в 08:44 #29691JurasskParkУчастникИдея для размышления.
Если канал работает, значет он посылает логи серверу. Мы же в админке видим эти логи. Значит если канал работает, значит логи поступают. Отсюда надо смотреть приходят логи по каналу — значит канал запущен. 😂08.09.2023 в 10:52 #29693manjey73УчастникСтатус линии не совсем правильно в бите, так как на линии может быть несколько устройств.
Как бы да, линия логируется, значит ее можно так же добавить в канал, хоть ручками…
Но тут фокус — мы ставим по аналогии с устройством StatusLine — для сервера это код тега устройства, то есть его надо научить, что этот зарегистрированный код тега не в устройстве, а в Линии- Этот ответ был изменен 7 месяцев, 2 недели назад от manjey73.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.