Протокол конфигуратора МСД-200 (Modbus RTU)

Управление прибором реализовано с помощью следующих функций:

  • 3 (0x03)  —  Read Holding Registers/ чтение нескольких регистров;

  • 16 (0x10)  —  Write Multiple registers/ запись нескольких регистров;

  • 17 (0x11) (report slave ID), чтение имени прибора и версии прошивки;

  • 71 (0x47) (пользовательская функция), Команды работы с картой памяти.

На широковещательный адрес 0 и адреса большие 247 прибор реагировать не будет.

Время ожидания ответа на команду должно быть равно 1 секунде, плюс двойное время передачи данных, зависящее от скорости передачи данных в канале, и плюс двойное время задержки передачи данных в канале GSM при работе через модем (задается при настройке).

Время выполнения команды прибором может достигать 30 секунд (время удаления файла объемом 1 Гбайт равно 30 секундам). Если в течение 1 секунды прибор не успел выполнить команду, он возвращает ошибку с номером 7. На последующие команды до завершения выполнения текущей команды прибор отвечает ошибкой с номером 8 (занят) и кодом функции запущенной команды. Прервать выполнение длинной команды нельзя. После завершения выполнения команды прибор на любой запрос ответит результатом выполненной команды с кодом функции выполненной команды.

Если к прибору подключается «Конфигуратор МСД-200» по каналу USB, то на любые запросы «Конфигуратора МСД-200», подключенного к каналу RS-485, отправляется ошибка с номером 9.

Для функций 03 и 16 допускается запись или чтение регистров, относящихся только к одной команде. При попытке записать или прочитать регистры нескольких команд возвращается ошибка 3 (VALIDATA DATA VALUE). Исключение составляют команды группы чтения оперативных параметров прибора, которые могут быть все считаны одной командой. При этом начальный адрес регистра может быть любым в пределах адресов оперативных параметров (учитывать ограничение длины пакета 256 байт).

Для функции 03, при попытке прочитать регистры, предназначенные только для записи, или при попытке обращения к несуществующим регистрам возвращается ошибка 2 (ILLEGAL DATA ADDRESS).

Для функции  16, при попытке записать регистры, предназначенные только для чтения, или при попытке обращения к несуществующим регистрам возвращается ошибка 1 (ILLEGAL FUNCTION).

Используемый в приборе контроллер имеет особенность: в канале USB нельзя передавать и принимать пакеты кратные 64 байтам. Для решения этой проблемы предлагается передавать пакеты только нечетной длины при использовании USB. При передаче четной длины пакета в конце пакета (после CRC) нужно добавить дополнительный байт  0х00.

При приеме положение CRC определяют по содержимому пакета, а не как два последних байта.

Назначение регистров, используемых для функций 03 и 16:

Адрес

Функция

Длина параметров в байтах

Контрольная сумма

12

0х47

Длина параметров в байтах

ZZ

Структура запроса и ответа для функции 17: функция позволяет получить имя прибора и версию программного обеспечения. В таблице представлен запрос на чтение имени и версии программного обеспечения прибора с адресом 12:

Адрес

Функция

Контрольная сумма

12

17

ZZ

Ответ на функцию 17:

Адрес

Функция

Количество байт данных

Данные 13 байт

Контрольная сумма

12

17

13

MSD-200 VX.YY

ZZ

Поля X и YY определяются предприятием-изготовителем.

Структура запроса и ответа для пользовательской функции 71 (0x47): функция 71 (0x47) используется для работы с картой памяти. Пример запроса функции 71 для устройства с сетевым адресом 12:

Адрес

Функция

Длина параметров в байтах

Контрольная сумма

12

0х47

Длина параметров в байтах

ZZ

Ответ на функцию:

Адрес

Функция

Кол. байт данных

Контрольная сумма

12

0х47

Длина данных в байтах

ZZ

Структура данных, возвращаемая на запрос xxxDir

