1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Modbus

Ответить

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

Ребят подскажите:Карта устройства
WriteStartReg - 0
WriteRegCnt - 200
ReadStartReg - 2000
ReadRegCnt - 400
------------------------------
А команды следующие-
P2.Cmd[0].Enable -1
P2.Cmd[0].IntAdd -2100
P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 5
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 3
P2.Cmd[0].DevAdd - 90

P2.Cmd[0].Enable -1
P2.Cmd[0].IntAdd -1600
P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 1
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 5
P2.Cmd[0].DevAdd - 1
_______________________
Вопрос по функции 5, считать бит данных с устройства будет (P2.Cmd[0].DevAdd - 1) я так понял с адреса регистр 00002-> в ведомом устройстве.А вот тег как узнать (P2.Cmd[0].IntAdd -1600), я думал что он должен быть в диапазоне либо WriteData:0-199, ReadData:2000-2399?

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

Modbus

Сообщение Ryzhij »

ArtemKat22 писал(а): 12 апр 2021, 20:46 А команды следующие-
P2.Cmd[0].Enable -1
P2.Cmd[0].IntAdd -2100
P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 5
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 3
P2.Cmd[0].DevAdd - 90

P2.Cmd[0].Enable -1
P2.Cmd[0].IntAdd -1600
P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 1
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 5
P2.Cmd[0].DevAdd - 1
Вас нисколько не смущает, что у обоих групп один и тот же индекс команды?
P2.Cmd[0]....
Или это у Вас настройки разных модулей? Модули-то какие кстати?
Это раз.

Теперь о теге P2.Cmd[х].IntAdd и его значениях 2100 либо 1600. Это смещение во внутреннем массиве данных контроллера, обычно выраженное в тех же "попугаях", что и операнд команды.
Для команды 3 (чтение регистров) это массив данных чтения и смещение в словах, а для команды 5 (запись бита) это массив данных записи и смещение в битах.
[+] О смещении для битовых команд
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).
Если соблаговолите указать-таки тип модуля, я Вам, глядишь, мануал подгоню :ext_secret:
Почитаете...
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

1. Модуль MVI56-MCMR . 1 модуль.
2. судя по мануалу, на моем примере функция 5 запишет данные в ведомое устройство по адресу 2 , когда значение WriteData[100].0 изменится(P2.Cmd[0].IntAdd -1600/16=100).
3. А функция 3, с адреса 90 в ведомом устройстве, запишет в ReadData[100].0 , а прочитаю я их по адресам с 40091 по 40095.
ПРАВИЛЬНО ВСЕ?

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

Modbus

Сообщение Ryzhij »

Если модуль один, то вряд ли у Вас верная запись конфигурации. Не может быть, чтобы по одному и тому же порту одна и та же команда имела две дефиниции.
Или Вами выложены две разных конфигурации?

Отправлено спустя 2 минуты 42 секунды:
ArtemKat22 писал(а): 13 апр 2021, 19:30 судя по мануалу, на моем примере функция 5 запишет данные в ведомое устройство по адресу 2 , когда значение WriteData[100].0 изменится(P2.Cmd[0].IntAdd -1600/16=100).
Судя по мануалу, команда исполняется постоянно, а не по изменению значения данных, ибо .Enable = 1, а не 2.
И вроде как смещение у Вас там для пятой функции не 1600, а 2100.
"Тщательнее надоть!
Мой калькулятор в телефоне подсказывает, что 2100 бит с начала массива это 4-й бит 131-го слова. А Ваш какой результат выдаёт?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

Модулей семь. С индексацией НАКОЛОЛСЯ. А конфиг комманд:
P2.Cmd[0].Enable -1
P2.Cmd[0].IntAdd -2100
P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 5
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 3
P2.Cmd[0].DevAdd - 90

P2.Cmd[1].Enable -1
P2.Cmd[1].IntAdd -1600
P2.Cmd[1].PoIIInt - 0
P2.Cmd[1].Count - 1
P2.Cmd[1].Swap - 0
P2.Cmd[1].Device - 1
P2.Cmd[1].Func - 5
P2.Cmd[1].DevAdd - 1

