Configuring µC/Modbus
Configuration of µC/Modbus is done at compile time via about 20 #define
constants. Configuration values are found in mb_cfg.h
which should be placed in your product’s directory or, you can copy the #define
constants in a header file of your choice. It’s recommended that you copy the mb_cfg.h
file that is provided with the µC/Modbus distribution, and modify its content instead of creating mb_cfg.h
from scratch. This way you have a better chance of not forgetting any #define
constants. Default values are shown in RED.
Configuring µC/Modbus, MODBUS_CFG_SLAVE_EN
This #define
constant specifies whether your product will support Modbus slave (or server) mode. Set this #define
to DEF_ENABLED
to enable SLAVE code. Set this #define
to DEF_DISABLED
to disable SLAVE code. You must have purchased the µC/Modbus-S package in order to set this #define to DEF_ENABLED
.
Configuring µC/Modbus, MODBUS_CFG_MASTER_EN
This #define
constant specifies whether your product will support Modbus master (or client) mode. Set this #define
to DEF_ENABLED
to enable MASTER code. Set this #define
to DEF_DISABLED
to disable Master code You must have purchased the µC/Modbus-M package in order to set this #define to DEF_ENABLED
.
Configuring µC/Modbus, MODBUS_CFG_ASCII_EN
This #define
constant specifies whether your product will support the Modbus ASCII protocol. Setting this value to DEF_ENABLED
allows any Modbus channel to be configured for Modbus ASCII mode. Note that each channel must be configured to either Modbus ASCII or Modbus RTU mode at run-time. Setting MODBUS_CFG_ASCII_EN
to DEF_ENABLED
doesn’t mean that your product MUST use ASCII mode, it just means that the code to support Modbus ASCII will be included in the compilation.
Configuring µC/Modbus, MODBUS_CFG_RTU_EN
This #define
constant specifies whether your product will support the MODBUS RTU protocol. Setting this value to DEF_ENABLED
allows any Modbus channel to be configured for Modbus RTU mode. Note that each channel must be configured to either MODBUS ASCII or MODBUS RTU mode at run-time. Setting MODBUS_CFG_RTU_EN
to DEF_ENABLED
doesn’t mean that your product MUST use RTU mode, it just means that the code to support MODBUS RTU will be included in the compilation.
Configuring µC/Modbus, MODBUS_CFG_MAX_CH
µC/Modbus allows you to provide multiple communication ‘channels’ in your product. Each channel allows a MODBUS master to request data from your product. If your product only provides one channel, you should set MODBUS_CFG_MAX_CH
to 1
.
Configuring µC/Modbus, MODBUS_CFG_BUF_SIZE
MODBUS protocol packets can contain up to 256 bytes of data. To hold this data, each µC/Modbuschannel allocates storage buffers: TWO for received packets and TWO for transmit packets. If your application sends and receives small packets, you can reduce the buffer size in order to conserve RAM. However, we recommend that you leave MODBUS_CFG_BUF_SIZE
to it’s default value of 255
. With 255, a Modbus channel will require 1020 bytes of RAM for buffers.
Configuring µC/Modbus, MODBUS_CFG_FP_EN
When set to DEF_ENABLED
, this #define
constant is used to enable code generation for floating-point support of the “Daniels Flow Meter Floating-Point Extension”. The default value should be DEF_DISABLED
.
Configuring µC/Modbus, MODBUS_CFG_FP_START_IX
This #define
establishes the start address for floating-point numbers use in Input Registers and Holding Registers. Basically, integer input registers and holding registers go from address (or index) 0
to MODBUS_CFG_FP_START_IX-1
and floating?point input registers and holding registers, from MODBUS_CFG_FP_START_IX
to 65535
.
Configuring µC/Modbus, MODBUS_CFG_FC01_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support Coil Read commands (Function Code #1). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus, MODBUS_CFG_FC02_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support Discrete Input Read commands (Function Code #2). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus, MODBUS_CFG_FC03_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support Holding register Read commands (Function Code #3). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus, MODBUS_CFG_FC04_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support Input register Read commands (Function Code #4). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus, MODBUS_CFG_FC05_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support Coil Write commands (Function Code #5). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus, MODBUS_CFG_FC06_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support writing to a single Holding Register commands (Function Code #6). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus, MODBUS_CFG_FC08_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support diagnostic loopback commands (Function Code #8). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus, MODBUS_CFG_FC15_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support the Multiple Coil Write command (Function Code #15). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus, MODBUS_CFG_FC16_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support the Multiple Holding Register Write command (Function Code #16). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus-S, MODBUS_CFG_FC20_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support the File Read command (Function Code #20). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus-S, MODBUS_CFG_FC21_EN
When set to DEF_ENABLED
, this #define
determines whether µC/Modbuswill support the File Write command (Function Code #21). When set to DEF_DISABLED
, code will not be generated for this command.
Configuring µC/Modbus, RAM Memory Requirements
The amount of RAM required by each µC/Modbuschannel is shown in the table below. The table assumes that pointers are 32 bits wide.
RAM Requirements for each µC/Modbuschannel.
Data Type | Data Type Size (Bytes) | #Elements for Specific Data Type | Total Bytes |
CPU_BOOLEAN | 1 | 1 | 1 |
CPU_INT08U | 1 | 8 + | 1028 |
CPU_INT16U | 2 | 13 + | 30 |
CPU_INT32U | 4 | 4 | 16 |
CPU_INT08U * | 4 | 2 | 8 |
| | Total (per µC/Modbus channel): (see MB_ChSize ) | 1083 |
The ‘global’ variable MB_TotalRAMSize
contains the total amount of RAM (in bytes) needed by µC/Modbus for the configuration you specify. Similarly, MB_ChSize
contains the amount of RAM (in bytes) needed by each Modbus channel. Both of these ‘variables’ are 32-bit values and are actually declared as ‘const
’ and thus, use 8 bytes of ROM and no RAM.