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

Не стандартный MODBUS

RS-485, ProfiBUS, 4-20 mA, Wi-Fi, GSM и так далее
Ответить

Автор темы
Rik
здесь недавно
здесь недавно
Сообщения: 5
Зарегистрирован: 26 ноя 2012, 09:56
Имя: Ким Эрнест Владимирович
Страна: Казахстан

Не стандартный MODBUS

Сообщение Rik »

Прошу помощи - консультации специалистов АСУ.
Наша организация смонтировало и наладило оборудование изготовленного в Великобритании, с возможностью подключения системы SCADA. Но специалисты из Китая, которые занимаются наладкой системы SCADA, не смогли сконфигурировать связь. Привожу их доводы, где они предполагают об использовании устройством не стандартного протокола MODBUS (В заводской документации прописывается используемый протокол MODBUS RTU):

Non-standard Modbus message issues of the CPS
During commissioning, the SCADAVantage showed CRC error and we snapped the Modbus message via communication analysis. Compared the standard Modbus (Modicon, SCADAVantage built-in) with the response message from CPS, there is a non-standard response from the CPS that result to the CRC error in the SCADAVantage. The standard and non-standard messages are listed: Standard Modicon Modbus in SCADA: Master query: 01 03 00 65 00 0D 94 10 (HEX)
Correct response: 01 03 18 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx XX XX (xx -data byte total 26 bytes; XX XX are CRC message) (HEX)
Non-standard message from CPS: 01 03 0D xx xx xx xx xx xx xx xx xx xx xx xx xx
xx xx xx xx xx xx xx xx xx xx xx xx xx XX XX (xx -data byte total 26 bytes; XX XX
are CRC message) (HEX)
The data length should be the length of bytes while not words in the standard but
from CPS, it gives the length of words.
In the SCADAVantage, it will only read 13 bytes and 2 bytes after the 13 bytes in
the message will be read as CRC which in fact is not the CRC bytes, the CRC
error happens.

Правы ли китайские специалисты или они ошибаются?

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Не стандартный MODBUS

Сообщение Василий Иванович »

Правы. В ответе длина должна быть в байтах. Вот выдержка из официальной спецификации:
6.3 03 (0x03) Read Holding Registers
This function code is used to read the contents of a contiguous block of holding registers in a remote device. The Request PDU specifies the starting register address and the number of registers. In the PDU Registers are addressed starting at zero. Therefore registers numbered 1-16 are addressed as 0-15.
The register data in the response message are packed as two bytes per register, with the binary contents right justified within each byte. For each register, the first byte contains the high order bits and the second contains the low order bits.

Request
Function code 1 Byte 0x03
Starting Address 2 Bytes 0x0000 to 0xFFFF
Quantity of Registers 2 Bytes 1 to 125 (0x7D)

Response
Function code 1 Byte 0x03
Byte count 1 Byte 2 x N*
Register value N* x 2 Bytes

*N = Quantity of Registers

Автор темы
Rik
здесь недавно
здесь недавно
Сообщения: 5
Зарегистрирован: 26 ноя 2012, 09:56
Имя: Ким Эрнест Владимирович
Страна: Казахстан

Re: Не стандартный MODBUS

Сообщение Rik »

Спасибо за ответ. Но еще вопрос на самом ли деле есть не стандартный протокол MODBUS и почему специалисты наладчики в предоставленной им в заводской документации MODBUS RTU Communications Revisions не смогли найти об этом информацию.

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

Re: Не стандартный MODBUS

Сообщение Ryzhij »

Что-то тут не вяжется, однако...
В запросе заявка на чтение 13(dec) / 0D(hex) регистров.
Если регистры стандартные 16 -битные, то в ожидаемом правильном ответе должна быть длина 26(dec) / 1A(hex) байт.
В тексте письма упоминается число 26, но в ждут, и считают правильным, почему-то 18(hex) / 24(dec) байт.
Опечатка?

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

Автор темы
Rik
здесь недавно
здесь недавно
Сообщения: 5
Зарегистрирован: 26 ноя 2012, 09:56
Имя: Ким Эрнест Владимирович
Страна: Казахстан

Re: Не стандартный MODBUS

Сообщение Rik »

Стал перечитывать заводской документ и нашел такие строки:

Register Map
The register numbers on the Register Map have been reviewed. Holding Registers, or read-write registers, are defined between 0 (0x0000) and 99 (0x0063). Input Registers, or read-only registers, are defined from 100 (0x0064) upwards.