§   struct    DIR   (выравнивание вструктуре 1 байт)    { //счетчик элементов оглавления, WORDuсhar     CntItem.H uсhar     CntItem.L uсhar     Attr  // атрибут:    бит 0 -только чтение //         бит 1 -скрытый                      //          бит 2 -системный                      //          бит 3 -метка тома                      //          бит 4 -папка               //          бит 5 –архивный размер файла в байтах, DWORD (для папки недействительный) uсhar     FileSize_H    uсhar     FileSize_M    uсhar     FileSize_M    uсhar     FileSize_L     время последней модификации файла uсhar     Seconds  ; //0…59    uсhar     Minutes  ; //0…23 uсhar     Hours; //0…23 uсhar     Day      ; //1…31 uсhar     Month    ; //1…12 uсhar     Year     ; // (0…255)  2000…2255 годы уменьшенные на  2000  массив char с именем папки или файла uсhar     Name[];       //строка переменной  длины с завершающим нулем };

Структура данных функции 0х47

Структура данных функции 0х47

Описание

Код функции Modbus

Запрос /ответ

Данные

FirstDir

Чтение оглавления директории

0x01

Запрос

BYTE[] – массив char

Полный путь к папке , например      \ааа\ввв\ссс\*.*  \0x00

Корневая директория       \*.*0x00

Ответ

struct    DIR

При ошибке устанавливается 7 бит кода функции и возвращается 1 байт данных (номер ошибки).

4 – ошибка чтения оглавления

6 – SD карта пустая

NextDir

Чтение оглавления директории

0x02

Запрос

WORD16  - номер запрашиваемого элемента оглавления (1…)

Ответ

struct    DIR  Элемент оглавления При ошибке устанавливается 7 бит кода функции и возвращается 1 байт данных (номер ошибки)

4 – ошибка чтения оглавления

6 – нет больше элементов оглавления

ReadFileFirst

Чтение файла

0x03

Запрос

DWORD32  – смещение от начала файла запрашиваемого блока в байтах.

BYTE[]  Полный путь к файлу (строка заканчивающаяся нулем), например      \ааа\ввв\ссс.cvs   \0

 

Ответ

DWORD32  – смещение от начала файла присланного блока в байтах.

BYTE[]  - принятый блок данных

При ошибке устанавливается 7 бит кода функции и возвращается 1 байт данных (номер ошибки)

4 – ошибка

5 – нет данных для указанного смещения

ReadFileNext

Чтение файла

0x04

Запрос

DWORD32  – смещение от начала файла запрашиваемого блока в байтах.

Ответ

DWORD32  – смещение от начала файла присланного блока в байтах.

BYTE[]  - принятый блок данных

При ошибке устанавливается 7 бит кода функции и возвращается 1 байт данных (номер ошибки)

4 – ошибка

5 – нет данных для указанного смещения

Delete

Удаление файла или папки (папка должна быть пустая)

0x05

Запрос

Полный путь к файлу, например      \ааа\ввв\ссс.cvs  \0 – для файла

Полный путь к папке, например      \ааа\ввв\               \0 – для папки

Ответ

BYTE  –  0х00

Один байт равный нулю

При ошибке устанавливается 7 бит кода функции и возвращается 1 байт данных (номер ошибки)

4 – ошибка удаления файла/папки

GetStatusSD

Запрос состояния карты памяти

0x06

Запрос

Данных нет (длина данных = 0)

Ответ

BYTE  - тип карты:

Биты 0…3

     0 – карта отсутствует;

     1 – ММС;

     2 – SD;

     3 – SD.V2;

     4 – SDHC.

Бит 7:  - карта памяти не имеет свободного места

BYTE[8]  -  объем карточки в байтах, целое 64 бита, little-endian

BYTE[8]  -  свободное место  карточки в байтах, целое 64 бита, little-endian

Младший значащий байт передается первым.

При ошибке устанавливается 7 бит кода функции и возвращается 1 байт данных (номер ошибки)

4 – ошибка чтения состояния карты памяти

Команды управления конфигурационными параметрами и чтения состояния прибора

Запись конфигурационных параметров выполняется с помощью функции 0x10 (Write Multiple registers), запись нескольких регистров.

Чтение конфигурационных параметров выполняется с помощью функции 0x03 (Read Holding Registers), чтение нескольких регистров.

Параметры команд управления конфигурационными параметрами

Команда

Адрес регистра

Данные записи

Данные чтения

Примечание

Сетевые параметры канала конфигурирования  (Запись/Чтение, количество регистров  - 3)

1.Скорость

2.Адрес

3.Задержка ответа

0x0000

0x0001

0x0002

Word_16: Скорость обмена по умолчанию - 3 0 -    1,2 кБит/с;

  1 -    2,4 кБит/с; 2 –   4,8 кБит/с; 3 –   9,6 кБит/с; 4 –   14,4 кБит/с; 5 –   19,2 кБит/с;    6 –   28,8 кБит/с; 7 –   38,4 кБит/с;    8 –   57,6 кБит/с; 9 – 115,2 кБит/с.

Word_16:Адрес прибора по умолчанию–16(0х10)

1…247

Word_16: Задержка передачи квитанции. По умолчанию -1

0 … 50 мс.

Запись/Чтение

Ответ на команды изменения сетевых параметров канала конфигурирования передается со старыми настройками, далее работа продолжается с новыми настройками.

Описание обмена

Команда

Адрес регистра

Данные записи

Данные чтения

Примечание

Общие параметры канала архивирования   (Запись/Чтение, количество регистров  - 13)

Скорость

0x0040

Word_16 :       По умолчанию - 3

0 -    1,2 кБит/с;

1 -    2,4 кБит/с;

2 –   4,8 кБит/с;

3 –   9,6 кБит/с;

4 –   14,4 кБит/с;

5 –   19,2 кБит/с;

6 –   28,8 кБит/с;

7 –   38,4 кБит/с;

8 –   57,6 кБит/с;

9 – 115,2 кБит/с.

Кол. стоп-бит

0x0041

Word_16 :  По умолчанию - 0

0 – один;

1 – два.

Паритет

0x0042

Word_16 :  По умолчанию - 0

0 – контроля нет;

1 – четность;

2 – нечетность

Адрес

0x0043

Word_16:    По умолчанию – 16 (0х10)

1…247

Для режима Slave протокола Modbus

Задержка ответа

0x0044

Word_16:  По умолчанию -1

0 … 50 мс.

Для режима Slave протокола Modbus, для режима Master протоколов Modbus, Овен

Режим

0x0045

Word_16 :    По умолчанию - 0

0 – Master;

1 – SPY;

2 – Slave;

3 – Slave Ext.

SPY – только для протокола Owen

Slave - только для протокола Modbus

Slave Ext - только для протокола Modbus

Период опроса

0x0046

Word_16: 1…0xffff     По умолчанию – 1000 мс

2 … 65535  мс.

Период архивирования

0x0047

Word_16: 0…0xffff     По умолчанию – 10 с        1 … 65535  с.

Поведение прибора при полном заполнении карты памяти

0x0048

Word_16 :    По умолчанию - 0

0 – Остановка архивирования;

1 – Стирание самого старого файла и продолжение архивирования;

Коррекция хода часов

0x0049

Int_16         По умолчанию - 0

- 10 000… +10 000

От -10000 до +10000 с за 10 суток

При превышении предела диапазона коррекции возвращается ошибка 90

Переключение

SPY → MASTER

0x004A

Word_16 :

0 – отключено

1..65535 – таймаут отсутствия в сети мастера, c

После заданного таймаута МСД-200 меняет режим работы со SPY в Master

Цифровая подпись

0x004B

Word_16 :

0 – отключена         1 -  включена

13. Запрет архивирования ошибок

0x004C

Word_16 :

0 – все ошибки архивируются,

1...100 -  число повторов последнего корректного значения

Время, календарь (Запись/Чтение, количество регистров  - 6)

Секунды

0x0080…

 

 

 

 

 

0x0085

Word_16 – секунды (0…59);    По умолчанию – 0

Минуты

Word_16 – минуты (0…59);   По умолчанию – 0

Часы

Word_16 – часы (0…23).   По умолчанию – 0

Дата

Word_16 – число (1…31)   По умолчанию – 1

Месяц

Word_16 – месяц (1…12);   По умолчанию – 1

Год

Word_16 – год (2010…2100).   По умолчанию – 2011

Ключ цифровой подписи (Запись, количество регистров  - 8)

Ключ цифровой подписи

0x00C0…

    0x00C7

Word_16[8]

Только запись

По умолчанию 0

Ключ длиной  128 бит

Параметры индивидуальных параметров каналов архивирования:

Команда

Адрес регистра

Данные записи

Данные чтения

Примечание

Индивидуальные параметры каналов архивирования (Запись/Чтение, кол-во регистров  - 31)

Примечание
Команды  записи /чтения  работают с одним каналом!

Архивирование

0x0100 + K * 64

Word_16 : 

Бит 0 (Архивир.) :      0 – откл.; 1 – вкл. По умолчанию 0

Бит  1 (Статус):            0 – откл; 1 – вкл. По умолчанию 0

Имя канала

0x0101...

0x0111

char[32]  По умолчанию: “Channel N» (N =  “01”… “64”) Строка ASCII символов длиной 1…31 завершающаяся 0x00 после завершающего нуля может быть «мусор».

Сетевой адрес

0x0112

Word_16 :  По умолчанию 0x10

0…2039    для Овен пр длине адреса 11 бит

0…254    для Овен пр длине адреса 8 бит

1…247    для Modbus

Максимальное время ожидания ответа на запрос

0x0113

Word_16 :  10…0xffff , мс  

По умолчанию 1000 мс

Тип данных канала

0x0114

Word_16 :  По умолчанию  0 Little-endian (младшие байты в младших адресах) 0, 1, 2, 3

0 – Int_16 1 – WORD_16

2 – LongInt_32

3 – DWORD_32

4 – Float_32 Big-endian (старшие байты в младших адресах)  3, 2, 1, 0 5 – Int_16

6 – WORD_16

7 – LongInt_32

8 – DWORD_32

9 – Float_32

Нестандартный порядок    1, 0, 3, 2

10 – LongInt_32 11 – DWORD_32 12 – Float_32

Количество знаков дробной части для формата Float, Word, Int

0x0115

Для формата Float :Word_16 :    0… 5    По умолчанию  - 0

Для формата Int,Word: Word_16 :    –5… 5    По умолчанию  - 0

Аварийное архивирование

0x0116

Word_16 :  0 – отключено;1 – включено  По умолчанию  - 0

Порог архивирования

0x0117...

0x0118

Float_32:     По умолчанию  0.0

0.0 – динамическое архивирование отключено

При использовании, должен переводится в формат указанный в параметре Тип данных канала

Номер функции для режимa Master. В режимах Slave и Slave Ext всегда 0x10

0x0119

Word_16:      По умолчанию  0

0 – функция 3

1  - функция 4

Имеют смысл только для протокола Modbus

Адрес регистра

0x011A

Word_16: 0…0xffff   По умолчанию  0

Номер группы одновременного считывания нескольких каналов

0x011B

Word_16: 0…0x20     По умолчанию 0

0 – отсутствие цепочки

1…32 – номер цепочки

При наличии цепочки, каналы одной цепочки, если у них последовательные адреса регистров, запрашиваются одной командой

Длина адреса

0x011C

Word_16: 0 – 8 бит; 1 – 11 бит   По умолчанию - 0

HASH

0x011D

Word_16: 0…0xffff      По умолчанию  0

Индекс

0x011E

Word_16: 0…0xffff     По умолчанию  0xffff (без индекса)

Параметры конфигурационных параметров каналов измерения тока:

Команда

Адрес регистра

Данные записи

Данные чтения

Примечание

Конфигурационные параметры каналов измерения тока(Запись/Чтение, количество регистров  - 6* 4 = 24)

На все каналы одна команда записи или чтения

Диапазон

Начальный адрес блока 0x1100

1 к - 0x1100  - 0x1105

Word_16:         По умолчанию 0

0 – 4…20 мА;          1 – 0…20 мА;          2 – 0…5 мА;

Фильтр

2 к - 0x1106  - 0x110B

Word_16:

100 … 65535 мс     По умолчанию 100

Минимум физической величины

3 к - 0x110C - 0x1111

Float_32    По умолчанию 0.0

Максимум физической величины

4 к - 0x1112  - 0x1117

Float_32   По умолчанию 100.0

Параметры команд чтения оперативных данных каналов архивирования:

Команда

Адрес регистра

Данные записи

Данные чтения

Примечание

Команда чтения оперативных данных каналов архивирования (Чтение, количество регистров  - 3 * 64 = 192).

Допускается считывание одной командой от 1 до 40 каналов расположенных последовательно.

Настройки и состояние

Рассчитываются по формуле: 0x2000 + K* 3 —

     0x20BF

, где K– канал архивирования 0…63

Нет

Word_16:

    Младший байт            Биты 0…5    состояние канала:

0 – канал норма;

1 – канал отключен;

2 – таймаут канала

3 – перегрузка канала (для встроенных измерителей тока)

4 – обрыв (для встроенных измерителей тока 4…20  мА)

5 – код ошибки пришел по сети и указан в следующем байте

Биты 6…7           формат:

0 – Int_16

1 – WORD_16

2 – LongInt_32

3 – DWORD_32  

4 – Float_32

Старший байт: код ошибки принятый по сети

Float32/DWORD – результат  измерения (при ошибках «мусор»). Для коротких форматов старшие биты обнуляются.

Результат  измерения

Команда чтения  оперативного состояния прибора

Причина последнего старта программы прибора

0x20С0

Нет

Word_16:

           бит0 – аппаратный сброс;

           бит1 – сброс по включению питания;

           бит2 – программный сброс;

           бит3 – независимый сторожевой таймер;

           бит4 – window сторожевой таймер;

           бит5 – сброс по снижению питания;

Код последней сетевой ошибки

0x20C1

Word_16:  0…255   После включения прибора - 0

Сигнатура памяти программ

0x20C2-0x20D1

WORD[16]

Флаги статуса прибора

0x20D2

Word_16:

       бит    0 –Kонф. парам. установлены по умолчанию      

       бит    1 – Отказ  FLASH конфигурационных параметров        бит    2 -  состояние переключателя Арх.

       бит    3 -  Потеря данных архивирования

      

       бит   15  –  нет карты памяти

Параметры команды чтения оперативных данных каналов измерения тока:

Команда

Адрес регистра

Данные записи

Данные чтения

Примечание

Команда чтения  оперативных данных каналов измерения тока (Чтение, количество регистров  8).

Технологическая команда (в конфигураторе не нужна)

Значение

0x3000-

0х3007

Нет

Float[4]:

Параметры команды юстировки каналов измерения тока:

Команда

Адрес регистра

Данные записи

Данные чтения

Примечание

Команда юстировки каналов измерения тока (Чтение, количество регистров  5).

Технологическая команда (в конфигураторе нужна)

Значение

0x3010

Нет

WORD:

0 – ОК;

1 – ErrRMS

2 - ErrValue

3 - ErrFlash

4 - Таймаут

float – RMS

float – Value