Commit ed0629f6 authored by Johann Fischer's avatar Johann Fischer Committed by Carles Cufi
Browse files

modbus: rename MODBUS RTU API to common MODBUS API



Rename MODBUS RTU API to common MODBUS API.

Signed-off-by: default avatarJohann Fischer <johann.fischer@nordicsemi.no>
parent ac487727
Loading
Loading
Loading
Loading
+52 −52
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
 */

/**
 * @brief MODBUS RTU transport protocol over Serial Line
 * @brief MODBUS transport protocol API
 * @defgroup modbus MODBUS
 * @ingroup io_interfaces
 * @{
@@ -40,8 +40,8 @@ extern "C" {
 *
 * Sends a Modbus message to read the status of coils from a server.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param start_addr Coil starting address
 * @param coil_tbl   Pointer to an array of bytes containing the value
 *                   of the coils read.
@@ -62,7 +62,7 @@ extern "C" {
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_read_coils(const int iface,
int modbus_read_coils(const int iface,
		      const uint8_t node_addr,
		      const uint16_t start_addr,
		      uint8_t *const coil_tbl,
@@ -74,8 +74,8 @@ int mb_rtu_read_coils(const int iface,
 * Sends a Modbus message to read the status of discrete inputs from
 * a server.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param start_addr Discrete input starting address
 * @param di_tbl     Pointer to an array that will receive the state
 *                   of the discrete inputs.
@@ -96,7 +96,7 @@ int mb_rtu_read_coils(const int iface,
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_read_dinputs(const int iface,
int modbus_read_dinputs(const int iface,
			const uint8_t node_addr,
			const uint16_t start_addr,
			uint8_t *const di_tbl,
@@ -108,8 +108,8 @@ int mb_rtu_read_dinputs(const int iface,
 * Sends a Modbus message to read the value of holding registers
 * from a server.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param start_addr Register starting address
 * @param reg_buf    Is a pointer to an array that will receive
 *                   the current values of the holding registers from
@@ -119,7 +119,7 @@ int mb_rtu_read_dinputs(const int iface,
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_read_holding_regs(const int iface,
int modbus_read_holding_regs(const int iface,
			     const uint8_t node_addr,
			     const uint16_t start_addr,
			     uint16_t *const reg_buf,
@@ -131,8 +131,8 @@ int mb_rtu_read_holding_regs(const int iface,
 * Sends a Modbus message to read the value of input registers from
 * a server.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param start_addr Register starting address
 * @param reg_buf    Is a pointer to an array that will receive
 *                   the current value of the holding registers
@@ -142,7 +142,7 @@ int mb_rtu_read_holding_regs(const int iface,
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_read_input_regs(const int iface,
int modbus_read_input_regs(const int iface,
			   const uint8_t node_addr,
			   const uint16_t start_addr,
			   uint16_t *const reg_buf,
@@ -153,14 +153,14 @@ int mb_rtu_read_input_regs(const int iface,
 *
 * Sends a Modbus message to write the value of single coil to a server.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param coil_addr  Coils starting address
 * @param coil_state Is the desired state of the coil
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_write_coil(const int iface,
int modbus_write_coil(const int iface,
		      const uint8_t node_addr,
		      const uint16_t coil_addr,
		      const bool coil_state);
@@ -171,14 +171,14 @@ int mb_rtu_write_coil(const int iface,
 * Sends a Modbus message to write the value of single holding register
 * to a server unit.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param start_addr Coils starting address
 * @param reg_val    Desired value of the holding register
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_write_holding_reg(const int iface,
int modbus_write_holding_reg(const int iface,
			     const uint8_t node_addr,
			     const uint16_t start_addr,
			     const uint16_t reg_val);
@@ -188,15 +188,15 @@ int mb_rtu_write_holding_reg(const int iface,
 *
 * Sends a Modbus message to perform a diagnostic function of a server unit.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param sfunc      Diagnostic sub-function code
 * @param data       Sub-function data
 * @param data_out   Pointer to the data value
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_request_diagnostic(const int iface,
int modbus_request_diagnostic(const int iface,
			      const uint8_t node_addr,
			      const uint16_t sfunc,
			      const uint16_t data,
@@ -207,8 +207,8 @@ int mb_rtu_request_diagnostic(const int iface,
 *
 * Sends a Modbus message to write to coils on a server unit.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param start_addr Coils starting address
 * @param coil_tbl   Pointer to an array of bytes containing the value
 *                   of the coils to write.
@@ -229,7 +229,7 @@ int mb_rtu_request_diagnostic(const int iface,
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_write_coils(const int iface,
int modbus_write_coils(const int iface,
		       const uint8_t node_addr,
		       const uint16_t start_addr,
		       uint8_t *const coil_tbl,
@@ -241,8 +241,8 @@ int mb_rtu_write_coils(const int iface,
 * Sends a Modbus message to write to integer holding registers
 * to a server unit.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param start_addr Register starting address
 * @param reg_buf    Is a pointer to an array containing
 *                   the value of the holding registers to write.
@@ -252,7 +252,7 @@ int mb_rtu_write_coils(const int iface,
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_write_holding_regs(const int iface,
int modbus_write_holding_regs(const int iface,
			      const uint8_t node_addr,
			      const uint16_t start_addr,
			      uint16_t *const reg_buf,
@@ -264,8 +264,8 @@ int mb_rtu_write_holding_regs(const int iface,
 * Sends a Modbus message to read the value of floating-point
 * holding registers from a server unit.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param start_addr Register starting address
 * @param reg_buf    Is a pointer to an array that will receive
 *                   the current values of the holding registers from
@@ -275,7 +275,7 @@ int mb_rtu_write_holding_regs(const int iface,
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_read_holding_regs_fp(const int iface,
int modbus_read_holding_regs_fp(const int iface,
				const uint8_t node_addr,
				const uint16_t start_addr,
				float *const reg_buf,
@@ -287,8 +287,8 @@ int mb_rtu_read_holding_regs_fp(const int iface,
 * Sends a Modbus message to write to floating-point holding registers
 * to a server unit.
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param start_addr Register starting address
 * @param reg_buf    Is a pointer to an array containing
 *                   the value of the holding registers to write.
@@ -298,14 +298,14 @@ int mb_rtu_read_holding_regs_fp(const int iface,
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_write_holding_regs_fp(const int iface,
int modbus_write_holding_regs_fp(const int iface,
				 const uint8_t node_addr,
				 const uint16_t start_addr,
				 float *const reg_buf,
				 const uint16_t num_regs);

/** Modbus Server User Callback structure */
struct mbs_rtu_user_callbacks {
struct modbus_user_callbacks {
	/** Coil read callback */
	int (*coil_rd)(uint16_t addr, bool *state);

@@ -335,22 +335,22 @@ struct mbs_rtu_user_callbacks {
};

/**
 * @brief Get Modbus RTU interface index according to interface name
 * @brief Get Modbus interface index according to interface name
 *
 * If there is more than one interface, it can be used to clearly
 * identify interfaces in the application.
 *
 * @param iface_name Modbus RTU interface name
 * @param iface_name Modbus interface name
 *
 * @retval           Modbus RTU interface index or negative error value.
 * @retval           Modbus interface index or negative error value.
 */
int mb_rtu_iface_get_by_name(const char *iface_name);
int modbus_iface_get_by_name(const char *iface_name);

/**
 * @brief Configure Modbus Interface as server
 *
 * @param iface      Modbus RTU interface index
 * @param node_addr  Modbus RTU address of the server
 * @param iface      Modbus interface index
 * @param node_addr  Modbus unit address of the server
 * @param baud       Baudrate of the serial line
 * @param parity     UART's parity setting:
 *                       UART_CFG_PARITY_NONE,
@@ -361,15 +361,15 @@ int mb_rtu_iface_get_by_name(const char *iface_name);
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_cfg_server(const uint8_t iface, const uint8_t node_addr,
int modbus_init_server(const uint8_t iface, const uint8_t node_addr,
		       const uint32_t baud, enum uart_config_parity parity,
		      struct mbs_rtu_user_callbacks *const cb,
		       struct modbus_user_callbacks *const cb,
		       bool ascii_mode);

/**
 * @brief Configure Modbus Interface as client
 *
 * @param iface      Modbus RTU interface index
 * @param iface      Modbus interface index
 * @param baud       Baudrate of the serial line
 * @param parity     UART's parity setting:
 *                       UART_CFG_PARITY_NONE,
@@ -381,7 +381,7 @@ int mb_rtu_cfg_server(const uint8_t iface, const uint8_t node_addr,
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_cfg_client(const uint8_t iface,
int modbus_init_client(const uint8_t iface,
		       const uint32_t baud, enum uart_config_parity parity,
		       uint32_t rx_timeout,
		       bool ascii_mode);
@@ -390,11 +390,11 @@ int mb_rtu_cfg_client(const uint8_t iface,
 *
 * This function is called to disable Modbus interface.
 *
 * @param iface      Modbus RTU interface index
 * @param iface      Modbus interface index
 *
 * @retval           0 If the function was successful
 */
int mb_rtu_disable_iface(const uint8_t iface);
int modbus_disable(const uint8_t iface);

#ifdef __cplusplus
}
+10 −10
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ static int init_modbus_client(void)
	const uint32_t mb_rtu_br = 19200;
	const uint32_t rsp_timeout = 50000;

