About Modbus programming
Modbus capability of the data logger must be enabled through configuration or programming. See the CRBasic Editor help for detailed information on program structure, syntax, and each instruction available to the data logger.
CRBasic Modbus instructions include:
ModbusClient()
ModbusServer()
MoveBytes()
See the CRBasic Editor help for detailed instruction information and program examples:
Endianness
Endianness refers to the sequential order in which bytes are arranged into larger numerical values when stored in memory. Words may be represented in big-endian or little-endian format, depending on whether bits or bytes or other components are ordered from the big end (most significant bit) or the little end (least significant bit).
In big-endian format, the byte containing the most significant bit is stored first, then the following bytes are stored in decreasing significance order, with the byte containing the least significant bit stored last. Little-endian format reverses this order: the sequence stores the least significant byte first and the most significant byte last. Endianness is used in some Modbus programming so it is important to note that the
Function codes
A function code tells the server 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 ModbusClient()
instruction refers to a source, not a destination.