IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> QJ71MB91 (Write Single Coil (FC: 05)), Реализовываем Write Single Coil (Function: 05) собственными силами
SlySnake
сообщение 7.04.2017 - 12:57
Сообщение #1


Читатель
*

Группа: Пользователи
Сообщений: 1
Регистрация: 7.04.2017
Пользователь №: 10849



Салют коллеги.
Сегодня хочу поведать Вам с какими трудностями мы столкнулись при настройке записи Modbus Function:05 (Write Single Coil) и описать путь решения данной задачи.
Начнем с задачи: в наличии контроллер Q06UDEH, к нему прикручен модуль QJ71MB91. Нужно прочитать пул регистров (Function: 04), пул битов(Function:02), и записать 3 катушки(Function:05) со Slave-контроллера.
Первым делом я решил сходить на сайт Mitsubishi и поискать подходящую библиотеку для настройки передачи данных по Modbus от нашего Masterа(QJ71MB91) к Slave (стороннему контроллеру). Из четырех имеющихся библиотек подходящей оказалась только одна QJMB91ModbusSerial_V120, так как оказалась более универсальной, по сравнению с остальными, которые сделаны для конкретного оборудования. Взял ее, внедрил в GX Works 2 и начал курить мануал. В результате чтения выяснилось, что данная библиотека поддерживает только следующие функции: 01h, 02h, 03h, 04h, 0Fh, 10h, 17h. Естественно функции 05 среди них нет. Остальные библиотеки, имеющиеся на сайте Mitsubishi так же не поддерживают F05.
Было решено Read функции 02 и 04 реализовывать через QJMB91ModbusSerial_V120 lib, что в общем то легко получилось. А Write функцию 05 настраивать собственными силами.
Реализация Write Single Coil (FC:05) началась как обычно с курения манула:
QJ71MB91 MODBUSInterfaceModule GX Configurator-MB (SW1D5C-QMBU-E)
Art. no. 168869 01042009 SH(NA)-080578ENG Version G
В результате чтения выяснилось, что 01h, 02h, 03h, 04h, 0Fh, 10h, 17h (которые поддерживает библиотека QJMB91ModbusSerial_V120) используют для передачи целого массива данных функцию Z.MBRW. Но F:05 передает только отдельно каждому регистру данные и использует совсем другую функцию Z.MBREQ, видимо поэтому писатели из Mitsubishi не стали реализовывать F:05 в своей библиотеке и просто забили (БРАВО профессионалам!! :-D)
Пакет данных, передаваемый F:05, выглядит следующим образом:

Прикрепленный файл  1.JPG ( 65.52 килобайт ) Кол-во скачиваний: 11


Далее в мануале удалось найти пример применения Function:05 написанный на LD на стр. 10.23 (256):

Прикрепленный файл  2.JPG ( 92.98 килобайт ) Кол-во скачиваний: 11


Прикрепленный файл  3.JPG ( 81.18 килобайт ) Кол-во скачиваний: 13


Начал разбираться, что куда надо писать и параллельно писать свою программу.
Нужно отправить: F:05, Slave №5, адрес регистра 0002h, значение FF00h.
Подвох заключался в написании сообщения слэйву, там мудовое построение сообщения. Эх и налюбились мы с этим. Ну как бы логично, нужно присвоить D1101 = 5h (Номер функции=05), D1102 = 0002h (адрес регистра), и D1103 = FF00 (Значение ON), как на картинке чуть выше.
А вот и нет. Это было просто не Mitsubishi, если бы они не начали играться со старшими и младшими байтами в слове.
В итоге путем брутфорса (как обычно), получить вывести рабочую формулу:

Прикрепленный файл  4.JPG ( 136.28 килобайт ) Кол-во скачиваний: 8


Объясню, как писать сообщение слэйву:
Слэйв должен получить сообщение (hex):
05 0002 FF00 (контрольную сумму в конце я упускаю, формируется автоматом)

Прикрепленный файл  5.jpg ( 77.29 килобайт ) Кол-во скачиваний: 6


Итого получилось D1101 = 0005h, D1102=FF02h, а D1103=0000h.
Все теперь работает и команда работает. Можно питать свой функциональный блок и использовать для записи F:05.

Надеюсь кому то поможет, удачи!

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 8.04.2017 - 14:31
Сообщение #2


Маньяк
*****

Группа: Пользователи
Сообщений: 925
Регистрация: 19.08.2009
Пользователь №: 9149



Сами создаём себе трудности, сами же их героически преодолеваем... Насколько помню, SlySnake, этот модуль не нуждается в библиотеках, а все настройки обмена с ведомыми, включая Автообновление, с легкостью выставляются через соответствующую утилиту, предназначенную для конфигурирования модуля.


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы