Добрый день. Пытаемся добится связи между Trace Mode 6.06 и преобразователем ДВ2ТСМ-А фирмы Микрофор. Проблема в том что преобразователь не поддерживает стандартные функции чтения-записи Modbus. В техподдержке Микрофор нам сказали что необходимо использовать 25 либо 19 функцию чтения-записи Modbus'a, которых нет в Trace Mode. Подскажите пожайлуста возможные пути решения данной проблемы.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Согласно стандарту Modbus, функции с 1 по 64 относятся к категории публичных функций. Часть из них определена в стандарте, остальные зарезервированы и не должны применяться пользователями стандарта для реализации своих функций. Штатной поддержки этих функций в Trace Mode 6 нет.
Используя функцию 25 в качестве пользовательской, производители этого преобразователя нарушили стандарт. Пользовательские функции в стандарте Modbus могут быть с кодами от 65 до 72 и от 100 до 110.
В Trace Mode 6 существует возможность формирования пользовательских функций Modbus с помощью каналов CALL.ChGroupReq, привязанных к переменной R_FIFO_Queue (см.документацию).
Posted by Polag (Участник № / Member № 4573) on :
Добрый день. Воспользовался вашим советом. Создал канал CALL.ChGroupReq, выставил параметр 1, в аргументе канала ARG0 выставил значения по умолчанию 19(номер функции ModBus, котроый мне нобходимо использвать). Привязал CALL.ChGroupReq к MODBUS.R_FIFO_Queue. В MODBUS.R_FIFO_Queue выставил следующие значения: Номер порта - 0x0(com1) Адрес - 0x1 Канал - 0x200 Направление - input формат - дискрет Произвожу мониторинг порта, никаких посылок в порт не идет. Подскажите пожайлуста может я что-нибудь не правильно делаю?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Вы в узле COM1 с соответствующими настройками создали?
Перепроверил именно в Ваших настройках, обращения в порт осуществляются в соответствии с документацией (хотя непонятно, в какие аргументы Вы будете принимать ответ).
Пришлите, пожалуйста, проект - файл *.prj.
Posted by Polag (Участник № / Member № 4573) on :
Спасибо за ответ. Создал COM порт, посылки пошли. Нам необходима комаанда на чтение одного регистра т.е. 01 19 20 00 D1 7F где 01 адрес порта 19 номер команды 20 00 адрес регитра D1 и 7F crc Настраивая канал MODBUS.R_FIFO_Queueмы получаем посылку слдующего содержания 01 19 20 00 00 00 D1 7F две дополнительных пары нулей в посылке это кол-во считываемых регистров. Подскажите можно ли настройками из посылки убрать эти пары нулей?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Видимо, первый байт команды это не адрес порта, а сетевой адрес Modbus-Slave. 1. Задайте каналу CALL.ChGroupReq ПАРАМЕТР=130. 2. Задайте в CALL.ChGroupReq 4 INPUT-аргумента типа USINT с начальными значениями 0x01, 0x19, 0x20, 0x00. 3. Далее создайте необходимое для приема ответа количество аргументов типа OUT нужного формата.