Есть задача: управлять устройствами LanDrive по ModBus RTU (Формат команд ниже).
Вот
здесь увидел "Соответствие функций чтения/записи переменным"
Устройства LanDrive используют функции 02, 05, 16 (02h, 05h, 10h)
Как выяснилось
отсюда , из-за ошибки, вместо 05 они используют функцию 06.
Цитата:
SMH-master посылает запросы с функциями 01h, 02h, 03h, 04h, 0Fh, 10h - если разрешено использование групповых запросов и использует функции 01h, 02h, 03h, 04h, 05h, 06h, если использование групповых запросов запрещено.
|
Возьмем к примеру
Цитата:
=== Блок "Вход" типа bool.
Название_modbus: coil status
Функция_logix: R/W(out)
Тип_logix: boolean
Функция_OPC: R01/W05 или R01/W15
Тип_OPC: boolean
|
или
Цитата:
=== Блок "Вход" типа int.
Название_modbus: holding registers
Функция_logix: R/W(out) либо R(out)
Тип_logix: integer
Функция_OPC: R03/W06 или R03/W16
Тип_OPC: small integer
|
Вопросы:
1) Если разрешено использование групповых запросов то использует функции R01/W15 или R03/W16, а если не разрешено, то R01/W05 или R03/W06? Соответственно первый косячек - не возможно использование одновременно 05/06 и 16 (и как тут быть?
)
2) Вот
тут написано, что после записи SMH _обязательно_ делает запрос на чтение этих данных. Так вот пишет он 05/06, а читает 01/03, соответственно? LanDrive позволяет читать только функцией 02. Соответственно, после записи он нихрена не прочитает, и что произойдет в SMH/Pixel?
3) Чатать функцией 02 можно
Цитата:
=== Блок "Выход" типа bool.
Название_modbus: input status
Функция_logix: R(in)
Тип_logix: boolean
Функция_OPC: R02
Тип_OPC: boolean
|
Не совсем понятно, Тип_logix: boolean, значит в лоджике будет либо 0 либо 1, хотя в документации ModBus RTU написано
Цитата:
02 Read Input Status
ОПИСАНИЕ
Чтение ON/OFF состояния дискретных входов (ссылка 1Х) в пдчиненном.
ЗАПРОС
Запрос содержит номер начального входа и количество входов для чтения. Входа адресуются начиная с 0.
Ниже приведен пример запроса на чтение входов 10197-10218 с подчиненного устройства 17.
Запрос
Имя поля Пример
(Hex)
Адрес подчиненного 11
Функция 02
Начальный адрес ст. 00
Начальный адрес мл. C4
Кол-во входов ст. 00
Кол-во входов мл. 16
Контрольная сумма --
ОТВЕТ
Статус входов в ответном сообщении передается как один выход на бит.
Если возвращаемое количество входов не кратно восьми, то оставшиеся биты в последнем байте сообщения будут установлены в 0. Счетчик байт содержит количество байт передаваемых в поле данных.
Имя поля Пример
(Hex)
Адрес подчиненного 11
Функция 01
Счетчик байт 4 005
Данные(Входы 10204-10197) AC
Данные(Входы 10212-10205) DB
Данные(Входы 10218-10213) 35
Контрольная сумма (CRC или LRC) --
|
Ну прочитать один дискретный вход еще можно, а вот получить знаечение ИК-пакета с ИК-приемника LD-IR про помощи "=== Блок "Выход" типа bool" с функцией 02 не получится?
Гы, открыв Лоджик, увидел что для любого "типа" можно выставить любое "направление"... Мда, конечно лучше бы можно было выставить номер функции...
--------
Что-то я вообще не пойму что делать, может я чего-то недопонимаю?