123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #pragma once
- #ifndef __MODBUS__H_
- #define __MODBUS__H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "Arduino.h"
- #define MB_ID 0xAA
- /* ----------------------- Defines ------------------------------------------*/
- #define MB_SER_PDU_SIZE_MIN 4 /*!< Minimum size of a Modbus RTU frame. */
- #define MB_SER_PDU_SIZE_MAX 256 /*!< Maximum size of a Modbus RTU frame. */
- #define MB_SER_PDU_SIZE_CRC 2 /*!< Size of CRC field in PDU. */
- #define MB_SER_PDU_ADDR_OFF 0 /*!< Offset of slave address in Ser-PDU. */
- #define MB_SER_PDU_PDU_OFF 1 /*!< Offset of Modbus-PDU in Ser-PDU. */
- #define MB_ADDRESS_BROADCAST (0) /*! Modbus broadcast address. */
- #define MB_ADDRESS_MIN (1) /*! Smallest possible slave address. */
- #define MB_ADDRESS_MAX (247) /*! Biggest possible slave address. */
- #define MB_FUNC_NONE (0)
- #define MB_FUNC_READ_COILS (1)
- #define MB_FUNC_READ_DISCRETE_INPUTS (2)
- #define MB_FUNC_WRITE_SINGLE_COIL (5)
- #define MB_FUNC_WRITE_MULTIPLE_COILS (15)
- #define MB_FUNC_READ_HOLDING_REGISTER (3)
- #define MB_FUNC_READ_INPUT_REGISTER (4)
- #define MB_FUNC_WRITE_REGISTER (6)
- #define MB_FUNC_WRITE_MULTIPLE_REGISTERS (16)
- #define MB_FUNC_READWRITE_MULTIPLE_REGISTERS (23)
- #define MB_FUNC_DIAG_READ_EXCEPTION (7)
- #define MB_FUNC_DIAG_DIAGNOSTIC (8)
- #define MB_FUNC_DIAG_GET_COM_EVENT_CNT (11)
- #define MB_FUNC_DIAG_GET_COM_EVENT_LOG (12)
- #define MB_FUNC_OTHER_REPORT_SLAVEID (17)
- #define MB_FUNC_ERROR (128)
- enum MB_FC {
- MB_FC_NONE = 0, /*!< null operator */
- MB_FC_READ_COILS = 1, /*!< FCT=1 -> read coils or digital outputs */
- MB_FC_READ_DISCRETE_INPUT = 2, /*!< FCT=2 -> read digital inputs */
- MB_FC_READ_REGISTERS = 3, /*!< FCT=3 -> read registers or analog outputs */
- MB_FC_READ_INPUT_REGISTER = 4, /*!< FCT=4 -> read analog inputs */
- MB_FC_WRITE_COIL = 5, /*!< FCT=5 -> write single coil or output */
- MB_FC_WRITE_REGISTER = 6, /*!< FCT=6 -> write single register */
- MB_FC_WRITE_MULTIPLE_COILS =
- 15, /*!< FCT=15 -> write multiple coils or outputs */
- MB_FC_WRITE_MULTIPLE_REGISTERS =
- 16 /*!< FCT=16 -> write multiple registers */
- };
- enum MB_STATUS {
- MB_OK = 0,
- MB_FRAME = -1,
- MB_BUFF_OVERFLOW = -2,
- MB_CRC_ERROR = -3,
- };
- typedef enum {
- MB_ENOERR, /*!< no error. */
- MB_ENOREG, /*!< illegal register address. */
- MB_EINVAL, /*!< illegal argument. */
- MB_EPORTERR, /*!< porting layer error. */
- MB_ENORES, /*!< insufficient resources. */
- MB_EIO, /*!< I/O error. */
- MB_EILLSTATE, /*!< protocol stack in illegal state. */
- MB_ETIMEDOUT /*!< timeout error occurred. */
- } eMBErrorCode;
- void mb_put_rec_data(uint8_t data);
- void mb_init(uint8_t id, uint32_t boudrate, volatile uint32_t *time_base);
- void mb_poll();
- void mb_send_frame(uint8_t *frame, uint16_t length);
- __attribute__((weak)) void mb_send_one_byte(uint8_t data);
- __attribute__((weak)) void mb_get_frame_cb(uint8_t rcvAddress, uint8_t *frame,
- uint16_t length);
- __attribute__((weak)) void mb_get_frame_error_cb(eMBErrorCode);
- #ifdef __cplusplus
- }
- #endif
- #endif
|