• Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  • Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже предостаточно - придумайте что-то пооригинальнее.
  • Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  • За поиск и предложение пиратского ПО - бан без предупреждения.
  • Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  • Перед тем как что-то написать - читать здесь и здесь.

Адреса Modbus

Ответить

Автор темы
Alex2011
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 30 мар 2021, 21:43
Имя: Алексей
Страна: Россия
город/регион: Astrakhan

Адреса Modbus

Сообщение Alex2011 »

Добрый день! Подскажите на установке стоит РПЧ Siemens Mastersrive для сопряжения с MVI56-MCM стоит Siemens DTU 3006, для преобразования Modbus в протокол USS -РПЧ Mastersrive.Как вытянуть адресацию Modbus Slave, хотят заменить на РПЧ другого производителя и чтобы не менять проект, тот ( производитель)вызвался поменять адресацию у себя на ПЧ. Заранее благодврен.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 4669
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 262 раза
Поблагодарили: 409 раз

Адреса Modbus

Сообщение Ryzhij »

Модули могут быть настроены через программу ЦПУ либо конфигуратором.
Во-первых, за лучшее было бы иметь проект программы из ЦПУ контроллера, который управляет MVI56-MCM.
Во-вторых, неплохо бы уточнить производителя модуля MVI56-MCM. Это Rockwell или Prosoft ?
Если Prosoft, то можно попробовать ещё выгрузить конфигурацию из модуля с помощью утилиты. Там нагляднее.
В любом случае после сбора исходных данных надо лезть в таблицу тегов ControlLogix и имея на руках мануал на MVI56-MCM смотреть значения.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
Alex2011
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 30 мар 2021, 21:43
Имя: Алексей
Страна: Россия
город/регион: Astrakhan

Адреса Modbus

Сообщение Alex2011 »

Добрый день! Модуль Prosoft, пробую соединится через порт конфигурации, программой PCB не получается, кабель RG45.

Отправлено спустя 9 минут 37 секунд:
Еще такой вопрос: Как в RSLogix 5000 сфорсировать теги Modbus? Сделали стенд прогрузили проект в шасси, со стороны инженерки нужно сфорсировать точки (для записи в modbus slave), на другом конце сборки ПК со сканером modbus.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 4669
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 262 раза
Поблагодарили: 409 раз

Адреса Modbus

Сообщение Ryzhij »

Alex2011 писал(а):
01 апр 2021, 14:13
кабель RG45
А мануал прочесть не судьба? Там RS-232. Схема переходника, если вы его потеряли, есть в мануале
Но и это Вам не надо. Конфигуратор прекрасно подключается к модулю через RSLinx.
Alex2011 писал(а):
01 апр 2021, 14:13
Как в RSLogix 5000 сфорсировать теги Modbus? Сделали стенд прогрузили проект в шасси, со стороны инженерки нужно сфорсировать точки
Я бы делал так...
1) В Logix5000 поставил бы всю задачу, в которой копируются данные в теги, на паузу (сделал бы её неактивной) или отбил бы исполнение оператора копирования массива через AFI (обычно используется именно COP).
Можно AFI и в вызов рутины воткнуть.
2) Задавал бы значения тегов прямо в Tag Monitor-е Logix-а.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


leon78
корифей
корифей
Сообщения: 727
Зарегистрирован: 25 июл 2008, 09:06
Имя: Леонид
Страна: Russia
Благодарил (а): 12 раз
Поблагодарили: 30 раз

Адреса Modbus

Сообщение leon78 »

Запросы Modbus RTU можно прослушать и расшифровать
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 4669
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 262 раза
Поблагодарили: 409 раз

Адреса Modbus

Сообщение Ryzhij »

Ryzhij писал(а):
01 апр 2021, 15:35
1) В Logix5000 поставил бы всю задачу, в которой копируются данные в теги, на паузу (сделал бы её неактивной) или отбил бы исполнение оператора копирования массива через AFI (обычно используется именно COP).
Можно AFI и в вызов рутины воткнуть.
Тут главное - не переборщить, и не отбить "до кучи" выполнение подпрограммы или AOI общения с самим модулем MVI :ext_secret:
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
Alex2011
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 30 мар 2021, 21:43
Имя: Алексей
Страна: Россия
город/регион: Astrakhan

Адреса Modbus

Сообщение Alex2011 »

