Commit f639d14fb8b9ffbc289a9c9058a879c3f8d63d66

Authored by Peter M. Groen
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 +};
... ...