PDA

Просмотр полной версии : Опрос ПР103 по ModBus RTU дргугого устройства, работаеющего по ModBus RTU



FuelingSystems
08.09.2025, 11:19
Добрый день! Стоит задача ПР-кой опросить (по ModBus RTU) устройство, которое, в свою очередь работает по ModBus RTU.

Опишу принцип опрашиваемого устройства: Есть блок обработки информации (мастер) и 64 канала для опроса периферийных устройств ( датчиков). В описании протокола говорится: "Перед чтением прикладных или точечных параметров необходимо выбрать канал. Выбор канала выполняется с помощью команды записи в единичный регистр 40001 (код функции – 06h). Младший байт регистра данных – номер канала (значение «0»- 1-й к***** «63» – 64-й канал). Старший байт регистра данных – адрес протокола «Магистраль» (протокол связи датчиков с блоком обработки информации), используется в технологических и сервисных приложениях для удаленного доступа к подключенным датчикам".

Вопрос - как настроить алгоритм опроса параметров датчиков ПР-кой? Я должен сначала записать номер нужного мне канала в опрашиваемое устройство? Потом уже настроить опрос по карте регистров? Или иду куда-то не туда? Опыта работы по ModBus малова-то, но стоит такая задача..

Sulfur
08.09.2025, 12:12
FuelingSystems
Конкретно какой датчик надо опрашивать? Модель в студию.
--
Лоджик>Прибор>Настройки прибора>Настройка порта 1>крутим под задачу.
Лоджик>Прибор>Настройки прибора>Мастер Modbus>(ПКМ) Добавить устройство>обзываем устройство опроса>прописываем адреса>создаем переменные опроса.
Имейте ввиду, целочисленные значения в самом Лоджике преобразуются в udint32 (целое без знака 32 бит) независимо от формата читаемого параметра. Даже если читает один регистр (2 байта\16 бит).

EFrol
08.09.2025, 13:05
Если у Вас "другое устройство" тоже Master, то засада. Два мастера в одной сети не дружат!

FuelingSystems
08.09.2025, 13:48
FuelingSystems
Конкретно какой датчик надо опрашивать? Модель в студию.
--
Лоджик>Прибор>Настройки прибора>Настройка порта 1>крутим под задачу.
Лоджик>Прибор>Настройки прибора>Мастер Modbus>(ПКМ) Добавить устройство>обзываем устройство опроса>прописываем адреса>создаем переменные опроса.
Имейте ввиду, целочисленные значения в самом Лоджике преобразуются в udint32 (целое без знака 32 бит) независимо от формата читаемого параметра. Даже если читает один регистр (2 байта\16 бит).

Прилагаю описание прибора,который надо опросить (https://disk.yandex.ru/i/KB57fULPsA63nw) и выдержку из описания протокола (https://disk.yandex.ru/i/uzSfC5whN2O7lg).

FuelingSystems
08.09.2025, 13:49
Если у Вас "другое устройство" тоже Master, то засада. Два мастера в одной сети не дружат!

Там есть два интерфейса RS-485, по логике вещей вторичный блок устройства опрашивает датчики сами, а ПР-ка уже по второму RS-485 опрашивает само устройство (оно умеет выводить данные), загвоздка как раз в том, как правильно ПР-кой опросить..

Sulfur
08.09.2025, 14:51
FuelingSystems
Не нашел в мануалах как установить параметры связи по порту. Насколько я понял, там есть Езернет, и если он не занят, то можно связываться по нему.
По чтению:
1. По умолчанию адрес прибора 50h или 80dec, это надо указать в настройках устройства опроса в Лоджике.
2. Например надо опросить -значение средней плотности продукта Рср.,г/см3. В сетевой переменной проекта Лоджика ставим адрес 16dec, читаем в переменную тип "вещественный" (float). Третий регистр (18dec) можно не читать.
3. Далее надо опросить -значение уровня подтоварной воды Нв.,мм. Аналогично предыдущему, только адрес 19dec. Так же третий регистр состояния, он будет иметь адрес 21dec, читаем по желанию отдельным запросом в целочисленную переменную.
4. Если требуется читать регистры состояний, то скорее всего придется делать макрос на ST для их дешифровки.
5. Если получаемые данные будут аномальными, то потребуется поиграть с чередованием старших\младших байт\регистров в настройках устройства опроса.
Проще говоря, читаем требуемый параметр по адресу из мануала, флоат\вещественный занимает 2 регистра\четыре байта\два адреса, целочисленный параметр занимает 1 регистр\два байта\один адрес.

imaex
08.09.2025, 15:32
FuelingSystems
Насколько я понял, там есть Езернет, и если он не занят, то можно связываться по нему.


Это опция, вариант комплектации БСР1. У ТС вариант БРИ1, если я правильно понял. Нужно полный вариант документации смотреть, а не эти огрызки.

EFrol
08.09.2025, 15:57
По идее должно быть так:

FuelingSystems
09.09.2025, 10:31
Это опция, вариант комплектации БСР1. У ТС вариант БРИ1, если я правильно понял. Нужно полный вариант документации смотреть, а не эти огрызки.

Да, при использовании БСР1 возможно наличие Ethernet, но не всегда он есть, задача - получить решение с RS-485. Документация полная тут. ( https://disk.yandex.ru/i/TwIO7Z_ks6gfWA , https://disk.yandex.ru/i/tEp7X7RCqMypEw )

FuelingSystems
09.09.2025, 10:35
По идее должно быть так:

Спасибо большое. Но тут, получается, номер канала задаётся вручную. Верно?

Немного неточно описал задачу, извиняюсь уж.. Необходимо чтоб ПР-ка постоянно опрашивала эту "Струну" (либо сразу по всем каналам, либо по установленным во время ПНР (например 2й, 3й, 10й и т.д.)) и управляла отключением насосов, когда уровень ниже уставки и т.д. .. Алгоритм остановки насоса сделаю сам, прошу помощи с алгоритмом опроса. ))

EFrol
09.09.2025, 12:11
Спасибо большое. Но тут, получается, номер канала задаётся вручную. Верно?

Немного неточно описал задачу, извиняюсь уж.. Необходимо чтоб ПР-ка постоянно опрашивала эту "Струну" (либо сразу по всем каналам, либо по установленным во время ПНР (например 2й, 3й, 10й и т.д.)) и управляла отключением насосов, когда уровень ниже уставки и т.д. .. Алгоритм остановки насоса сделаю сам, прошу помощи с алгоритмом опроса. ))

А после задания номера канала в Select, значения Level и Weight считываются корректно?

Вот пример, как делаю я. Может поможет:

imaex
09.09.2025, 13:40
либо сразу по всем каналам

Сразу по всем каналам нельзя, няп, бо регистр для указания номера канала ровно 1 - 4x0000 (физический адрес). Задаёте номер канала, потом читаете. Глава "8 Алгоритмы работы".

Вы чем-нибудь для понимания пробовали эту Струну опрашивать? Если не, то попробуйте для начала тестовыми утилитами опрашивать, а потом уже за ПР-ку беритесь.
Рекомендую https://owen.ru/forum/showthread.php?t=41424
По-моему, для этой задачи должно хорошо подойти, поскольку в одном наборе данны можно разнородные типы регистров опрашивать/менять. Плюс на ходу приостанавливать опрос каких-то регистров - там ведь значения измеряемых параметров не сразу устанавливаются, не помню, сколько там по документации. Заодно этот момент оцените.

Кстати, любопытное по документации

Передача от MS: 50 06 00 00 00 03 С4 4А
С и А тут в кириллице :) , т.ч. аккуратнее с копипастой.