Показать сообщение отдельно
Старый 23.07.2008, 16:45   #161
gtfox
Новичок
 
Регистрация: Dec 2007
Сообщения: 28
Благодарил(а): 1 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Question ModBus RTU

Есть задача: управлять устройствами 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 не получится?
Гы, открыв Лоджик, увидел что для любого "типа" можно выставить любое "направление"... Мда, конечно лучше бы можно было выставить номер функции...
--------
Что-то я вообще не пойму что делать, может я чего-то недопонимаю?
Вложения
Тип файла: zip Формат команд Modbus серии LanDrive.zip (49.2 Кбайт, 185 просмотров)

Последний раз редактировалось gtfox, 23.07.2008 в 17:14
gtfox вне форума   Ответить с цитированием