P2.Cmd[2].Enable -1
P2.Cmd[2].IntAdd -2105
P2.Cmd[2].PoIIInt - 0
P2.Cmd[2].Count - 5
P2.Cmd[2].Swap - 0
P2.Cmd[2].Device - 2
P2.Cmd[2].Func - 3
P2.Cmd[2].DevAdd - 90

P2.Cmd[3].Enable -1
P2.Cmd[3].IntAdd -1605
P2.Cmd[3].PoIIInt - 0
P2.Cmd[3].Count - 1
P2.Cmd[3].Swap - 0
P2.Cmd[3].Device - 2
P2.Cmd[3].Func - 5
P2.Cmd[3].DevAdd - 1

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

Modbus

Сообщение Ryzhij »

Вот это похоже на правду. :ges_hmm:
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

Получается в прошлом сообщении:
‐‐------‐‐
судя по мануалу, на моем примере функция 5 запишет данные в ведомое устройство по адресу 2 , когда значение WriteData[100].0 изменится(P2.Cmd[0].IntAdd -1600/16=100).
3. А функция 3, с адреса 90 в ведомом устройстве, запишет в ReadData[100].0 , а прочитаю я их по адресам с 40091 по 40095.
‐‐---------
НЕ ОШИБСЯ!
‐--------------
А вот вопрос к ведомому устройству, если в MVI56 DevAddress 90, то введомом тоже 90 или 91?

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

Modbus

Сообщение Ryzhij »

Это троллинг такой? :ext_secret:
ArtemKat22 писал(а): 14 апр 2021, 08:42 судя по мануалу, на моем примере функция 5 запишет данные в ведомое устройство по адресу 2 , когда значение WriteData[100].0 изменится(P2.Cmd[0].IntAdd -1600/16=100).
3. А функция 3, с адреса 90 в ведомом устройстве, запишет в ReadData[100].0 , а прочитаю я их по адресам с 40091 по 40095.
‐‐---------
НЕ ОШИБСЯ!
‐--------------
В то время как команда с индексом 0 у Вас сконфигурирована как:
ArtemKat22 писал(а): 13 апр 2021, 21:51 P2.Cmd[0].Enable -1
P2.Cmd[0].IntAdd -2100

P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 5
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 3
P2.Cmd[0].DevAdd - 90
Я вообще не пойму куда Вы смотрите, и как считаете.
"Когда значение изменится..."
ГДЕ хоть в одной команде у Вас ...Enable = 2 ?!
Какая из них передаётся по изменению данных, а не циклически?

В ведомое устройство 2 по адресу 1 с функцией 5 пишет только 3-я команда
ArtemKat22 писал(а): 13 апр 2021, 21:51 P2.Cmd[3].Enable -1
P2.Cmd[3].IntAdd -1605
P2.Cmd[3].PoIIInt - 0
P2.Cmd[3].Count - 1
P2.Cmd[3].Swap - 0
P2.Cmd[3].Device - 2
P2.Cmd[3].Func - 5
P2.Cmd[3].DevAdd - 1
и у нее смещение данных от начала внутреннего массива 1605 бит.
Если для Вас это не ошибка, то я уж и не знаю...
Разбирайтесь сами.
ArtemKat22 писал(а): 14 апр 2021, 08:42 А вот вопрос к ведомому устройству, если в MVI56 DevAddress 90, то введомом тоже 90 или 91?
Это зависит от принятого для вашего устройства способа адресации, с ноля она там начинается или с единицы.
В MVI-56 адресация с ноля.

Отправлено спустя 30 минут 20 секунд:
ArtemKat22 писал(а): 14 апр 2021, 08:42 3. А функция 3, с адреса 90 в ведомом устройстве, запишет в ReadData[100].0 , а прочитаю я их по адресам с 40091 по 40095.
Ткните пальцем, где и какая команда с кодом функции 3 у вас читает с 90-го внутреннего адреса устройства и имеет при этом смещение в 100 слов?
ArtemKat22 писал(а): 13 апр 2021, 21:51 P2.Cmd[0].Enable -1
P2.Cmd[0].IntAdd -2100
P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 5
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 3
P2.Cmd[0].DevAdd - 90