В запросе от SCADA запрашиваются регистры - 101-113 - (01 03 00 65 00 0D 94 10)
OutVolts 101 (0x0065) Output voltage, scaled 0-1023. 853 is 50V or 200V, depending on settings
OutAmps 102 (0x0066) Output current, scaled 0-1023. 853 is 100mV on the shunt.
OutRef1 103 (0x0067) Ref1 mv ref, scaled 0-1023. Full scale is 2400mV
OutRef2 104 (0x0068) Ref2 mv ref, scaled 0-1023. Full scale is 2400mV
OutRef3 105 (0x0069) Ref3 mv ref, scaled 0-1023. Full scale is 2400mV
OutRef4 106 (0x006a) Ref4 mv ref, scaled 0-1023. Full scale is 2400mV
OutDrive 107 (0x006b) Output drive, scaled 0-1000. Full scale is 100.0% thyristor drive
ReleaseReg 108 (0x006c) Major release in high byte, minor release in low byte
DcOnHours 109 (0x006d) Actual value of DC On Timer (Hours)
DcOnSecs 110 (0x006e) Actual Value of DC On Timer (Secs), max 3599
DcOffHours 111 (0x006f) Actual value of DC Off Timer (Hours)
DcOffSecs 112 (0x0070) Actual Value of DC Off Timer (Secs), max 3599
Alarms 113 (0x0071) Bitwise OR of the following:
0x0001 High Voltage Alarm
0x0002 Low Voltage Alarm
0x0004 High Current Alarm
0x0008 Low Current Alarm
0x0010 High Reference Alarm
0x0020 Low Reference Alarm
0x1000 AC Fail
0x2000 DC Fail

может необходимо ставить функцию 04?

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

Re: Не стандартный MODBUS

Сообщение Ryzhij »

Rik писал(а):Спасибо за ответ. Но еще вопрос на самом ли деле есть не стандартный протокол MODBUS
На самом деле именно стандартный протокол МодБас, полностью отвечающий спецификации, является редкостью.
Rik писал(а):... и почему специалисты наладчики в предоставленной им в заводской документации MODBUS RTU Communications Revisions не смогли найти об этом информацию.
Надеюсь, это вопрос риторический, т.к. его есть смысл задавать господам наладчикам, а не тут на форуме.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

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

Re: Не стандартный MODBUS

Сообщение Ryzhij »

Я не пойму, чем получаемый ответ от системы по 3-ей функции не устраивает?
Используйте его.
Да и не похожи Ваши регистры на "Входные", именно "Хранения" они...
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Автор темы
Rik
здесь недавно
здесь недавно
Сообщения: 5
Зарегистрирован: 26 ноя 2012, 09:56
Имя: Ким Эрнест Владимирович
Страна: Казахстан

Re: Не стандартный MODBUS

Сообщение Rik »

Есть вот такая информация:

Таблица 1 Обозначение данных по типам
Обозначение данных по типам

Старшая цифра логического адреса - 3
Начальный логический адрес - 300001
Тип данных - Input Register - 16 битные данные (word, uint), доступ чтение.
Функции ModBus - функция 4 - чтение

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Не стандартный MODBUS

Сообщение Василий Иванович »

Фишка в том, что если пользоваться стандартом, то не нужно знать заранее размер holding register в байтах (а он может быть в принципе разный), чтобы быть в состоянии опросить. Говорим "а дай-ка мне 13 твоих регистров", а оно нам отвечает "вот вам 26 байт". И тогда мы спокойно принимаем данные и режем их по два байта. А вот если оно отвечает "вот вам 13 регистров", то мы в общем случае не можем знать заранее, сколько байт пришло, и когда кончится пакет с данными.

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

Re: Не стандартный MODBUS

Сообщение Ryzhij »

Rik писал(а):Есть вот такая информация:

Таблица 1 Обозначение данных по типам
Обозначение данных по типам

Старшая цифра логического адреса - 3
Начальный логический адрес - 300001
Тип данных - Input Register - 16 битные данные (word, uint), доступ чтение.
Функции ModBus - функция 4 - чтение
Если это про интересующие Вас регистры, то можете по-пробовать использовать 4-ю функцию.
Может быть на неё получите ответ с полем данных длиной в 26(dec) / 1A(hex) байт
Последний раз редактировалось Ryzhij 26 ноя 2012, 12:47, всего редактировалось 2 раза.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

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

Re: Не стандартный MODBUS

Сообщение Ryzhij »

Василий Иванович писал(а):Фишка в том, что если пользоваться стандартом, то не нужно знать заранее размер holding register в байтах (а он может быть в принципе разный), чтобы быть в состоянии опросить. Говорим "а дай-ка мне 13 твоих регистров", а оно нам отвечает "вот вам 26 байт". И тогда мы спокойно принимаем данные и режем их по два байта. А вот если оно отвечает "вот вам 13 регистров", то мы в общем случае не можем знать заранее, сколько байт пришло, и когда кончится пакет с данными.
М-м-да... а что Вы предлагаете случае с переменным размером регистров, в одном 16, в другом 24, в третьем 8 бит?
Извращенцы не перевелись, знаете ли...
Поэтому карту регистров знать и использовать на все 100% необходимо, а в пакете ответа обязана транслироваться именно длина поля данных в байтах.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Не стандартный MODBUS