Добрый день! В RSLogix для настройки команд передаваемых по протоколу Modbus, есть поля например: Enable включение, IntAddress внутрений адрес на модуле MVI56 , с которого идет чтение запись,PolInt время опроса, Count кол-во регистров, Device номер slave устройства, в моем примере РПЧ, Func функция и DevAddress адрес в ведомом устройстве, я так понимаю начальный регистр в ПЧ. Все ли я правильно понял? Пример:
Enable 1
IntAddress 0
PoIIInt 0
Count 1
Swap 0
Device 1
Func 5
DevAddress 1
То есть, как я понял происходит подача команды на запуск/ останов насоса в соответствии с функцией 5 на ПЧ с id1 в регистр 1.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 4669
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 262 раза
Поблагодарили: 409 раз

Адреса Modbus

Сообщение Ryzhij »

Все теги в RSLogix5000 относятся к сообщениям по протоколу Modbus.
И если запись одиночного выхода (функция 5 Modbus) в устройство 1 по адресу 1 из элемента 0 внутреннего массива приводит к формированию команды на пуск/останов, то да.
Вам виднее.
Я же не знаю ни карты вашего устройства, ни логики вашей программы.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
Alex2011
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 30 мар 2021, 21:43
Имя: Алексей
Страна: Россия
город/регион: Astrakhan

Адреса Modbus

Сообщение Alex2011 »

Спасибо большое!


Автор темы
Alex2011
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 30 мар 2021, 21:43
Имя: Алексей
Страна: Россия
город/регион: Astrakhan

Адреса Modbus

Сообщение Alex2011 »

Добрый день!
Фото не могу разместить? Карта следующая:
WriteStartReg :0
WriteRegCnt:200
ReadStartReg:2000
ReadRegCnt:400
ModDef.BFFail :0
ErrStatPrt: -1

И если можно еще один вопрос, по определению адресов Holding Registers (func 3)
MCM01.P1Cmd(0)
MCM01.P1Cmd(0).Enable : 1
MCM01.P1Cmd(0).IntAddress : 2050
MCM01.P1Cmd(0).PoIIInt :0
MCM01.P1Cmd(0).Count : 5
MCM01.P1Cmd(0).Swap :0
MCM01.P1Cmd(0).Device :1
MCM01.P1Cmd(0).Func: 3
MCM01.P1Cmd(0).DevAddress: 80

MCM01.P1Cmd(1) // Ранее вопрос про запись
MCM01.P1Cmd(1).Enable : 1
MCM01.P1Cmd(1).IntAddress : 0
MCM01.P1Cmd(1).PoIIInt :0
MCM01.P1Cmd(1).Count : 1
MCM01.P1Cmd(1).Swap :0
MCM01.P1Cmd(1).Device :1
MCM01.P1Cmd(1).Func: 5
MCM01.P1Cmd(1).DevAddress: 1
То есть, на сколько я понял данные с этой команды запишутся в тег MCM01.ReadData(50), а адрес Modbus будет 40081, следующий
MCM01.P1Cmd(2)
MCM01.P1Cmd(2).Enable : 1
MCM01.P1Cmd(2).IntAddress : 2055
MCM01.P1Cmd(2).PoIIInt :0
MCM01.P1Cmd(2).Count : 5
MCM01.P1Cmd(2).Swap :0
MCM01.P1Cmd(2).Device :1
MCM01.P1Cmd(2).Func: 3
MCM01.P1Cmd(2).DevAddress: 80
......MCM01.P1Cmd(3).
Здесь тогда запишутся в тег MCM01.ReadData(55), а адрес Modbus будет 40082.
Заранее спасибо!


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 4669
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 262 раза
Поблагодарили: 409 раз

Адреса Modbus

Сообщение Ryzhij »

Alex2011 писал(а):
09 апр 2021, 08:43
И если можно еще один вопрос, по определению адресов Holding Registers (func 3)
MCM01.P1Cmd(0)
MCM01.P1Cmd(0).Enable : 1
MCM01.P1Cmd(0).IntAddress : 2050
MCM01.P1Cmd(0).PoIIInt :0
MCM01.P1Cmd(0).Count : 5
MCM01.P1Cmd(0).Swap :0
MCM01.P1Cmd(0).Device :1
MCM01.P1Cmd(0).Func: 3
MCM01.P1Cmd(0).DevAddress: 80
Модуль MVI, назначенный как мастер по первому порту будет циклически отправлять в на шину команды, для которых устанавливаются параметры.
[+] Прочтите, наконец, инструкцию!
Enable
0 = Disabled
Command will not be executed, but can be enabled using command
control option in ladder logic.
1 = Enabled
Command is enabled and will be sent out to the target device.
2 = Conditional Write
Only for Func 5, 15, 6, or 16 data will be sent to the target device only
when the data to be written has changed.