***************
P2.Cmd[2].Enable -1
P2.Cmd[2].IntAdd -2105
P2.Cmd[2].PoIIInt - 0
P2.Cmd[2].Count - 5
P2.Cmd[2].Swap - 0
P2.Cmd[2].Device - 2
P2.Cmd[2].Func - 3
P2.Cmd[2].DevAdd - 90
Отправлено спустя 4 минуты 22 секунды:
ArtemKat22 писал(а): 13 апр 2021, 21:51 Модулей семь
Может быть в этом всё дело? У каждого своя конфигурация, а вы мне тут голову морочите!
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

---- В ведомое устройство по адресу 2 с функцией 5 пишет только 3-я команда---
Я имел ввиду регистр в ведомом устройстве.?
Во всех командах регистр в ведомых устройствах будет 2?

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

Modbus

Сообщение Ryzhij »

У каждой команды своя конфигурация.
В соседней ветке viewtopic.php?f=234&t=14954 я уже давал значение тегов для конфигурации команд модуля MVI56-MCM, для вашего - всё то же самое.
[+] Из мануала...
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
Отправлено спустя 5 минут 2 секунды:
Разница только в размере внутреннего массива регистров
Ryzhij писал(а): 14 апр 2021, 11:06 Determines where in the module’s 5000-register database the data will be stored to or written from.
у MCM это 5000, а у MCMR он уменьшен.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

Получается обе команды с функцией 3 , я буду считывать с DevAddress 90 и читать их с 40091 по 40095.
Я ИМЕЮ ВИДУ ЧТО СМЕЩЕНИЯ НЕТ, МЕНЯЕТСЯ ДЕВАЙС В КОМАНДЕ. ДЛЯ ВЕДОМЫХ УСТРОЙСТВ РЕГИСТР ЗАПИСИ БУДЕТ 2 ДЛЯ ФУНКЦИИ 5. ДЛЯ 3 ФУНКЦИИ СООТВЕТСТВЕННО либо 90 или 91

Отправлено спустя 9 минут 35 секунд:
Все правильно?

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

Modbus

Сообщение Ryzhij »

ArtemKat22 писал(а): 14 апр 2021, 11:19 Получается обе команды с функцией 3 , я буду считывать с DevAddress 90 и читать их с 40091 по 40095.
Я ИМЕЮ ВИДУ ЧТО СМЕЩЕНИЯ НЕТ, МЕНЯЕТСЯ ДЕВАЙС В КОМАНДЕ. ДЛЯ ВЕДОМЫХ УСТРОЙСТВ РЕГИСТР ЗАПИСИ БУДЕТ 2 ДЛЯ ФУНКЦИИ 5. ДЛЯ 3 ФУНКЦИИ СООТВЕТСТВЕННО либо 90 или 91
Вы про эти? -
ArtemKat22 писал(а): 13 апр 2021, 21:51 P2.Cmd[0].Enable -1
P2.Cmd[0].IntAdd -2100
P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 5
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 3
P2.Cmd[0].DevAdd - 90
***************
P2.Cmd[2].Enable -1
P2.Cmd[2].IntAdd -2105
P2.Cmd[2].PoIIInt - 0
P2.Cmd[2].Count - 5
P2.Cmd[2].Swap - 0
P2.Cmd[2].Device - 2
P2.Cmd[2].Func - 3
P2.Cmd[2].DevAdd - 90
Так тут обе команды второго порта (P2), нулевая (Cmd[0]) и вторая (Cmd[2]), читают (Func - 3) по 5 (Count - 5) регистров начиная с 90-го(или 91-го) (DevAdd - 90) из разных внешних устройств.
Нулевая команда читает из устройства с адресом 1(Device - 1), а вторая из устройства с адресом 2 (Device - 2).
Содержимое прочитанных регистров из устройства 1 оказывается в ReadData[2100]...ReadData[2104], а регистры устройства 2 будут скопированы в ReadData[2105]...ReadData[2109].
Последний раз редактировалось Ryzhij 14 апр 2021, 11:40, всего редактировалось 1 раз.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