Сообщение Василий Иванович »

... а что Вы предлагаете случае с переменным размером регистров, в одном 16, в другом 24, в третьем 8 бит?
Извращенцы не перевелись, знаете ли...
Если запрашивается некоторое количество элементов данных, то при этом подразумевается, что они равны по длине. Во всяком случае в спецификации указан определенный размер для каждого типа. Holding register можно сделать другого размера, то не переменной длины. Это будет в корне противоречить спецификации.

Автор темы
Rik
здесь недавно
здесь недавно
Сообщения: 5
Зарегистрирован: 26 ноя 2012, 09:56
Имя: Ким Эрнест Владимирович
Страна: Казахстан

Re: Не стандартный MODBUS

Сообщение Rik »

Хочется все таки обратить внимание что регистры 101-113 не Holding Registers, а Input Registers согласно заводской документации
Register Map
The register numbers on the Register Map have been reviewed. Holding Registers, or read-write registers, are defined between 0 (0x0000) and 99 (0x0063). Input Registers, or read-only registers, are defined from 100 (0x0064) upwards.

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

Re: Не стандартный MODBUS

Сообщение Ryzhij »

Rik писал(а):Хочется все таки обратить внимание что регистры 101-113 не Holding Registers, а Input Registers согласно заводской документации
Register Map
The register numbers on the Register Map have been reviewed. Holding Registers, or read-write registers, are defined between 0 (0x0000) and 99 (0x0063). Input Registers, or read-only registers, are defined from 100 (0x0064) upwards.
Видим-видим!
Вот только в 99,9(9)% случаев и те, и другие регистры прекрасно отзываются на обе команды чтения: и на 03, и на 04.
Хотя кошернее было бы запрашивать по 04-й, тут Вы правы.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: Не стандартный MODBUS

Сообщение Василий Иванович »

Если опросить по FC4, то и там в ответе длина должна быть в байтах. Может быть, конечно, что в этом случае оно отвечает корректно, хотя вряд ли.

ASUTP_PLC
эксперт
эксперт
Сообщения: 1055
Зарегистрирован: 11 ноя 2012, 18:21
Имя: Нурисламов Руслан М.
Страна: Казахстан
город/регион: Алматы
Благодарил (а): 23 раза
Поблагодарили: 32 раза

Re: Не стандартный MODBUS

Сообщение ASUTP_PLC »

Вставлю свои пять копеек. Из своего опыта. Я опрашивал контроллеры меж собой по Модбас, там разницы особой не было, при опросе через функцию 03 и 04, получал те же данные.
Но когда опрашивал европейский УПП по Модбасу, как-то не мог получить актуальные данные. Получал те уставки что вношу при параметрировании.
Когда опросил через 03 функцию все встало на свои места. Так что абсолютно разные смыслы могут быть в этих адресных пространствах.

Во входных регистрах и регистрах данных.

ASUTP_PLC
эксперт
эксперт
Сообщения: 1055
Зарегистрирован: 11 ноя 2012, 18:21
Имя: Нурисламов Руслан М.
Страна: Казахстан
город/регион: Алматы
Благодарил (а): 23 раза
Поблагодарили: 32 раза

Re: Не стандартный MODBUS

Сообщение ASUTP_PLC »

0D 94 10 Входной запрос спрашивает 13 регистров (D hex =>13 dec).

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

Re: Не стандартный MODBUS

Сообщение Ryzhij »

ASUTP_PLC писал(а):0D 94 10 Входной запрос спрашивает 13 регистров (D hex =>13 dec).
На тех же колёсах по второму кругу?
Да, в запросе 13 регистров, а в ответе - 13 байт данных.
Хотя по стандарту в ответе данных должно быть 26 байт.
Вероятно, регистры однобайтные (8-разрядные).
И что дальше?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)

ASUTP_PLC
эксперт
эксперт
Сообщения: 1055
Зарегистрирован: 11 ноя 2012, 18:21
Имя: Нурисламов Руслан М.
Страна: Казахстан
город/регион: Алматы
Благодарил (а): 23 раза
Поблагодарили: 32 раза

Re: Не стандартный MODBUS

Сообщение ASUTP_PLC »

Я просто момент не могу понять. В самом первом посту. 01 03 18 .... (и почему он корректен. 18 hex это 24). Написано что это стандартный ответ.

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

Re: Не стандартный MODBUS

Сообщение Ryzhij »

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

Вернуться в «Интерфейсы, протоколы, связь»