ESPHome 2025.10.1
Loading...
Searching...
No Matches
modbus_definitions.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace esphome {
6namespace modbus {
7
10// 5 Function Code Categories
11const uint8_t FUNCTION_CODE_USER_DEFINED_SPACE_1_INIT = 65; // 0x41
12const uint8_t FUNCTION_CODE_USER_DEFINED_SPACE_1_END = 72; // 0x48
13
14const uint8_t FUNCTION_CODE_USER_DEFINED_SPACE_2_INIT = 100; // 0x64
15const uint8_t FUNCTION_CODE_USER_DEFINED_SPACE_2_END = 110; // 0x6E
16
17enum class ModbusFunctionCode : uint8_t {
18 CUSTOM = 0x00,
19 READ_COILS = 0x01,
23 WRITE_SINGLE_COIL = 0x05,
25 READ_EXCEPTION_STATUS = 0x07, // not implemented
26 DIAGNOSTICS = 0x08, // not implemented
27 GET_COMM_EVENT_COUNTER = 0x0B, // not implemented
28 GET_COMM_EVENT_LOG = 0x0C, // not implemented
31 REPORT_SERVER_ID = 0x11, // not implemented
32 READ_FILE_RECORD = 0x14, // not implemented
33 WRITE_FILE_RECORD = 0x15, // not implemented
34 MASK_WRITE_REGISTER = 0x16, // not implemented
35 READ_WRITE_MULTIPLE_REGISTERS = 0x17, // not implemented
36 READ_FIFO_QUEUE = 0x18, // not implemented
37};
38
39/*Allow comparison operators between ModbusFunctionCode and uint8_t*/
40inline bool operator==(ModbusFunctionCode lhs, uint8_t rhs) { return static_cast<uint8_t>(lhs) == rhs; }
41inline bool operator==(uint8_t lhs, ModbusFunctionCode rhs) { return lhs == static_cast<uint8_t>(rhs); }
42inline bool operator!=(ModbusFunctionCode lhs, uint8_t rhs) { return !(static_cast<uint8_t>(lhs) == rhs); }
43inline bool operator!=(uint8_t lhs, ModbusFunctionCode rhs) { return !(lhs == static_cast<uint8_t>(rhs)); }
44inline bool operator<(ModbusFunctionCode lhs, uint8_t rhs) { return static_cast<uint8_t>(lhs) < rhs; }
45inline bool operator<(uint8_t lhs, ModbusFunctionCode rhs) { return lhs < static_cast<uint8_t>(rhs); }
46inline bool operator<=(ModbusFunctionCode lhs, uint8_t rhs) { return static_cast<uint8_t>(lhs) <= rhs; }
47inline bool operator<=(uint8_t lhs, ModbusFunctionCode rhs) { return lhs <= static_cast<uint8_t>(rhs); }
48inline bool operator>(ModbusFunctionCode lhs, uint8_t rhs) { return static_cast<uint8_t>(lhs) > rhs; }
49inline bool operator>(uint8_t lhs, ModbusFunctionCode rhs) { return lhs > static_cast<uint8_t>(rhs); }
50inline bool operator>=(ModbusFunctionCode lhs, uint8_t rhs) { return static_cast<uint8_t>(lhs) >= rhs; }
51inline bool operator>=(uint8_t lhs, ModbusFunctionCode rhs) { return lhs >= static_cast<uint8_t>(rhs); }
52
53// 4.3 MODBUS Data model
54enum class ModbusRegisterType : uint8_t {
55 CUSTOM = 0x00,
56 COIL = 0x01,
57 DISCRETE_INPUT = 0x02,
58 HOLDING = 0x03,
59 READ = 0x04,
60};
61
62// 7 MODBUS Exception Responses:
63const uint8_t FUNCTION_CODE_MASK = 0x7F;
64const uint8_t FUNCTION_CODE_EXCEPTION_MASK = 0x80;
65
77
78// 6.12 16 (0x10) Write Multiple registers:
79const uint8_t MAX_NUM_OF_REGISTERS_TO_WRITE = 123; // 0x7B
80
81// 6.3 03 (0x03) Read Holding Registers
82// 6.4 04 (0x04) Read Input Registers
83const uint8_t MAX_NUM_OF_REGISTERS_TO_READ = 125; // 0x7D
85} // namespace modbus
86} // namespace esphome
const uint8_t FUNCTION_CODE_MASK
const uint8_t FUNCTION_CODE_EXCEPTION_MASK
const uint8_t FUNCTION_CODE_USER_DEFINED_SPACE_2_INIT
bool operator>(ModbusFunctionCode lhs, uint8_t rhs)
const uint8_t FUNCTION_CODE_USER_DEFINED_SPACE_1_INIT
Modbus definitions from specs: https://modbus.org/docs/Modbus_Application_Protocol_V1_1b3....
bool operator>=(ModbusFunctionCode lhs, uint8_t rhs)
const uint8_t MAX_NUM_OF_REGISTERS_TO_READ
const uint8_t FUNCTION_CODE_USER_DEFINED_SPACE_2_END
const uint8_t MAX_NUM_OF_REGISTERS_TO_WRITE
const uint8_t FUNCTION_CODE_USER_DEFINED_SPACE_1_END
bool operator!=(ModbusFunctionCode lhs, uint8_t rhs)
bool operator<=(ModbusFunctionCode lhs, uint8_t rhs)
bool operator==(ModbusFunctionCode lhs, uint8_t rhs)
bool operator<(ModbusFunctionCode lhs, uint8_t rhs)
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7