IntAddress
Determines where in the module’s 5000-register database the data will be stored to or written from. For a Read command, this will determine, after information has been read from a Slave, where it will be placed in the module database.
For read commands, you should configure this for a location that is configured for READ DATA . The internal database location for the READ DATA and WRITE DATA tags is determined by the configuration in the CM.ModDef tag location.
For write data, the INT ADDRESS determines where to obtain the information to write to the Slave device. This must be a location that is configured as WRITE DATA .
Note: When using a bit level command, you must define this field at the bit level. For example, when using a unction code 1, 2 for a Read command, you must have a value of 16000 to place the data in MCM.ReadData[0] (register 1000 * 16 bits per register = 16000).

PollInt
The Poll Interval (PollInt) is the number of seconds that a Master device will wait before issuing this command.

Count
Sets how many continuous words (Function Codes 3, 4, and 16) or bits (Function Codes 1, 2, and 15) to request from the Slave device.
Valid values are 1 to 125 words for function codes 3, 4, and 16, while you can specify a range of 1 to 2000 for function codes 1, 2, and 15.
Note: These values are the maximum allowed in the Modbus protocol.
Some devices may support fewer words or bits than the maximum allowed.


Swap
Typically used when reading floating-point data, swaps the data read from the Slave device before it is placed into the module memory.
For example, you receive 4 bytes of data from the Slave (ABCD).
0 = No swapping (ABCD)
1 = Word pairs switched (CDAB)
2 = Bytes and words switched (DCBA)
3 = Bytes swapped (BADC)

Node
Node address of the device on the network to read data from, or write data to. Valid addresses are 1 to 247.
Address 0 is reserved for broadcast write commands (will broadcast a Write command to all devices on the network).

Func
Determines the Modbus function code that to issue in the command to
the Slave device. Valid values for this field are as follows:
1 = Read Coil Status
This will read Modbus addresses 0001 to 9999. These bit values indicate coil status. Use Function Code 5 or 15 to write to these registers
2 = Read Input Coils
This will read Modbus addresses 10001 to 29999. Like Function Code 1, these are also bit values, but Function Code 2 values are Read Only data values. Use Function Code 5 or 15 to write to these registers
3 = Read Holding Registers
This will read Modbus addresses 40001 to 47999. This is a 16-bit word value. Use Function Codes of 6 and 16 to write to these registers.
4 = Read Input Registers
This will read Modbus addresses 30001 to 39999. These are also 16-bit word values, but are Read Only data. The Modbus Master cannot write to these registers.
5 = Force (Write) Single Coil Status
This will write to Modbus addresses 0001 to 9999. This command will write to only one coil. Use Function Code 15 to write to multiple coils.
6 = Preset (Write) Single Register
This will write to Modbus addresses 40001 to 47999. This command writes a single register value out to a Slave device. Use Function Code 16 to write to multiple registers.
15 = Force (Write) Multiple Coil
This will write multiple coil values to the Slave addresses 0001 to 9999.
16 = Preset (Write) Multiple Register
This will write multiple register values to the Slave device at addresses 40001 to 49999.

DevAddress
Specifies the Modbus Slave address for the registers associated with that command. This is the offset address for the Modbus Slave device.
With Modbus, to read an address of 40001, what will actually be transmitted out port is Function Code 03 (one byte) with an address of 00 00 (two bytes). This means that to read an address of 40501, use Func 3 with a DevAddress of 500.
This applies to Modbus addresses 10001 to 47999.

Below is a definition that will help with your DevAddress configuration:

Function Codes 1, 5, or 15
DevAddress = Modbus address in device - 0001
Example:
Modbus address 0001 = DevAddress 0
Modbus address 1378 = DevAddress 1377


Function Code 2
DevAddress = Modbus address in device - 10001
Example:
Modbus address 10001 = DevAddress 0
Modbus address 10345 = DevAddress 344


