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