github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/doc/content/ru/docs/plugins/modbus/modbus_rtu.md (about) 1 --- 2 title: "Modbus rtu" 3 linkTitle: "modbus rtu" 4 date: 2021-10-20 5 description: > 6 7 --- 8 9 В системе **Smart Home** реализован плагин Modbus RTU, который обеспечивает взаимодействие с устройствами по протоколу 10 Modbus RTU. Плагин предоставляет метод `ModbusRtu(FUNC, ADDRESS, COUNT, COMMAND)`, позволяющий отправлять команды и 11 получать данные по указанному протоколу. 12 13 Аргументы метода `ModbusRtu`: 14 15 1. `FUNC`: Код функции Modbus, указывающий тип операции, которую следует выполнить с устройством. 16 2. `ADDRESS`: Адрес устройства Modbus, к которому отправляется команда. 17 3. `COUNT`: Количество регистров или битов, которые следует прочитать или записать. 18 4. `COMMAND`: Команда, которую необходимо выполнить, указывающая дополнительные параметры и настройки. 19 20 Пример использования: 21 22 ```javascript 23 const COMMAND = [] 24 const FUNC = 'ReadHoldingRegisters' 25 const ADDRESS = 0 26 const COUNT = 16 27 28 const response = ModbusRtu(FUNC, ADDRESS, COUNT, COMMAND); 29 console.log(response); 30 ``` 31 32 Метод `ModbusRtu` позволяет отправлять команды Modbus RTU, выполнять чтение или запись регистров и получать данные от 33 устройств. Вы можете использовать этот метод в вашем проекте **Smart Home** для взаимодействия с устройствами, поддерживающими 34 протокол Modbus RTU. 35 36 {{< alert color="warning" >}}Для работы с modbus rtu устройством требуется настроенная **нода**{{< /alert >}} 37 38 ### Настройка: 39 40 * slave_id `1-32` 41 * baud `9600, 19200` 42 * data_bits `5-9` 43 * timeout `milliseconds` 44 * stop_bits `1-2` 45 * sleep `milliseconds` 46 * parity `none, odd, even` 47 48 ### Команды: 49 50 * произвольный набор 51 52 ### Атрибуты 53 54 * произвольный набор 55 56 ### Статус 57 58 * произвольный набор 59 60 ---------------- 61 62 ### Доступные функции 63 64 **1 битные функции** 65 66 ReadCoils 67 ReadDiscreteInputs 68 WriteSingleCoil 69 WriteMultipleCoils 70 71 **16 битные функции** 72 73 ReadInputRegisters 74 ReadHoldingRegisters 75 ReadWriteMultipleRegisters 76 WriteSingleRegister 77 WriteMultipleRegisters 78 79 80 ---------------- 81 82 ### javascript свойства 83 84 * ENTITY_ID 85 * ModbusRtu 86 * entityAction 87 * Action 88 89 ```coffeescript 90 # константа с уникальным id устройства 91 const ENTITY_ID 92 ```` 93 94 ```coffeescript 95 # выполнение команды(функции) на устройсте: 96 result = ModbusRtu func, addr, count, command 97 ``` 98 99 | значение | описание | 100 |-------------|---------| 101 | func | функция для выполнения на устройстве | 102 | addr | Адрес первого регистра (40108-40001 = 107 =6B hex) | 103 | count | Количество требуемых регистров (чтение 3-х регистров с 40108 по 40110) | 104 | command | Команда | 105 106 107 ```coffeescript 108 # функция-обработчик события действий: 109 entityAction = (entityId, actionName, args)-> 110 ``` 111 112 | значение | описание | 113 |-------------|---------| 114 | entityId | уникальное id устройства | 115 | actionName | системное наименование действия | 116 | args | Type: map[string]any | 117 118 {{< alert color="warning" >}}Объект **Action** доступен в скриптах действий и скриптах закрепленных за устройством.{{< /alert >}} 119 ```coffeescript 120 state = { 121 new_state: 'ENABLED', 122 attribute_values: { 123 heat: false 124 }, 125 settings_value: {}, 126 storage_save: true 127 } 128 # сохранение состояния 129 EntitySetState ENTITY_ID, state 130 ``` 131 132 | значение | описание | 133 |-------------|---------| 134 | new_state | уникальное системное наименование состояния | 135 | attribute_values | значения атрибутов ранее определенных для устройства | 136 | settings_value | значения настроек ранее определенных для устройства | 137 | storage_save | признак записи среза состояния в БД | 138 139 ---------------- 140 141 ### пример coffeescript кода 142 143 ```coffeescript 144 # ModbusRtu 145 # ################################## 146 "use strict"; 147 148 checkStatus = -> 149 COMMAND = [] 150 FUNC = 'ReadHoldingRegisters' 151 ADDRESS = 0 152 COUNT = 16 153 154 # выполнение команды(функции) на устройсте: 155 res = ModbusRtu FUNC, ADDRESS, COUNT, COMMAND 156 print res.error 157 print res.result 158 print res.time 159 160 # функция-обработчик события действий: 161 entityAction = (entityId, actionName, args)-> 162 switch actionName 163 when 'ON' then doOnAction() 164 when 'OFF' then doOffAction() 165 when 'CHECK' then checkStatus() 166 when 'ON_WITH_ERR' then doOnErrAction() 167 168 ``` 169 170