Вход

Просмотр полной версии : Подслушивание RS-485



aaaSashaMGGU
20.06.2024, 08:02
Добрый день!
Есть голова Тензо-М и дублирующая голова тоже Тензо-М
Вторая голова RS-485-мастер и она запрашивает данные с первой головы

Задача - подслушивать RS-485, как Master RS-485 опрашивает Slave RS-485
Я такое уже делал через ПО на ПК через MOXA

Если для этого есть уже готовая библиотека для протокола Тензо-М - вообще прекрасно
Для Тензо-М есть готовая библиотека https://www.tenso-m.ru/news/851/, но там речь про команды от контроллера на голову, а не про подслушивание. Хотя, утащить оттуда функцию расчёта контрольной суммы, конечно, можно

Спасибо!

Евгений Кислов
20.06.2024, 08:08
Добрый день!
Есть голова Тензо-М и дублирующая голова тоже Тензо-М
Вторая голова RS-485-мастер и она запрашивает данные с первой головы

Задача - подслушивать RS-485, как Master RS-485 опрашивает Slave RS-485
Я такое уже делал через ПО на ПК через MOXA

Если для этого есть уже готовая библиотека для протокола Тензо-М - вообще прекрасно
Для Тензо-М есть готовая библиотека https://www.tenso-m.ru/news/851/, но там речь про команды от контроллера на панель, а не про подслушивание. Хотя, утащить оттуда функцию расчёта контрольной суммы, конечно, можно

Спасибо!

Добрый день.

В общем и целом - вам необходимо реализовать в контролере slave нестандартного протокола (Тензо-М), который парсит любые полученные запросы, но не отвечает на них.

Начните с этого:
https://youtu.be/F_unaGOBC08?si=ZXtK5WOXQTF7nNTG
https://www.tenso-m.ru/pdf/Protocol_Tenso-M.pdf

Тут реализация мастера для Тензо-М, но отдельные фрагменты кода могут быть полезны:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/07_User_protocols/Example_Tenzo_M_3517v2.projectarchive

aaaSashaMGGU
20.06.2024, 08:50
Не-не, вопрос не в том. C протоколом Тензо-М я работать умею.
Вопрос, как сделать парсинг всего потока данных от RS-485 на ОВЕНе? Я не знаю только это. Дальше-то уже всё понятно

Евгений Кислов
20.06.2024, 09:06
Не-не, вопрос не в том. C протоколом Тензо-М я работать умею.
Вопрос, как сделать парсинг всего потока данных от RS-485 на ОВЕНе? Я не знаю только это. Дальше-то уже всё понятно

См. первую ссылку из поста выше.

aaaSashaMGGU
20.06.2024, 09:22
См. первую ссылку из поста выше.

Да забудьте вы про этот Тензо-М :D

Я спрашиваю, как мне опросить порт RS-485, не отправляя при этом в сам порт ничего
Я так понимаю, для этого нужны блоки ФБ COM.Open и ФБ COM.Read из Библиотека CAA SerialCom

Я просто не могу понять, блок называется COM, а опрашивать я должен RS-485. Это будет работать?
hCom CAA.HANDLE Дескриптор (handle) порта, из которого происходит чтение - можно указать именно RS-485 порт?
Будет ли при этом блок ФБ COM.Read читать поток байтов из порта RS-485?

Вот какие-то такие у меня вопросы :rolleyes:

melky
20.06.2024, 09:27
aaaSashaMGGU ну так вам нужно реализовать аналог slave на порту, который слушает, только отвечать не будет, а только обрабатывать информацию.

aaaSashaMGGU
20.06.2024, 09:31
aaaSashaMGGU ну так вам нужно реализовать аналог slave на порту, который слушает, только отвечать не будет, а только обрабатывать информацию.

Да, 100% в точку :)
Дайте уже посмотреть, наконец, пример такой программы :rolleyes:
Я же с самого начала и говорил, что я не понимаю, как сделать именно это

melky
20.06.2024, 09:36
Ну вам Евгений написал с чего начать. Наверное читать там. На ПЛК я такое не реализовывал. Опять же, берете примеры любого мастера, там же сперва запрос, потом чтение ответа. Вам нужна вторая часть, а дальше ваша логика.

1. открыть порт
2. ожидание ответа (запросы удаляем за ненадобностью)
3. логика.

Евгений Кислов
20.06.2024, 09:44
Да, 100% в точку :)
Дайте уже посмотреть, наконец, пример такой программы :rolleyes:
Я же с самого начала и говорил, что я не понимаю, как сделать именно это


Ладно, я скопирую первую ссылку из поста выше. Мне несложно.
https://youtu.be/F_unaGOBC08?si=ZXtK5WOXQTF7nNTG

aaaSashaMGGU
24.06.2024, 12:50
Всем спасибо
Сделал вот так:
76831

Вот только пара моментов:
1) Я хоть и поставил размер буфера запроса szRequest = 0, но 3 цикла программа всё равно ничего не делает. Я не могу заглянуть внутрь кода OCL.UNM_SerialRequest, но думаю, что ФБ всё равно "Отправляет" пакет нулевой длины, что занимает эти самые 3 цикла. И на 4й цикл только лишь начинается чтение (подслушивание) компорта

2) Из-за того, что мы подслушиваем, а не пишем - конец работы блока я фиксирую не по xDone, а по xError, что выглядит, как минимум, странно. Т.к., траффик идёт постоянный - и конца у него нет и быть не может

melky
24.06.2024, 13:28
aaaSashaMGGU не думали, что цикл программы ПЛК может быть меньше, чем прием хотя бы одного байта ?

aaaSashaMGGU
24.06.2024, 14:07
aaaSashaMGGU не думали, что цикл программы ПЛК может быть меньше, чем прием хотя бы одного байта ?

Я ставил цикл программы 200мс, 100мс и 10мс. Данные начинали приходить всегда только 4-м цикле, независимо от его времени

aaaSashaMGGU
24.06.2024, 14:18
Я ставил цикл программы 200мс, 100мс и 10мс. Данные начинали приходить всегда только 4-м цикле, независимо от его времени

Да это всё без разницы. Ну, 4 цикла так 4 цикла. Просто цикл 100мс оказался не очень хорошим, т.к., данные на экране, стало быть, обновлялись раз в полсекунды. Поставил и оставил цикл 25мс - стало 10 раз в секунду, что уже выглядит замечательно.
Исправлять тут, в общем-то, нечего: просто такая вот особенность блока в режиме подслушивания

melky
24.06.2024, 14:26
Да вроде это нормально и связано с принципами работы ПЛК. Вы не можете изменить переменную блока в том же цикле. И если там несколько итераций при работе то тем более может потребоваться несколько циклов.