Function Codes 3, 6, or 16
DevAddress = Modbus address in device - 40001
Example:
Modbus address 40001 = DevAddress 0
Modbus address 40591 = DevAddress 590


Function Code 4

DevAddress = Modbus address in device - 30001
Example:
Modbus address 30001 = DevAddress 0
Modbus address 34290 = DevAddress 4289
Это для было из раздела 3.2.2 Master Command Configuration на 45 странице для стандартной адресации.
https://disk.yandex.ru/i/w3Bephmn0YvX_A
Смещения для команд НЕ НАКАПЛИВАЮТСЯ. Для каждой команды оно абсолютное, от начала массива.
Вы можете отсылать одни и те же данные в разные устройства по разным адресам.

В инструкции также описаны и нестандартные виды адресации
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
Alex2011
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 30 мар 2021, 21:43
Имя: Алексей
Страна: Россия
город/регион: Astrakhan

Адреса Modbus

Сообщение Alex2011 »

--Смещения для команд НЕ НАКАПЛИВАЮТСЯ. Для каждой команды оно абсолютное, от начала массива.
Вы можете отсылать одни и те же данные в разные устройства по разным адресам.----


То есть адресация в принципе может начинатся с 40001-... не обязательно со смещением с 80 как параметре. Я так понял.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 4669
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 262 раза
Поблагодарили: 409 раз

Адреса Modbus

Сообщение Ryzhij »

Конечно. Вы же рассматриваете конкретный периферийный прибор, откуда читаются данные, и конкретную программу, которая их читает и распихивает по тегам контроллера куда ей надо.
Для функции 3 адресу 40001 будет соответствовать DevAddress=0, а функция 3 с DevAddress=80 будет читать начиная с адреса 40081 количество регистров, указанное в Count.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
Alex2011
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 30 мар 2021, 21:43
Имя: Алексей
Страна: Россия
город/регион: Astrakhan

Адреса Modbus

Сообщение Alex2011 »

То есть, несмотря на то что команд много, с 1 и 2 устройства и последующих, MVI будет у всех устройств судя по этой настройке считывать с 40081 адреса, меняется только device. Правильно понял?


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 4669
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 262 раза
Поблагодарили: 409 раз

Адреса Modbus

Сообщение Ryzhij »

Alex2011 писал(а):
09 апр 2021, 12:51
судя по этой настройке
По какой "по этой"? Мне что, "телепатнуть" должно что именно у вас там с конфигурировано?
Каждая команда выдаётся модулем в соответствии с её, команды, собственными настройками.
Какие они у вас там, и что в них меняется, видите только вы.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
Alex2011
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 30 мар 2021, 21:43
Имя: Алексей
Страна: Россия
город/регион: Astrakhan

Адреса Modbus

Сообщение Alex2011 »

Ошибся с Device
MCM01.P1Cmd(0)
MCM01.P1Cmd(0).Enable : 1
MCM01.P1Cmd(0).IntAddress : 2050
MCM01.P1Cmd(0).PoIIInt :0
MCM01.P1Cmd(0).Count : 5
MCM01.P1Cmd(0).Swap :0
MCM01.P1Cmd(0).Device :1
MCM01.P1Cmd(0).Func: 3
MCM01.P1Cmd(0).DevAddress: 80
‐‐---------
MCM01.P1Cmd(2)
MCM01.P1Cmd(2).Enable : 1
MCM01.P1Cmd(2).IntAddress : 2055
MCM01.P1Cmd(2).PoIIInt :0
MCM01.P1Cmd(2).Count : 5
MCM01.P1Cmd(2).Swap :0
MCM01.P1Cmd(2).Device :2
MCM01.P1Cmd(2).Func: 3
MCM01.P1Cmd(2).DevAddress: 80

Теги просмотрел MCM01.ReadData(50), MCM01.ReadData(55).

Отправлено спустя 1 минуту 57 секунд:
Вопрос и был с обоих устройств буду считывать 40081?


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 4669
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Страна: Россия
город/регион: Рязань
Благодарил (а): 262 раза
Поблагодарили: 409 раз

Адреса Modbus

Сообщение Ryzhij »

Alex2011 писал(а):
09 апр 2021, 13:31
с обоих устройств буду считывать 40081
Именно так. По пять регистров начиная с 40081 из узлов 3 и 2.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр

Ответить

Вернуться в «Общие вопросы»