UMDK-MODBUS

Модуль обеспечивает работу протокола Modbus RTU. Использует выходы DIO25 и DIO26 для работы с интерфейсом UART1 или DIO29 и DIO30 для работы с UART2.

Команды

Устанавливает номер UART «DEVICE», который будет использоваться(допустимые значения 1 и 2):

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "set device DEVICE"

Устанавливает параметры порта UART: скорость в битах в секунду, число бит в посылке (допустимое значение: 8), чётность (допустимые значения: N, O, E) и длительность стоп-бита (допустимые значения: 1, 2). Настройки порта сохраняются в EEPROM конечного устройства, поэтому достаточно задать их один раз:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "set mode 115200-8N2"
NB: Длина пакета данных для всех команд(и ответа) не должна превышать 64 байта.

Отправляет шестнадцатеричное число 0x55aa678c.

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "send 55aa678c"

Внимание! Указывать перед числом префикс 0x не требуется!

Отправляет последовательность шестнадцатеричных чисел XX ... XX.

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "pack XX XX XX XX"

Внимание! Указывать перед числами префикс 0x не требуется!

Отправляет последовательность шестнадцатеричных чисел 11 22 33 44 55 AA BB EE FF.

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "pack 11 22 33 44 55 AA BB EE FF"
NB:После команды первым всегда вводится адрес «ADDRESS»(1 байт)! Допустимый диапозон адресов - от 1 до 247, 0 - широковещательный. Адрес вводится в десятичной форме. Данные в шестнадцатеричной.

Чтение состояния «NUMB» релейных выходов, начиная с адреса «START_ADDR»:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "read coils ADDRESS START_ADDR NUMB"

Чтение состояния 3 релейных выходов, начиная с адреса «0x00AB», устройства с адресом «57»

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "read coils 57 AB 03"

Чтение «NUMB» дискретных входов, начиная с адреса «START_ADDR»:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "read inputs ADDRESS START_ADDR NUMB"

Запись состояния «DATA» одного релейного выхода с адресом «START_ADDR»: DATA = 0000 - выключено. DATA = FF00 - включено.

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "write coil ADDRESS START_ADDR DATA"

Запись состояния «DATA» «NUMB» релейных выходов, начиная с адреса «START_ADDR»: В «DATA» каждый бит соответствует состоянию 0 - выключено, 1- включено. «NUMB_BYTE» - количество байт данных «DATA». Данные пишутся побайтно.

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "write_mult coils ADDRESS START_ADDR NUMB NUMB_BYTE DATA"

Запись состояния «CD 10» 10(0x0A) релейных выходов, начиная с адреса «0013»:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "write_mult coils ADDRESS 0013 000A 02 CD 01"

В примере записаны состояния выходов с 20 по 29. Состояние «CD 10» соответствует следующему:

Бит (состояние) 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1
Выход 27 26 25 24 23 22 21 20 - - - - - - 29 28

Чтение «NUMB» регистров данных, начиная с адреса «START_ADDR»:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "read inp_reg ADDRESS START_ADDR NUMB"

Чтение «NUMB» регистров параметров, начиная с адреса «START_ADDR»:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "read hold_reg ADDRESS START_ADDR NUMB"

Запись данных «DATA» одного регистра параметров, начиная с адреса START_ADDR:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "write reg ADDRESS START_ADDR DATA"

Запись «NUMB_BYTE» байт данных «DATA»(по 2 байта) «NUMB» регистров параметров, начиная с адреса START_ADDR: Данные пишутся по 2 байта.

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "write_mult regs ADDRESS START_ADDR NUMB NUMB_BYTE DATA"

Запись «04» байт данных «000A 0102» «02» регистров параметров, начиная с адреса «0001»:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "write_mult regs ADDRESS 0001 02 04 000A 0102"

Запись масок «MASK_OR»(2 байта) и «MASK_AND»(2 байта) по адресу «REF_ADDR»(2 байта):

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "write_mask ADDRESS REF_ADDR MASK_AND MASK_OR"

Чтение FIFO очереди регистра «FIFO_ADDR»:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "get fifo ADDRESS FIFO_ADDR"

Чтение записи из файла: «NUMB_BYTE»(1 байт) - число байт запроса «TYPE_REQN»(1 байт) - Тип запрса «NUMB_FILE»(2 байта) - номер файла «NUMB_REC»(2 байта) - номер записи «LENGTH_REC»(2 байта) - длина записи

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "file read ADDRESS NUMB_BYTE TYPE_REQ NUMB_FILE NUMB_REC LENGTH_REC"

