Modbus Master

API Reference

Header File

Functions

int mb_init(const char *com, int mode, mb_dirctl func)

Initialize MODBUS

See

_mb_mode

Return

For return value see mb_err_e

Parameters
  • com: [in] UART device file (e.g. /dev/ttyS1)

  • mode: [in] Operation mode

Parameters
  • func: [in] Direction control callback function

int mb_config(speed_t baud, const char *com_para)

Configure MODBUS Parameters

Return

For return value see mb_err_e

Parameters
  • baud: [in] Baudrate value as in termios.h e.g. B9600

  • com_para: [in] Communication parameter data bits, partiy and stopbit in ascii format e.g. “8N1”, “8E2” Data bits: 8, 7, 6, 5 (not supported on all platforms) Parity: N - None, E - Even, O - Odd Parity Stop Bits: 1 or 2

int mb_request(struct modbus_t *mbus)

Perform a MODBUS request

Return

For return value see mb_err_e

Parameters
  • mbus: [in] Modbus handle from mb_init

unsigned short mb_crc(unsigned char *msg, int len)

Calculate MODBUS CRC

Return

CRC value

Parameters
  • msg: [in] Input buffer

  • len: [in] Length of data in buffer

unsigned char mb_lrc(unsigned char *msg, int len)

Calculate MODBUS LRC

Return

LRC value

Parameters
  • msg: [in] Input buffer

  • len: [in] Length of data in buffer

char *mb_strerror(uint8_t errnum)

MODBUS exception to string

Return

error description as string

Parameters
  • errnum: [in] Exception code

Unions

union mb_op
#include <modbus.h>

Modbus operation

Public Members

struct _mb_read read

Read operation, see _mb_read

struct _mb_write write

Write operation, see _mb_write

Structures

struct _mb_read

Read operation structure

Public Members

uint32_t start_add

Start address

uint16_t no_regs

Number of registers (16-bit) to read

struct _mb_write

Write operation structure

Public Members

uint32_t wr_add

Start address

uint16_t no_regs

Number of registers (16-bit) to write. For writing a 32-bit value no_regs = 2

int len

Length of data in data buffer

uint8_t *data

buffer containing data to write

struct modbus_t

MODBUS request structure

Public Members

uint8_t slaveid

Slave ID

uint8_t function

Function code

union mb_op op

Modbus Operation, see mb_op

uint8_t *resp_buf

Buffer pointer to store MODBUS response. In MODBUS ASCII mode, data will be stored after conversion from ASCII to hex

uint16_t resp_buflen

Length of response buffer, On return this value will be updated with actual number of bytes stored in response buffer

uint8_t resp_timeout

MODBUS response timeout in milliseconds

int reserved

Reserved Unused

Type Definitions

typedef void (*mb_dirctl)(int dir)

MODBUS direction control callback function

See

_mb_dir

Parameters
  • dir: Direction request flag

Enumerations

enum mb_err_e

Modbus Error codes

Values:

enumerator MB_OK

No error.

enumerator MB_ERR_INVALID_ARG = -1

Invalid argument

enumerator MB_ERR_NOTSUP = 2

Mode or Function code not supported

enumerator MB_ERR_TIMEOUT = -3

Modbus request timed out

enumerator MB_ERR_INVALID_DATA = -4

Invalid response received from slave

enumerator MB_ERR_CRC_FAIL = -5

Checksum failed, CRC (for RTU) or LRC (for ASCII)

enumerator MB_ERR_INIT_FAIL = -6

Fail to initialize port or Port not initialized

enumerator MB_ERR_CONF_FAIL = -7

Fail to configure port

enum _mb_func

MODBUS function code

Values:

enumerator MB_FUNC_INVAL = 0

Invalid function code

enumerator MB_FUNC_RD_COIL

Read coil

enumerator MB_FUNC_RD_DISC_INPUT

Read discrete input

enumerator MB_FUNC_RD_HOLDING

Read holding register

enumerator MB_FUNC_RD_INPUT

Read input register

enumerator MB_FUNC_WR_COIL

Write coil

enumerator MB_FUNC_WR_REG

Write single holding register

enumerator MB_FUNC_RD_EXP

Read exception status

enumerator MB_FUNC_DIAG

Diagnostic

enumerator MB_FUNC_COMM_EVT_COUNT = 11

Get COM event counter

enumerator MB_FUNC_COMM_EVT_LOG

Get COM event log

enumerator MB_FUNC_WR_MUL_COIL = 15

Write multiple coils

enumerator MB_FUNC_WR_MUL_REG

Write multiple holding register

enumerator MB_FUNC_REP_SERV_ID

Report slave ID

enumerator MB_FUNC_RD_FILE_REC = 20

Read file record

enumerator MB_FUNC_WR_FILE_REC

Write file record

enumerator MB_FUNC_MASK_WR_REG

Mask write register

enumerator MB_FUNC_RDWR_MUL_REG

Read/Write multiple register

enumerator MB_FUNC_RD_FIFO_Q

Read FIFO Queue

enum _mb_mode

MODBUS operation mode

Values:

enumerator MB_INVALID

Invalid mode

enumerator MB_ASCII

MODBUS ASCII

enumerator MB_RTU

MODBUS RTU

enum _mb_dir

MODBUS direction request flag

Values:

enumerator MB_DIR_RX

Enable read request

enumerator MB_DIR_TX

Enable write request