5813
правок
Kilpio (обсуждение | вклад) |
Kilpio (обсуждение | вклад) |
||
Строка 94: | Строка 94: | ||
<div class="mw-collapsible mw-collapsed" style="width:500px; overflow: hidden;" > | <div class="mw-collapsible mw-collapsed" style="width:500px; overflow: hidden;" > | ||
< | <syntaxhighlight lang="JSON"> | ||
{ | { | ||
"device_type": "WB-MS-THLS v.2", | "device_type": "WB-MS-THLS v.2", | ||
Строка 160: | Строка 160: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
</div> | </div> | ||
В настройках устройства интересен параметр < | В настройках устройства интересен параметр <syntaxhighlight lang="JSON"> "max_read_registers": 0,</syntaxhighlight> Этот параметр описывает максимальное количество регистров, считываемых с устройства при запросе. Значение по умолчанию — 1, в нашем случае мы указываем считывать все регистры за один проход (bulk read). | ||
В настройках канала "Temperature" имеются три параметра, на которые стоит обратить внимание: | В настройках канала "Temperature" имеются три параметра, на которые стоит обратить внимание: | ||
< | <syntaxhighlight lang="JSON"> | ||
"format": "s16", | "format": "s16", | ||
"scale": 0.1, | "scale": 0.1, | ||
"error_value": "0x7FFF" | "error_value": "0x7FFF" | ||
</ | </syntaxhighlight> | ||
Параметр '''"format": "s16"''' указывает на то, что число в регистрах представленов в виде знакового шестнадцатибитнного целого, '''"scale": 0.1''' — говорит о том, что полученное из регистров значение следует домножить на коэффициент масштабирования 0,1 для получения значения температуры, а параметр '''"error_value": "0x7FFF"''' задает значение, получаемое из регистра, указывающее на то, что при опросе датчика произошла ошибка. Такой параметр будет выделен красным цветом в Web-интерфейсе контроллера. Применять такой параметр следует, если вы знаете, какое значение выдает ваше устройство в случае ошибки. | Параметр '''"format": "s16"''' указывает на то, что число в регистрах представленов в виде знакового шестнадцатибитнного целого, '''"scale": 0.1''' — говорит о том, что полученное из регистров значение следует домножить на коэффициент масштабирования 0,1 для получения значения температуры, а параметр '''"error_value": "0x7FFF"''' задает значение, получаемое из регистра, указывающее на то, что при опросе датчика произошла ошибка. Такой параметр будет выделен красным цветом в Web-интерфейсе контроллера. Применять такой параметр следует, если вы знаете, какое значение выдает ваше устройство в случае ошибки. | ||
Строка 180: | Строка 180: | ||
<div class="mw-collapsible mw-collapsed" style="width:500px; overflow: hidden;" > | <div class="mw-collapsible mw-collapsed" style="width:500px; overflow: hidden;" > | ||
< | <syntaxhighlight lang="JSON"> | ||
{ | { | ||
"device_type": "WB-MRGBW-D", | "device_type": "WB-MRGBW-D", | ||
Строка 265: | Строка 265: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
</div> | </div> | ||
В этом шаблоне составной канал RGB задает одновременно яркости трех цветовых компонентов ленты, хранящихся в трех holding-регистрах и описывается следующим образом: | В этом шаблоне составной канал RGB задает одновременно яркости трех цветовых компонентов ленты, хранящихся в трех holding-регистрах и описывается следующим образом: | ||
< | <syntaxhighlight lang="JSON"> | ||
{ | { | ||
"name": "RGB", | "name": "RGB", | ||
Строка 287: | Строка 287: | ||
] | ] | ||
}, | }, | ||
</ | </syntaxhighlight> | ||
Канал белого цвета управляется отдельно, | Канал белого цвета управляется отдельно, | ||
< | <syntaxhighlight lang="JSON"> | ||
{ | { | ||
"name": "White", | "name": "White", | ||
Строка 298: | Строка 298: | ||
"max": 255 | "max": 255 | ||
}, | }, | ||
</ | </syntaxhighlight> | ||
Здесь указано максимальное значение, которое можно установить для ползунка яркости белого — 255:< | Здесь указано максимальное значение, которое можно установить для ползунка яркости белого — 255:<syntaxhighlight lang="JSON">"max": 255</syntaxhighlight> | ||
Серийный номер устройства (канал "Serial NO") считывается как беззнаковое 32-битное целое: < | Серийный номер устройства (канал "Serial NO") считывается как беззнаковое 32-битное целое: <syntaxhighlight lang="JSON">"format": "u32"</syntaxhighlight> | ||
---- | ---- | ||
Строка 310: | Строка 310: | ||
<div class="mw-collapsible mw-collapsed" style="width:500px; overflow: hidden;" > | <div class="mw-collapsible mw-collapsed" style="width:500px; overflow: hidden;" > | ||
< | <syntaxhighlight lang="JSON"> | ||
{ | { | ||
"device_type": "WBIO-DO-R10A-8", | "device_type": "WBIO-DO-R10A-8", | ||
Строка 409: | Строка 409: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
</div> | </div> | ||
В этом шаблоне следует обратить внимание на следующие параметры устройства. | В этом шаблоне следует обратить внимание на следующие параметры устройства. | ||
< | <syntaxhighlight lang="JSON"> | ||
"protocol": "modbus_io", | "protocol": "modbus_io", | ||
"stride": 1000, | "stride": 1000, | ||
Строка 420: | Строка 420: | ||
"max_read_registers": 0, | "max_read_registers": 0, | ||
"setup": [ | "setup": [ | ||
</ | </syntaxhighlight> | ||
Параметр '''"protocol": "modbus_io"''' указывает, что устройство подключается оп специальному протоколу к модулю расширения. Параметры '''"stride": 1000''' и '''"shift": 500''' задают сдвиг регистров в зависимости от того, в каком порядке подключены модули к модулю расширения. | Параметр '''"protocol": "modbus_io"''' указывает, что устройство подключается оп специальному протоколу к модулю расширения. Параметры '''"stride": 1000''' и '''"shift": 500''' задают сдвиг регистров в зависимости от того, в каком порядке подключены модули к модулю расширения. | ||
Сдвиг регистров (число, которое нужно добавить к базовому номеру регистра) вычисляется по формуле: < | Сдвиг регистров (число, которое нужно добавить к базовому номеру регистра) вычисляется по формуле: <syntaxhighlight lang="JSON">Shift = (((SlaveId.Secondary - 1) % 4) + 1) * DeviceConfig()->Stride + DeviceConfig()->Shift;</syntaxhighlight> | ||
Каждое подключенное устройство имеет порядковый номер (SlaveId.Secondary), начинающийся с 1 для первого устройства. (Здесь знаком "%" обозначается деление по модулю.) | Каждое подключенное устройство имеет порядковый номер (SlaveId.Secondary), начинающийся с 1 для первого устройства. (Здесь знаком "%" обозначается деление по модулю.) | ||
Например, подставляя значения shift и stride в формулу, получаем: < | Например, подставляя значения shift и stride в формулу, получаем: <syntaxhighlight lang="JSON">Shift = ((( 1 - 1) % 4) + 1) * 500 + 1000 = (0 + 1) * 500 + 1000 = 1500</syntaxhighlight> То есть ко всем регистрам, указанным в шаблоне, надо добавить 1500. | ||
Еще один важный параметр — setup-секция, массив | Еще один важный параметр — setup-секция, массив | ||
< | <syntaxhighlight lang="JSON"> | ||
"setup": [ { | "setup": [ { | ||
"title": "IODIR", | "title": "IODIR", | ||
Строка 438: | Строка 438: | ||
{}, | {}, | ||
...] | ...] | ||
</ | </syntaxhighlight> | ||
Он описывает регистры и значения, которые однократно заносятся в эти регистры при инициализации устройства. Его можно использовать для конфигурирования устройств для работы в каком-то определенном режиме, задавать изначальные значения яркости, положения сервоприводов, состояния реле, режима работы с входами релейных модулей и т. п. | Он описывает регистры и значения, которые однократно заносятся в эти регистры при инициализации устройства. Его можно использовать для конфигурирования устройств для работы в каком-то определенном режиме, задавать изначальные значения яркости, положения сервоприводов, состояния реле, режима работы с входами релейных модулей и т. п. | ||
Строка 448: | Строка 448: | ||
<div class="mw-collapsible mw-collapsed" style="width:500px; overflow: hidden;" > | <div class="mw-collapsible mw-collapsed" style="width:500px; overflow: hidden;" > | ||
< | <syntaxhighlight lang="JSON"> | ||
{ | { | ||
"device_type": "WB-MAP3H (basic)", | "device_type": "WB-MAP3H (basic)", | ||
Строка 854: | Строка 854: | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
</div> | </div> | ||
На что следует обратить внимание в этом шаблоне? В первую очередь в параметрах устройства мы указываем, что одновременно следует считывать не более 60 регистров, чтобы не останавливать надолго опрос остальных устройств: '''"max_read_registers": 60'''. | На что следует обратить внимание в этом шаблоне? В первую очередь в параметрах устройства мы указываем, что одновременно следует считывать не более 60 регистров, чтобы не останавливать надолго опрос остальных устройств: '''"max_read_registers": 60'''. | ||
Также показательным является параметр, описывающий накопленную реактивную энергию по фазе L1: | Также показательным является параметр, описывающий накопленную реактивную энергию по фазе L1: | ||
< | <syntaxhighlight lang="JSON"> | ||
{ | { | ||
"name": "RP energy L1", | "name": "RP energy L1", | ||
Строка 870: | Строка 870: | ||
"word_order": "little_endian" | "word_order": "little_endian" | ||
}, | }, | ||
</ | </syntaxhighlight> | ||
Здесь стоит обратить внимание на то, что адрес регистра может задаваться и в шестнадцатеричном виде: '''"address": "0x1224"''', вещественный коэффициент масштабирования можно задавать в экспоненциальной записи: '''"scale": 3.125e-05''', при считывании значения округлять его до нужного порядка: '''"round_to": 0.0001''', а также учитывать, что число в Modbus-регистрах хранится в порядке от младшего к старшему: '''"word_order": "little_endian"'''. | Здесь стоит обратить внимание на то, что адрес регистра может задаваться и в шестнадцатеричном виде: '''"address": "0x1224"''', вещественный коэффициент масштабирования можно задавать в экспоненциальной записи: '''"scale": 3.125e-05''', при считывании значения округлять его до нужного порядка: '''"round_to": 0.0001''', а также учитывать, что число в Modbus-регистрах хранится в порядке от младшего к старшему: '''"word_order": "little_endian"'''. |
правок