Commit f639d14fb8b9ffbc289a9c9058a879c3f8d63d66
0 parents
Initial setup
Showing
1 changed file
with
107 additions
and
0 deletions
src/modbus_defines.h
0 → 100644
1 | +++ a/src/modbus_defines.h | |
1 | +/**************************************************************************** | |
2 | + * Copyright (c) 2022 Priva B.V. | |
3 | + ****************************************************************************/ | |
4 | + | |
5 | +#pragma once | |
6 | + | |
7 | +/* Modbus Function codes as defined in the protocol standard */ | |
8 | +enum class E_MB_FUNCTION_CODES | |
9 | +{ | |
10 | + E_MODBUS_FC_READ_COILS 0x01, | |
11 | + E_MODBUS_FC_READ_DISCRETE_INPUTS 0x02, | |
12 | + E_MODBUS_FC_READ_HOLDING_REGISTERS 0x03, | |
13 | + E_MODBUS_FC_READ_INPUT_REGISTERS 0x04, | |
14 | + E_MODBUS_FC_WRITE_SINGLE_COIL 0x05, | |
15 | + E_MODBUS_FC_WRITE_SINGLE_REGISTER 0x06, | |
16 | + E_MODBUS_FC_READ_EXCEPTION_STATUS 0x07, | |
17 | + E_MODBUS_FC_WRITE_MULTIPLE_COILS 0x0F, | |
18 | + E_MODBUS_FC_WRITE_MULTIPLE_REGISTERS 0x10, | |
19 | + E_MODBUS_FC_REPORT_SLAVE_ID 0x11, | |
20 | + E_MODBUS_FC_MASK_WRITE_REGISTERS 0x16, | |
21 | + E_MODBUS_FC_WRITE_AND_READ_REGISTERS 0x17 | |
22 | +}; | |
23 | + | |
24 | +#define MODBUS_BROADCAST_ADDRESS 0 | |
25 | + | |
26 | +/* Modbus Application Protocol V1.1b ( Chapter 6 section 1 page 12 ) | |
27 | + * Quantity of Coils to read ( 2 bytes ): 1 to 2000 ( 0x7D0 ) | |
28 | + * ( chapter 6 section 11 page 29 ) | |
29 | + * Quantity of Coils to write ( 2 bytes ): 1 to 1968 ( 0x7B0 ) | |
30 | + */ | |
31 | +#define MODBUS_MAX_READ_BITS 2000 | |
32 | +#define MODBUS_MAX_WRITE_BITS 1968 | |
33 | + | |
34 | +/* Modbus Application Protocol V1.1b ( Chapter 6 section 3 page 12 ) | |
35 | + * Quantity of Registers to read ( 2 bytes ): 1 to 125 ( 0x7D ) | |
36 | + * ( chapter 6 section 12 page 31 ) | |
37 | + * Quantity of Registers to write ( 2 bytes ): 1 to 123 ( 0x7B ) | |
38 | + * ( chapter 6 section 17 page 38 ) | |
39 | + * Quantity of Registers to write in R/W registers ( 2 bytes ) 1 to 123 ( 0x79 ) | |
40 | + */ | |
41 | +#define MODBUS_MAX_READ_REGISTERS 125 | |
42 | +#define MODBUS_MAX_WRITE_REGISTERS 123 | |
43 | +#define MODBUS_MAX_WR_WRITE_REGISTERS 121 | |
44 | +#define MODBUS_MAX_WR_READ_REGISTERS 125 | |
45 | + | |
46 | +/* The MODBUS PDU is 256 bytes maximum. Therefore MODBUS PDU for serial line | |
47 | + * communication = 256 - Server address ( 1 byte ) - CRC ( 2 bytes ) = 253 bytes | |
48 | + */ | |
49 | +#define MODBUS_MAX_PDU_LENGTH 253 | |
50 | + | |
51 | +/* Consequently : | |
52 | + * - RTU MODBUS_ADU = 253 bytes + Server address ( 1 byte ) + CRC ( 2 bytes ) = 256 | |
53 | + * bytes | |
54 | + * - TCP MODBUS ADU = 253 bytes + MBAP ( 7 bytes ) = 260 bytes | |
55 | + * so the maximum of both backends is 260 bytes. This size can be used to allocate | |
56 | + * an array of bytes to store responses and it will be compatible with the two | |
57 | + * backends. | |
58 | + */ | |
59 | +#define MODBUS_MAX_ADU_LENGTH 260 | |
60 | + | |
61 | +/* Random number to avoid errno conflicts */ | |
62 | +#define MODBUS_ENOBASE 31428571 | |
63 | + | |
64 | +/* Protocol exceptions */ | |
65 | +enum class E_MODBUS_EXCEPTIONS | |
66 | +{ | |
67 | + MODBUS_EXCEPTION_ILLEGAL_FUNCTION 0x01, | |
68 | + MODBUS_EXCEPTION_ILLEGAL_DATA_ADDRESS, | |
69 | + MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE, | |
70 | + MODBUS_EXCEPTION_SLAVE_OR_SERVER_FAILURE, | |
71 | + MODBUS_EXCEPTION_ACKNOWLEDGE, | |
72 | + MODBUS_EXCEPTION_SLAVE_OR_SERVER_BUSY, | |
73 | + MODBUS_EXCEPTION_NEGATIVE_ACKNOWLEDGE, | |
74 | + MODBUS_EXCEPTION_MEMORY_PARITY, | |
75 | + MODBUS_EXCEPTION_NOT_DEFINED, | |
76 | + MODBUS_EXCEPTION_GATEWAY_PATH, | |
77 | + MODBUS_EXCEPTION_GATEWAY_TARGET, | |
78 | + MODBUS_EXCEPTION_MAX | |
79 | +}; | |
80 | + | |
81 | +/* MODBUS Error codes */ | |
82 | +#define EMBXILFUN ( MODBUS_ENOBASE + MODBUS_EXCEPTION_ILLEGAL_FUNCTION ) | |
83 | +#define EMBXILADD ( MODBUS_ENOBASE + MODBUS_EXCEPTION_ILLEGAL_DATA_ADDRESS ) | |
84 | +#define EMBXILVAL ( MODBUS_ENOBASE + MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE ) | |
85 | +#define EMBXSFAIL ( MODBUS_ENOBASE + MODBUS_EXCEPTION_SLAVE_OR_SERVER_FAILURE ) | |
86 | +#define EMBXACK ( MODBUS_ENOBASE + MODBUS_EXCEPTION_ACKNOWLEDGE ) | |
87 | +#define EMBXSBUSY ( MODBUS_ENOBASE + MODBUS_EXCEPTION_SLAVE_OR_SERVER_BUSY ) | |
88 | +#define EMBXNACK ( MODBUS_ENOBASE + MODBUS_EXCEPTION_NEGATIVE_ACKNOWLEDGE ) | |
89 | +#define EMBXMEMPAR ( MODBUS_ENOBASE + MODBUS_EXCEPTION_MEMORY_PARITY ) | |
90 | +#define EMBXGPATH ( MODBUS_ENOBASE + MODBUS_EXCEPTION_GATEWAY_PATH ) | |
91 | +#define EMBXGTAR ( MODBUS_ENOBASE + MODBUS_EXCEPTION_GATEWAY_TARGET ) | |
92 | + | |
93 | +/* Native modbus error codes */ | |
94 | +#define EMBBADCRC ( EMBXGTAR + 1 ) | |
95 | +#define EMBBADDATA ( EMBXGTAR + 2 ) | |
96 | +#define EMBBADEXC ( EMBXGTAR + 3 ) | |
97 | +#define EMBUNKEXC ( EMBXGTAR + 4 ) | |
98 | +#define EMBMDATA ( EMBXGTAR + 5 ) | |
99 | +#define EMBBADSLAVE ( EMBXGTAR + 6 ) | |
100 | + | |
101 | +/* Recovery Modes */ | |
102 | +enum class MODBUS_ERROR_RECOVERY_MODE | |
103 | +{ | |
104 | + MODBUS_ERROR_RECOVERY_NONE = 0, | |
105 | + MODBUS_ERROR_RECOVERY_LINK = ( 1 << 1 ), | |
106 | + MODBUS_ERROR_RECOVERY_PROTOCOL = ( 1 << 2 ) | |
107 | +}; | ... | ... |