Вход

Просмотр полной версии : ПР200 преобразование MODBUS



hulejke
28.10.2025, 10:10
Всех приветствутю! есть вопрос касаемо преобразования регистров модбаса. Проблема заключается в следующем на моем преприятии есть в эксплуатации приборы (преобразователи давления расплава) которые уже давно сняты с производства замен них вышли новые но вот незадача карта регистров модбас у них отличается если ранее фактичские показания давления хранились к примеру в регистре 1001 то в новом приборе они хранятся уже в регистре 1031 данные из этих регистров грузятся в скаду, данные из скады попадают в контроллер и использутся в различных математичских функциях. сразу хочу сказать что доступа к скаде мы не имеем (она запаролена)
Хотелось бы услышать ваше мнение возможно ли сделать так что бы при помощи пр200 сделать подмену регистров тоесть счиать с прибора 1031 преобразовать его в 1001 и засунуть эти преобразованные данные поднужным регистром уже в скаду?

Cs-Cs
28.10.2025, 10:16
В общем виде - ДА. Нужна будет ПРка с двумя RS-485.
По одному она будет Master и опрашивать датчик. По другому - Slave, и её будет опрашивать SCADA

ПЕРЕД всем этим хорошо бы проверить то, в кком виде датчик отдаёт данные.
А то ПРка может отдавать такие варианты данных:
* FLOAT32 (надо поиграться с порядком байт)
* 32-битное число (2 регистра), умноженное на что-то для сдвига десятичной точки
* 16-битное число (1 регистр), тоже умноженное для сдвига

А если там был какой-то хитрый формат типа 64-битного числа - то ПРка 64 бита не умеет

МихаилГл
28.10.2025, 10:19
Извиняюсь, какая то странная конфигурация, обычно контроллер считывает данные с оборудования, а не скада. Это какой то костыль, или не было на контроллере модбас интерфейса?

kondor3000
28.10.2025, 10:19
Вопрос, сколько регистров надо преобразовать, у ПР200 всего 64 регистра в слейве и адреса 512 -576

Вам нужен ПЛК110 [М-02] или лучше ПЛК2хх (можно задать адреса слейва, например от 1000 )

1exan
28.10.2025, 10:22
Всех приветствутю! есть вопрос касаемо преобразования регистров модбаса. Проблема заключается в следующем на моем преприятии есть в эксплуатации приборы (преобразователи давления расплава) которые уже давно сняты с производства замен них вышли новые но вот незадача карта регистров модбас у них отличается если ранее фактичские показания давления хранились к примеру в регистре 1001 то в новом приборе они хранятся уже в регистре 1031 данные из этих регистров грузятся в скаду, данные из скады попадают в контроллер и использутся в различных математичских функциях. сразу хочу сказать что доступа к скаде мы не имеем (она запаролена)
Хотелось бы услышать ваше мнение возможно ли сделать так что бы при помощи пр200 сделать подмену регистров тоесть счиать с прибора 1031 преобразовать его в 1001 и засунуть эти преобразованные данные поднужным регистром уже в скаду?

Наверно не получится - у ПР200 область пользовательских SLAVE переменных начинается с 512 (вроде) и это не изменить.
Есть контроллеры, в которых можно задать произвольную нумерацию регистров

hulejke
28.10.2025, 11:12
В общем виде - ДА. Нужна будет ПРка с двумя RS-485.
По одному она будет Master и опрашивать датчик. По другому - Slave, и её будет опрашивать SCADA

ПЕРЕД всем этим хорошо бы проверить то, в кком виде датчик отдаёт данные.
А то ПРка может отдавать такие варианты данных:
* FLOAT32 (надо поиграться с порядком байт)
* 32-битное число (2 регистра), умноженное на что-то для сдвига десятичной точки
* 16-битное число (1 регистр), тоже умноженное для сдвига

А если там был какой-то хитрый формат типа 64-битного числа - то ПРка 64 бита не умеет

обычный с 16 битный по сути просто нужно сдвинуть нумерацию регистров

hulejke
28.10.2025, 11:12
Наверно не получится - у ПР200 область пользовательских SLAVE переменных начинается с 512 (вроде) и это не изменить.
Есть контроллеры, в которых можно задать произвольную нумерацию регистров

можете если не сложно подсказать конкретные примеры?