Запись данных в файл: «NUMB_BYTE»(1 байт) - число байт запроса «TYPE_REQN»(1 байт) - Тип запрса «NUMB_FILE»(2 байта) - номер файла «NUMB_REC»(2 байта) - номер записи «LENGTH_REC»(2 байта) - длина записи «DATA»(по 2 байта) - данные

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "file write ADDRESS NUMB_BYTE TYPE_REQ NUMB_FILE NUMB_REC LENGTH_REC DATA"

Прочитать состояние исключений:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "get exceptions ADDRESS"

Получить данные диагностики(«SUBF»(2 байта) - параметр диагностики):

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "read diagnnostic ADDRESS SUBF DATA"

Запросить счетчик событий:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "get event_count ADDRESS"

Запросить лог событий:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "get event_log ADDRESS"

Чтение серийного номера:

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "get server_id ADDRESS"

Получить информацию об устройстве: «TYPE»(1 байт) - Инкапсулированный интерфейс MODBUS(0x0E). «READ_CODE»(1 байт) - код чтения(варианты - 01/02/03/04) «OBJ_ID»(1 байт) - ID объекта

mosquitto_pub -t "devices/lora/NNNNNNNNNNNNNNN/modbus" -m "get info ADDRESS TYPE READ_CODE OBJ_ID"

Сообщения

Общие сообщения

При вводе некорректной(несуществующей) команды будет получено сообщение «invalid command»:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "msg": "invalid command"
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2018-04-24T13:29:22.843900Z"
    }
}

При некорректном формате команды будет получено сообщение «invalid format»:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "msg": "invalid format"
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2018-04-24T13:29:22.843900Z"
    }
}

При некорректных параметрах запроса будет получено сообщение «error»:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "msg": "error"
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2018-04-24T13:29:22.843900Z"
    }
}}

При успешном выполнении команды модуль отвечает сообщением «ok»:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "msg": "ok"
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2018-04-24T13:29:22.843900Z"
    }
}

При длительном выполнении команды модуль отправит сообщение «please wait»:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "msg": "please wait"
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2018-04-24T13:29:22.843900Z"
    }
}

Сообщения при работе с устройством

NB: В каждом ответном сообщении на корректную команду присутствует адрес устройства «ADDRESS».

При успешном выполнении команды модуль возвращает адрес балласта «ADDRESS» и отвечает сообщением «ok»:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "address": ADDRESS,
        "msg": "ok"
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2018-04-24T13:29:22.843900Z"
    }
}

При некорректных параметрах запроса будет получено сообщение «error»:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "address": ADDRESS,
        "msg": "error"
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2018-04-24T13:29:22.843900Z"
    }
}

При отсутствии подключения с устройством, при отсутствии устройства с запрашиваемым адресом, будет получено сообщение «no response»:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "address": ADDRESS,
        "msg": "no response"
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2017-02-21T13:29:22.843900Z"
    }
}

При переполнении буфера приема(превышение максимально разрешимого размера данных):

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "address": ADDRESS,
        "msg": "rx buffer overflow"
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2017-02-21T13:29:22.843900Z"
    }
}

В случае ошибки протокола modbus устройство вернет код ошибки «ERR» и краткое описание «ERR_MSG»:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "address": ADDRESS,
        "exception": ERR,
        "msg": ERR_MSG
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2017-02-21T13:29:22.843900Z"
    }
}

Сообщение при получении данных:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "address": ADDRESS,
        "data": DATA
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2017-02-21T13:29:22.843900Z"
    }
}

Сообщение при чтении состояния дискретных входов:

devices/lora/NNNNNNNNNNNNNNN/modbus
{
    "data": {
        "address": ADDRESS,
        "data": 03ac
    },
    "status": {
        "devEUI" : "NNNNNNNNNNNNNNN",
        "rssi" : -16, 
        "temperature" : 30, 
        "battery" : 3300, 
        "date" : "2017-02-21T13:29:22.843900Z"
    }
}

Подключение

К портам UART1 (DIO25-DIO26) и UART2 (DIO29-DIO30).

Распространение

Модуль распространяется в исходных кодах и может входить в версии прошивок public и commercial.