Я отдаю команду по функции 5 например пуск/останов на вторичный прибор а какой регистр придет?

Отправлено спустя 2 минуты 7 секунд:
Со смещение devadd mvi56=1 , в slave регистр будет2?

Отправлено спустя 2 минуты 47 секунд:
Регистр катушки в slave будет 2 правильно.

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

Modbus

Сообщение Ryzhij »

ArtemKat22 писал(а): 14 апр 2021, 11:39 Я отдаю команду по функции 5 например пуск/останов на вторичный прибор а какой регистр придет?

Отправлено спустя 2 минуты 7 секунд:
Со смещение devadd mvi56=1 , в slave регистр будет2?
Во первых, 5 функция работает не регистрами, а с битами. Соответственно, DevAdd - 1 это адрес бита во внешнем устройстве.
Если в карте Modbus вашего устройства принята нумерация с ноля, как и в MVI56, то адресован будет первый бит, а если там нумерация начинается с единицы, то второй.

Отправлено спустя 3 минуты 56 секунд:
ArtemKat22 писал(а): 14 апр 2021, 11:42 Регистр катушки в slave будет 2 правильно.
У катушки в адресации MVI56 для 5-й функции указывается бит.
Если у вас в Modbus-карте периферии указаны регистры и биты в них, то адрес для MVI56 надо пересчитывать до битового.
Для связи с сименсом приходится ещё играться со свопингом.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

В периферии адресация вроде с 0. И у каждого из устройств судя по командам функции 5, бит адрес будет одинаков. На device 1,2... будет приходить на одинаковый адрес бита (команды в принципе одинаковые меняется только Device 1 ,2,3....., я имею функцию 5).

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

Modbus

Сообщение Ryzhij »

ArtemKat22 писал(а): 13 апр 2021, 21:51 P2.Cmd[1].Enable -1
P2.Cmd[1].IntAdd -1600
P2.Cmd[1].PoIIInt - 0
P2.Cmd[1].Count - 1
P2.Cmd[1].Swap - 0
P2.Cmd[1].Device - 1
P2.Cmd[1].Func - 5
P2.Cmd[1].DevAdd - 1
********
P2.Cmd[3].Enable -1
P2.Cmd[3].IntAdd -1605
P2.Cmd[3].PoIIInt - 0
P2.Cmd[3].Count - 1
P2.Cmd[3].Swap - 0
P2.Cmd[3].Device - 2
P2.Cmd[3].Func - 5
P2.Cmd[3].DevAdd - 1
Из того, что Вы опубликовали, да, обе команды циклически посылают в первые койлы двух разных устойств содержимое своих битов.
В устройство 1 будет отсылаться WriteData[100].0, а в устройство 2 - WriteData[100].5
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

:thankyou:

Автор темы
ArtemKat22
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 12 апр 2021, 20:23
Имя: Диман
Страна: Россия
город/регион: Самара
Поблагодарили: 1 раз

Modbus

Сообщение ArtemKat22 »

Извините еще вопрос, если команда имеет вид
[0].Enable -1
P2.Cmd[0].IntAdd -2100
P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 5
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 3
P2.Cmd[0].DevAdd - 90
Я же буду читать регистр с 40091?

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

Modbus

Сообщение Ryzhij »

ArtemKat22 писал(а): 15 апр 2021, 13:17 Извините еще вопрос, если команда имеет вид
[0].Enable -1
P2.Cmd[0].IntAdd -2100
P2.Cmd[0].PoIIInt - 0
P2.Cmd[0].Count - 5
P2.Cmd[0].Swap - 0
P2.Cmd[0].Device - 1
P2.Cmd[0].Func - 3
P2.Cmd[0].DevAdd - 90
Я же буду читать регистр с 40091?
В общем, да, читаться будут 40091-40095 (.Count - 5), если нумерация в адресуемом слейве #1(.Device - 1) начинается c 40001, или 40090-40094, если нумерация там начинается с 40000.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
Ответить

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