EFrol
28.10.2025, 11:20
Когда-то ОВЕН предлагал такой продукт как OPC/DDE Lectus (https://insat.ru/lectus/lectus-modbus-opc-server/).
С его помощью я подменял Modbus-устройства целиком.
Он позволяет полностью мимикрировать под любое Modbus-устройство.
Т.е. считывать любые данные из физического устройства и раздавать под другим ID и адресами виртуального.
Ни одна Scada подмены не замечала!!!

hulejke
28.10.2025, 11:22
Когда-то ОВЕН предлагал такой продукт как OPC/DDE Lectus (https://insat.ru/lectus/lectus-modbus-opc-server/).
С его помощью я подменял Modbus-устройства целиком.
Он позволяет полностью мимикрировать под любое Modbus-устройство.
Т.е. считывать любые данные из физического устройства и раздавать под другим ID и адресами виртуального.
Ни одна Scada подмены не замечала!!!

на каком железе поднимали сервер?

EFrol
28.10.2025, 11:33
Сейчас ОВЕН предлагает MasterOPC Server (https://owen.ru/product/opc_server_insat), что вероятно тоже самое с небольшими отличиями.
OPC Lectus работает на любой Windows. Ставим рядом со Scada'ой - на одном ПК.

hulejke
28.10.2025, 12:00
Сейчас ОВЕН предлагает MasterOPC Server (https://owen.ru/product/opc_server_insat), что вероятно тоже самое с небольшими отличиями.
OPC Lectus работает на любой Windows. Ставим рядом со Scada'ой - на одном ПК.

опять же в каком формате будет раздавать данные сервер в OPC или MODBUS? и еще есть проблема что получается на каждый прибор мне будет нужен свой отдельный сервер ибо я не смогу одним устроством сразу быть первым втором третьем слэйвом для мастера (скада)

EFrol
28.10.2025, 12:23
Я делаю так:
- настраиваю один аппаратный порт (например, AC4 USB-RS485), как Slave
- и добавляю в его конфигурацию все ID от подменяемых Modbus-устройств, с настройкой Modbus-таблицы каждого как у оригинала
- к этому порту подвожу RS485-сеть, т.е. ту, которую опрашивает Scada
- настраиваю другой аппаратный порт, как Master
- и добавляю в его конфигурацию новые Modbus-приборы
- для каждого считанного регистра нового, указываю как преобразовать и в какой регистр записать у подменяющего

Cоответственно у новых приборов своя сеть, опрашиваемая Lectus,
которая отвечает на запросы Scada при обращении к конкретным ID.
Кстати, передаются запросы не только на чтение, но и на запись!!!

У Lectus свой скриптовый язык, чтобы "блоху подковать".
У MasterOPC для этого встроен язык Lua. Короче, возможностей в разы больше!!!

hulejke
28.10.2025, 12:55
Я делаю так:
- настраиваю один аппаратный порт (например, AC4 USB-RS485), как Slave
- и добавляю в его конфигурацию все ID от подменяемых Modbus-устройств, с настройкой Modbus-таблицы каждого как у оригинала
- к этому порту подвожу RS485-сеть, т.е. ту, которую опрашивает Scada
- настраиваю другой аппаратный порт, как Master
- и добавляю в его конфигурацию новые Modbus-приборы
- для каждого считанного регистра нового, указываю как преобразовать и в какой регистр записать у подменяющего

Cоответственно у новых приборов своя сеть, опрашиваемая Lectus,
которая отвечает на запросы Scada при обращении к конкретным ID.
Кстати, передаются запросы не только на чтение, но и на запись!!!

У Lectus свой скриптовый язык, чтобы "блоху подковать".
У MasterOPC для этого встроен язык Lua. Короче, возможностей в разы больше!!!

хорошо но должен же быть один выходной порт со своим адресом устройства для каждого прибора или я не прав?

EFrol
28.10.2025, 13:23
Я не могу понять Ваш вопрос.
Давате так. Вот пример конфигурации:
86438

Scada настроена как Slave, на запросы, приходящие в этот порт отвечают виртуальные Dev1, Dev2, Dev3, у каждого свой ID и своя Modbus-таблица.
NewDevice настроена как Master, использует другой порт и опрашивает свои реальные Dev1, Dev2, Dev3, у каждого свой ID.
И пример настройки, который значение из регистра 0x0000 реального Dev1 переносит в такой же регистр виртуального Dev1.
Вопросы?

melky
28.10.2025, 13:23
Мне кажется НЕТ, потому что выбирать в этом диапазоне регистры вероятно вы не сможете именно в ПР200 для слейва.
Чисто совет, поставьте на свой ПК RapidScada + платный от разработчика Modbus Slave и сможете через преобразователи интерфейсов подменить данные (драйвер слейва можно пощупать, генерируя ключи на пару дней)
забыл, потребуется модуль автоуправления, тоже платный.

hulejke
28.10.2025, 13:29
Я не могу понять Ваш вопрос.
Давате так. Вот пример конфигурации:
86438

Scada настроена как Slave, на запросы, приходящие в этот порт отвечают виртуальные Dev1, Dev2, Dev3, у каждого свой ID и своя Modbus-таблица.
NewDevice настроена как Master, использует другой порт и опрашивает свои реальные Dev1, Dev2, Dev3, у каждого свой ID.
И пример настройки, который значение из регистра 0x0000 реального Dev1 переносить в такой же регистр виртуального Dev1.
Вопросы?

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

EFrol
28.10.2025, 13:33
Эти три прибора будут в одной сети? У каждого свой ID? (ID - Modbus-адрес прибора)
Lectus без проблем их опросит с одного порта.

hulejke
28.10.2025, 13:44
Эти три прибора будут в одной сети? У каждого свой ID? (ID - Modbus-адрес прибора)
Lectus без проблем их опросит с одного порта.

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

EFrol
28.10.2025, 13:49
Когда Scada запросит устройство по ID, которого реально не будет в сети, но оно будет в Lectus, то Lectus ответит вместо этого устройства.
Все IDы Вам же известны? Вы их зададите виртуальным устройствам в Lectus и всё!!!

hulejke
28.10.2025, 13:50
Когда Scada запросит устройство по ID, которого реально не будет в сети, но оно будет в Lectus, то Lectus ответит вместо этого устройства.
Все IDы Вам же известны? Вы их зададите виртуальным устройствам в Lectus и всё!!!

теперь понял спасибо

EFrol
28.10.2025, 13:51
Мне кажется НЕТ, потому что выбирать в этом диапазоне регистры вероятно вы не сможете.

1001? Ну пусть 0x03E9
86439
В Lectus без проблем можно создать регистр с любым адресом.
86440

EFrol
28.10.2025, 13:58
теперь понял спасибо

IDы реальных и виртуальных устройств могут не совпадать, т.к. они находятся в разных сетях.
Если Вы включите Log в Lectus при работе со Scada, то запросы к ID, которых у него нет, он будет выводить "Нет устройства с таким ID" и отвечать не будет.
Соответственно, на запрос ответит реальный прибор, и наоборот.

При составлении Modbus-таблицы, можно указывать только те регистры, которые реально будут нужны.
Указывать все необязательно.
Если забыли что-то добавить, то Lectus в Log'е сообщит, что было обращение к несуществующему адресу и что его надо добавить.

EFrol
28.10.2025, 14:27
Я же с помощью Lectus еще делаю:
- все оперативные параметры собираю в одном виртуальном ModbusTCP-сервере с доступом из разных мест для нескольких мастеров (например, панели СП3хх или из другого ПО) (например, совместный доступ к счётчику газа - для контролирующей организации через GSM и нам на панель)
- создаю виртуальную сеть из приборов для отладки проектов на СП3хх, ПР, ПЛК и и т.д.
- протоколирую все параметры в SQL-сервере с визуализацией в виде графиков и отчётов

hulejke
28.10.2025, 14:27
IDы реальных и виртуальных устройств могут не совпадать, т.к. они находятся в разных сетях.
Если Вы включите Log в Lectus при работе со Scada, то запросы к ID, которых у него нет, он будет выводить "Нет устройства с таким ID" и отвечать не будет.
Соответственно, на запрос ответит реальный прибор, и наоборот.

При составлении Modbus-таблицы, можно указывать только те регистры, которые реально будут нужны.
Указывать все необязательно.
Если забыли что-то добавить, то Lectus в Log'е сообщит, что было обращение к несуществующему адресу и что его надо добавить.

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

SCADA записывает в 1001 → Lectus преобразует → Записывает в 1031 прибора