Wb-mqtt-serial templates: различия между версиями

Нет описания правки
Строка 94: Строка 94:


<div class="mw-collapsible mw-collapsed"  style="width:500px; overflow: hidden;" >
<div class="mw-collapsible mw-collapsed"  style="width:500px; overflow: hidden;" >
<pre>
<syntaxhighlight lang="JSON">
{
{
     "device_type": "WB-MS-THLS v.2",
     "device_type": "WB-MS-THLS v.2",
Строка 160: Строка 160:
     }
     }
}
}
  </pre>
  </syntaxhighlight>
</div>
</div>


В настройках устройства интересен параметр <pre>                "max_read_registers": 0,</pre> Этот параметр описывает максимальное количество регистров, считываемых с устройства при запросе. Значение по умолчанию — 1, в нашем случае мы указываем считывать все регистры за один проход (bulk read).
В настройках устройства интересен параметр <syntaxhighlight lang="JSON">                "max_read_registers": 0,</syntaxhighlight> Этот параметр описывает максимальное количество регистров, считываемых с устройства при запросе. Значение по умолчанию — 1, в нашем случае мы указываем считывать все регистры за один проход (bulk read).
В настройках канала "Temperature" имеются три параметра, на которые стоит обратить внимание:
В настройках канала "Temperature" имеются три параметра, на которые стоит обратить внимание:
<pre>
<syntaxhighlight lang="JSON">
                 "format": "s16",
                 "format": "s16",
                 "scale": 0.1,
                 "scale": 0.1,
                 "error_value": "0x7FFF"
                 "error_value": "0x7FFF"
</pre>
</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;" >
<pre>
<syntaxhighlight lang="JSON">
{
{
     "device_type": "WB-MRGBW-D",  
     "device_type": "WB-MRGBW-D",  
Строка 265: Строка 265:
     }
     }
}
}
  </pre>
  </syntaxhighlight>
</div>
</div>
В этом шаблоне составной канал RGB задает одновременно яркости трех цветовых компонентов ленты, хранящихся в трех holding-регистрах и описывается следующим образом:   
В этом шаблоне составной канал RGB задает одновременно яркости трех цветовых компонентов ленты, хранящихся в трех holding-регистрах и описывается следующим образом:   
<pre>
<syntaxhighlight lang="JSON">
             {
             {
                 "name": "RGB",  
                 "name": "RGB",  
Строка 287: Строка 287:
                 ]
                 ]
             },  
             },  
</pre>
</syntaxhighlight>


Канал белого цвета управляется отдельно,  
Канал белого цвета управляется отдельно,  
<pre>
<syntaxhighlight lang="JSON">
             {
             {
                 "name": "White",  
                 "name": "White",  
Строка 298: Строка 298:
                 "max": 255
                 "max": 255
             },  
             },  
</pre>
</syntaxhighlight>
Здесь указано максимальное значение, которое можно установить для ползунка яркости белого — 255:<pre>"max": 255</pre>
Здесь указано максимальное значение, которое можно установить для ползунка яркости белого — 255:<syntaxhighlight lang="JSON">"max": 255</syntaxhighlight>


Серийный номер устройства (канал "Serial NO") считывается как беззнаковое 32-битное целое: <pre>"format": "u32"</pre>
Серийный номер устройства (канал "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;" >
<pre>
<syntaxhighlight lang="JSON">
{
{
     "device_type": "WBIO-DO-R10A-8",
     "device_type": "WBIO-DO-R10A-8",
Строка 409: Строка 409:
     }
     }
}
}
  </pre>
  </syntaxhighlight>
</div>
</div>




В этом шаблоне следует обратить внимание на следующие параметры устройства.
В этом шаблоне следует обратить внимание на следующие параметры устройства.
<pre>
<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": [
</pre>
</syntaxhighlight>


Параметр '''"protocol": "modbus_io"''' указывает, что устройство подключается оп специальному протоколу к модулю расширения. Параметры '''"stride": 1000''' и '''"shift": 500''' задают сдвиг регистров в зависимости от того, в каком порядке подключены модули к модулю расширения.  
Параметр '''"protocol": "modbus_io"''' указывает, что устройство подключается оп специальному протоколу к модулю расширения. Параметры '''"stride": 1000''' и '''"shift": 500''' задают сдвиг регистров в зависимости от того, в каком порядке подключены модули к модулю расширения.  


Сдвиг регистров (число, которое нужно добавить к базовому номеру регистра) вычисляется по формуле: <pre>Shift = (((SlaveId.Secondary - 1) % 4) + 1) * DeviceConfig()->Stride + DeviceConfig()->Shift;</pre>
Сдвиг регистров (число, которое нужно добавить к базовому номеру регистра) вычисляется по формуле: <syntaxhighlight lang="JSON">Shift = (((SlaveId.Secondary - 1) % 4) + 1) * DeviceConfig()->Stride + DeviceConfig()->Shift;</syntaxhighlight>
Каждое подключенное устройство имеет порядковый номер (SlaveId.Secondary), начинающийся с 1 для первого устройства. (Здесь знаком "%" обозначается деление по модулю.)
Каждое подключенное устройство имеет порядковый номер (SlaveId.Secondary), начинающийся с 1 для первого устройства. (Здесь знаком "%" обозначается деление по модулю.)


Например, подставляя значения shift и stride в формулу, получаем: <pre>Shift = ((( 1 - 1) % 4) + 1) * 500 + 1000 = (0 + 1) * 500 + 1000 = 1500</pre> То есть ко всем регистрам, указанным в шаблоне, надо добавить 1500.
Например, подставляя значения shift и stride в формулу, получаем: <syntaxhighlight lang="JSON">Shift = ((( 1 - 1) % 4) + 1) * 500 + 1000 = (0 + 1) * 500 + 1000 = 1500</syntaxhighlight> То есть ко всем регистрам, указанным в шаблоне, надо добавить 1500.


Еще один важный параметр — setup-секция, массив  
Еще один важный параметр — setup-секция, массив  
<pre>
<syntaxhighlight lang="JSON">
         "setup": [            {
         "setup": [            {
                         "title": "IODIR",
                         "title": "IODIR",
Строка 438: Строка 438:
         {},
         {},
         ...]  
         ...]  
</pre>
</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;" >
<pre>
<syntaxhighlight lang="JSON">
{
{
  "device_type": "WB-MAP3H (basic)",  
  "device_type": "WB-MAP3H (basic)",  
Строка 854: Строка 854:
  }
  }
}
}
  </pre>
  </syntaxhighlight>
</div>
</div>


На что следует обратить внимание в этом шаблоне? В первую очередь в параметрах устройства мы указываем, что одновременно следует считывать не более 60 регистров, чтобы не останавливать надолго опрос остальных устройств: '''"max_read_registers": 60'''.  
На что следует обратить внимание в этом шаблоне? В первую очередь в параметрах устройства мы указываем, что одновременно следует считывать не более 60 регистров, чтобы не останавливать надолго опрос остальных устройств: '''"max_read_registers": 60'''.  
Также показательным является параметр, описывающий накопленную реактивную энергию по фазе L1:
Также показательным является параметр, описывающий накопленную реактивную энергию по фазе L1:
<pre>
<syntaxhighlight lang="JSON">
   {
   {
     "name": "RP energy L1",  
     "name": "RP energy L1",  
Строка 870: Строка 870:
     "word_order": "little_endian"
     "word_order": "little_endian"
   },  
   },  
</pre>  
</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"'''.   
5813

правок