15.2.6.2 Function codes
A function code tells the slave which storage entity to access and whether to read from or write to
that entity. Different devices support different functions (consult the device documentation for
support information). The most commonly used functions (codes 01, 02, 03, 04, 05, 15, and 16 )
are supported by Campbell Scientific data loggers.
Most users only require the read- register functions. Holding registers are read with function
code 03. Input registers are read with function code 04. This can be confusing, because holding
registers are usually listed with an offset of 40,000 and input registers with an offset of 30,000.
Don’t mix up the function codes. Double check the register type in the device documentation.
Function Code
Action
Entity
01 (01 hex)
Read
Discrete Output Coils
05 (05 hex)
Write single
Discrete Output Coil
15 (0F hex)
Write multiple Discrete Output Coils
02 (02 hex)
Read
Discrete Input
04 (04 hex)
Read
Input Registers
03 (03 hex)
Read
Holding Registers
06 (06 hex)
Write single
Holding Register
16 (10 hex)
Write multiple
Holding Registers
The write-register functions will only work on holding registers. Function 06 only changes one 16-
bit register, whereas function 16, changes multiple registers. Note, when writing registers, the
Variable
parameter for the
ModbusMaster()
instruction refers to a source, not a
destination.
15.2.7 Modbus information storage
With the Modbus protocol, most of the data values you want to transmit or receive are stored in
registers. Information is stored in the slave device in four different entities. Two store on/off
discrete values (coils) and two store numerical values (registers). The four entities include:
l
Coils – 1-bit registers, used to control discrete outputs (including Boolean values),
read/write.
l
Discrete Input – 1-bit registers, used as inputs, read only.
l
Input Registers – 16-bit registers, used as inputs, read only.
l
Holding Registers – 16-bit registers; used for inputs, output, configuration data, or any
requirement for “holding” data; read/write.
15. Communications protocols
92