	return mb_rtu_cfg_client(RTU_IFACE, mb_rtu_br, UART_CFG_PARITY_NONE,
	return modbus_init_client(RTU_IFACE, mb_rtu_br, UART_CFG_PARITY_NONE,
				  rsp_timeout, false);
}

@@ -38,14 +38,14 @@ void main(void)
		return;
	}

	err = mb_rtu_write_holding_regs(RTU_IFACE, node, 0, holding_reg,
	err = modbus_write_holding_regs(RTU_IFACE, node, 0, holding_reg,
					ARRAY_SIZE(holding_reg));
	if (err != 0) {
		LOG_ERR("FC16 failed");
		return;
	}

	err = mb_rtu_read_holding_regs(RTU_IFACE, node, 0, holding_reg,
	err = modbus_read_holding_regs(RTU_IFACE, node, 0, holding_reg,
				       ARRAY_SIZE(holding_reg));
	if (err != 0) {
		LOG_ERR("FC03 failed with %d", err);
@@ -58,7 +58,7 @@ void main(void)
	while (true) {
		uint16_t addr = 0;

		err = mb_rtu_read_coils(RTU_IFACE, node, 0, coil, coil_qty);
		err = modbus_read_coils(RTU_IFACE, node, 0, coil, coil_qty);
		if (err != 0) {
			LOG_ERR("FC01 failed with %d", err);
			return;
@@ -66,28 +66,28 @@ void main(void)

		LOG_INF("Coils state 0x%02x", coil[0]);

		err = mb_rtu_write_coil(RTU_IFACE, node, addr++, true);
		err = modbus_write_coil(RTU_IFACE, node, addr++, true);
		if (err != 0) {
			LOG_ERR("FC05 failed with %d", err);
			return;
		}

		k_msleep(sleep);
		err = mb_rtu_write_coil(RTU_IFACE, node, addr++, true);
		err = modbus_write_coil(RTU_IFACE, node, addr++, true);
		if (err != 0) {
			LOG_ERR("FC05 failed with %d", err);
			return;
		}

		k_msleep(sleep);
		err = mb_rtu_write_coil(RTU_IFACE, node, addr++, true);
		err = modbus_write_coil(RTU_IFACE, node, addr++, true);
		if (err != 0) {
			LOG_ERR("FC05 failed with %d", err);
			return;
		}

		k_msleep(sleep);
		err = mb_rtu_read_coils(RTU_IFACE, node, 0, coil, coil_qty);
		err = modbus_read_coils(RTU_IFACE, node, 0, coil, coil_qty);
		if (err != 0) {
			LOG_ERR("FC01 failed with %d", err);
			return;
@@ -96,7 +96,7 @@ void main(void)
		LOG_INF("Coils state 0x%02x", coil[0]);

		coil[0] = 0;
		err = mb_rtu_write_coils(RTU_IFACE, node, 0, coil, coil_qty);
		err = modbus_write_coils(RTU_IFACE, node, 0, coil, coil_qty);
		if (err != 0) {
			LOG_ERR("FC15 failed with %d", err);
			return;
+4 −4
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ static int holding_reg_wr(uint16_t addr, uint16_t reg)
	return 0;
}

static struct mbs_rtu_user_callbacks mbs_cbs = {
static struct modbus_user_callbacks mbs_cbs = {
	.coil_rd = coil_rd,
	.coil_wr = coil_wr,
	.holding_reg_rd = holding_reg_rd,
@@ -106,14 +106,14 @@ static int init_modbus_server(void)
	const char iface_name[] = {DT_PROP(DT_INST(0, zephyr_modbus_serial), label)};
	int iface;

	iface = mb_rtu_iface_get_by_name(iface_name);
	iface = modbus_iface_get_by_name(iface_name);

	if (iface < 0) {
		LOG_ERR("Failed to get iface index for %s", iface_name);
		return iface;
	}

	return mb_rtu_cfg_server(iface, 1, mb_rtu_br, UART_CFG_PARITY_NONE,
	return modbus_init_server(iface, 1, mb_rtu_br, UART_CFG_PARITY_NONE,
				  &mbs_cbs, false);
}

+11 −11
Original line number Diff line number Diff line
@@ -296,7 +296,7 @@ exit_error:
	return err;
}

int mb_rtu_read_coils(const int iface,
int modbus_read_coils(const int iface,
		      const uint8_t node_addr,
		      const uint16_t start_addr,
		      uint8_t *const coil_tbl,
@@ -321,7 +321,7 @@ int mb_rtu_read_coils(const int iface,
	return err;
}

int mb_rtu_read_dinputs(const int iface,
int modbus_read_dinputs(const int iface,
			const uint8_t node_addr,
			const uint16_t start_addr,
			uint8_t *const di_tbl,
@@ -346,7 +346,7 @@ int mb_rtu_read_dinputs(const int iface,
	return err;
}

int mb_rtu_read_holding_regs(const int iface,
int modbus_read_holding_regs(const int iface,
			     const uint8_t node_addr,
			     const uint16_t start_addr,
			     uint16_t *const reg_buf,
@@ -373,7 +373,7 @@ int mb_rtu_read_holding_regs(const int iface,


#ifdef CONFIG_MODBUS_RTU_FP_EXTENSIONS
int mb_rtu_read_holding_regs_fp(const int iface,
int modbus_read_holding_regs_fp(const int iface,
			       const uint8_t node_addr,
			       const uint16_t start_addr,
			       float *const reg_buf,
@@ -399,7 +399,7 @@ int mb_rtu_read_holding_regs_fp(const int iface,
}
#endif

int mb_rtu_read_input_regs(const int iface,
int modbus_read_input_regs(const int iface,
			   const uint8_t node_addr,
			   const uint16_t start_addr,
			   uint16_t *const reg_buf,
@@ -424,7 +424,7 @@ int mb_rtu_read_input_regs(const int iface,
	return err;
}

int mb_rtu_write_coil(const int iface,
int modbus_write_coil(const int iface,
		      const uint8_t node_addr,
		      const uint16_t coil_addr,
		      const bool coil_state)
@@ -455,7 +455,7 @@ int mb_rtu_write_coil(const int iface,
	return err;
}

int mb_rtu_write_holding_reg(const int iface,
int modbus_write_holding_reg(const int iface,
			     const uint8_t node_addr,
			     const uint16_t start_addr,
			     const uint16_t reg_val)
@@ -479,7 +479,7 @@ int mb_rtu_write_holding_reg(const int iface,
	return err;
}

int mb_rtu_request_diagnostic(const int iface,
int modbus_request_diagnostic(const int iface,
			      const uint8_t node_addr,
			      const uint16_t sfunc,
			      const uint16_t data,
@@ -504,7 +504,7 @@ int mb_rtu_request_diagnostic(const int iface,
	return err;
}

int mb_rtu_write_coils(const int iface,
int modbus_write_coils(const int iface,
		       const uint8_t node_addr,
		       const uint16_t start_addr,
		       uint8_t *const coil_tbl,
@@ -537,7 +537,7 @@ int mb_rtu_write_coils(const int iface,
	return err;
}

int mb_rtu_write_holding_regs(const int iface,
int modbus_write_holding_regs(const int iface,
			      const uint8_t node_addr,
			      const uint16_t start_addr,
			      uint16_t *const reg_buf,
@@ -574,7 +574,7 @@ int mb_rtu_write_holding_regs(const int iface,
}

#ifdef CONFIG_MODBUS_RTU_FP_EXTENSIONS
int mb_rtu_write_holding_regs_fp(const int iface,
int modbus_write_holding_regs_fp(const int iface,
				 const uint8_t node_addr,
				 const uint16_t start_addr,
				 float *const reg_buf,
+10 −10
Original line number Diff line number Diff line
@@ -664,9 +664,9 @@ static struct mb_rtu_context *mb_cfg_iface(const uint8_t iface,
	return ctx;
}

int mb_rtu_cfg_server(const uint8_t iface, const uint8_t node_addr,
int modbus_init_server(const uint8_t iface, const uint8_t node_addr,
		       const uint32_t baud, const enum uart_config_parity parity,
		      struct mbs_rtu_user_callbacks *const cb,
		       struct modbus_user_callbacks *const cb,
		       const bool ascii_mode)
{
	struct mb_rtu_context *ctx;
@@ -693,7 +693,7 @@ int mb_rtu_cfg_server(const uint8_t iface, const uint8_t node_addr,
	return 0;
}

int mb_rtu_iface_get_by_name(const char *iface_name)
int modbus_iface_get_by_name(const char *iface_name)
{
	for (int i = 0; i < ARRAY_SIZE(mb_ctx_tbl); i++) {
		if (strcmp(iface_name, mb_ctx_tbl[i].iface_name) == 0) {
@@ -704,7 +704,7 @@ int mb_rtu_iface_get_by_name(const char *iface_name)
	return -ENODEV;
}

int mb_rtu_cfg_client(const uint8_t iface,
int modbus_init_client(const uint8_t iface,
		       const uint32_t baud, const enum uart_config_parity parity,
		       const uint32_t rx_timeout,
		       const bool ascii_mode)
@@ -726,7 +726,7 @@ int mb_rtu_cfg_client(const uint8_t iface,
	return 0;
}

int mb_rtu_disable_iface(const uint8_t iface)
int modbus_disable(const uint8_t iface)
{
	struct mb_rtu_context *ctx;

Loading