modbus: include timer

This commit is contained in:
Vasily Davydov 2022-10-27 13:14:37 +03:00
parent a3332c562f
commit 2bef3ce8c0

View File

@ -1,6 +1,7 @@
/** /**
@file @file
Arduino library for communicating with Modbus slaves over RS232/485 (via RTU protocol). Arduino library for communicating with Modbus slaves over RS232/485 (via RTU
protocol).
@defgroup setup ModbusMaster Object Instantiation/Initialization @defgroup setup ModbusMaster Object Instantiation/Initialization
@defgroup buffer ModbusMaster Buffer Management @defgroup buffer ModbusMaster Buffer Management
@ -33,10 +34,10 @@ Arduino library for communicating with Modbus slaves over RS232/485 (via RTU pro
*/ */
#ifndef ModbusMaster_h #ifndef ModbusMaster_h
#define ModbusMaster_h #define ModbusMaster_h
#include "Timer.h"
/** /**
@def __MODBUSMASTER_DEBUG__ (1). @def __MODBUSMASTER_DEBUG__ (1).
@ -46,24 +47,24 @@ Set to 1 to enable debugging features within class:
*/ */
#define __MODBUSMASTER_DEBUG__ (0) #define __MODBUSMASTER_DEBUG__ (0)
/* _____STANDARD INCLUDES____________________________________________________
/* _____STANDARD INCLUDES____________________________________________________ */ */
// include types & constants of Wiring core API // include types & constants of Wiring core API
#if defined(ARDUINO) && ARDUINO >= 100 #if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h" #include "Arduino.h"
#else #else
//#include "WProgram.h" //#include "WProgram.h"
#include <stdint.h>
#include <cstddef> #include <cstddef>
#include <stdint.h>
#endif #endif
uint32_t millis();
#define BYTE 0xA5 #define BYTE 0xA5
/* _____UTILITY MACROS_______________________________________________________ */ /* _____UTILITY MACROS_______________________________________________________
*/
/* _____PROJECT INCLUDES_____________________________________________________
/* _____PROJECT INCLUDES_____________________________________________________ */ */
// functions to calculate Modbus Application Data Unit CRC // functions to calculate Modbus Application Data Unit CRC
//#include "util/crc16.h" //#include "util/crc16.h"
// moved inlcuding crc16.h to ModbusMaster.cpp // moved inlcuding crc16.h to ModbusMaster.cpp
@ -72,10 +73,10 @@ uint32_t millis();
///#include "util/word.h" ///#include "util/word.h"
#include "word.h" #include "word.h"
#include "SerialPort.h" #include "SerialPort.h"
/* _____CLASS DEFINITIONS____________________________________________________ */ /* _____CLASS DEFINITIONS____________________________________________________
*/
/** /**
Arduino class library for communicating with Modbus slaves over Arduino class library for communicating with Modbus slaves over
RS232/485 (via RTU protocol). RS232/485 (via RTU protocol).
@ -217,7 +218,6 @@ class ModbusMaster
uint8_t available (void); uint8_t available (void);
uint16_t receive (void); uint16_t receive (void);
uint8_t readCoils (uint16_t, uint16_t); uint8_t readCoils (uint16_t, uint16_t);
uint8_t readDiscreteInputs (uint16_t, uint16_t); uint8_t readDiscreteInputs (uint16_t, uint16_t);
uint8_t readHoldingRegisters (uint16_t, uint16_t); uint8_t readHoldingRegisters (uint16_t, uint16_t);
@ -236,13 +236,19 @@ class ModbusMaster
uint8_t _u8SerialPort; ///< serial port (0..3) initialized in constructor uint8_t _u8SerialPort; ///< serial port (0..3) initialized in constructor
uint8_t _u8MBSlave; ///< Modbus slave (1..255) initialized in constructor uint8_t _u8MBSlave; ///< Modbus slave (1..255) initialized in constructor
uint16_t _u16BaudRate; ///< baud rate (300..115200) initialized in begin() uint16_t _u16BaudRate; ///< baud rate (300..115200) initialized in begin()
static const uint8_t ku8MaxBufferSize = 64; ///< size of response/transmit buffers static const uint8_t ku8MaxBufferSize
= 64; ///< size of response/transmit buffers
uint16_t _u16ReadAddress; ///< slave register from which to read uint16_t _u16ReadAddress; ///< slave register from which to read
uint16_t _u16ReadQty; ///< quantity of words to read uint16_t _u16ReadQty; ///< quantity of words to read
uint16_t _u16ResponseBuffer[ku8MaxBufferSize]; ///< buffer to store Modbus slave response; read via GetResponseBuffer() uint16_t _u16ResponseBuffer[ku8MaxBufferSize]; ///< buffer to store Modbus
///< slave response; read via
///< GetResponseBuffer()
uint16_t _u16WriteAddress; ///< slave register to which to write uint16_t _u16WriteAddress; ///< slave register to which to write
uint16_t _u16WriteQty; ///< quantity of words to write uint16_t _u16WriteQty; ///< quantity of words to write
uint16_t _u16TransmitBuffer[ku8MaxBufferSize]; ///< buffer containing data to transmit to Modbus slave; set via SetTransmitBuffer() uint16_t
_u16TransmitBuffer[ku8MaxBufferSize]; ///< buffer containing data to
///< transmit to Modbus slave; set
///< via SetTransmitBuffer()
uint16_t *txBuffer; // from Wire.h -- need to clean this up Rx uint16_t *txBuffer; // from Wire.h -- need to clean this up Rx
uint8_t _u8TransmitBufferIndex; uint8_t _u8TransmitBufferIndex;
uint16_t u16TransmitBufferLength; uint16_t u16TransmitBufferLength;
@ -251,21 +257,32 @@ class ModbusMaster
uint8_t _u8ResponseBufferLength; uint8_t _u8ResponseBufferLength;
// Modbus function codes for bit access // Modbus function codes for bit access
static const uint8_t ku8MBReadCoils = 0x01; ///< Modbus function 0x01 Read Coils static const uint8_t ku8MBReadCoils
static const uint8_t ku8MBReadDiscreteInputs = 0x02; ///< Modbus function 0x02 Read Discrete Inputs = 0x01; ///< Modbus function 0x01 Read Coils
static const uint8_t ku8MBWriteSingleCoil = 0x05; ///< Modbus function 0x05 Write Single Coil static const uint8_t ku8MBReadDiscreteInputs
static const uint8_t ku8MBWriteMultipleCoils = 0x0F; ///< Modbus function 0x0F Write Multiple Coils = 0x02; ///< Modbus function 0x02 Read Discrete Inputs
static const uint8_t ku8MBWriteSingleCoil
= 0x05; ///< Modbus function 0x05 Write Single Coil
static const uint8_t ku8MBWriteMultipleCoils
= 0x0F; ///< Modbus function 0x0F Write Multiple Coils
// Modbus function codes for 16 bit access // Modbus function codes for 16 bit access
static const uint8_t ku8MBReadHoldingRegisters = 0x03; ///< Modbus function 0x03 Read Holding Registers static const uint8_t ku8MBReadHoldingRegisters
static const uint8_t ku8MBReadInputRegisters = 0x04; ///< Modbus function 0x04 Read Input Registers = 0x03; ///< Modbus function 0x03 Read Holding Registers
static const uint8_t ku8MBWriteSingleRegister = 0x06; ///< Modbus function 0x06 Write Single Register static const uint8_t ku8MBReadInputRegisters
static const uint8_t ku8MBWriteMultipleRegisters = 0x10; ///< Modbus function 0x10 Write Multiple Registers = 0x04; ///< Modbus function 0x04 Read Input Registers
static const uint8_t ku8MBMaskWriteRegister = 0x16; ///< Modbus function 0x16 Mask Write Register static const uint8_t ku8MBWriteSingleRegister
static const uint8_t ku8MBReadWriteMultipleRegisters = 0x17; ///< Modbus function 0x17 Read Write Multiple Registers = 0x06; ///< Modbus function 0x06 Write Single Register
static const uint8_t ku8MBWriteMultipleRegisters
= 0x10; ///< Modbus function 0x10 Write Multiple Registers
static const uint8_t ku8MBMaskWriteRegister
= 0x16; ///< Modbus function 0x16 Mask Write Register
static const uint8_t ku8MBReadWriteMultipleRegisters
= 0x17; ///< Modbus function 0x17 Read Write Multiple Registers
// Modbus timeout [milliseconds] // Modbus timeout [milliseconds]
static const uint16_t ku16MBResponseTimeout = 2000; ///< Modbus timeout [milliseconds] static const uint16_t ku16MBResponseTimeout
= 2000; ///< Modbus timeout [milliseconds]
// master function that conducts Modbus transactions // master function that conducts Modbus transactions
uint8_t ModbusMasterTransaction (uint8_t u8MBFunction); uint8_t ModbusMasterTransaction (uint8_t u8MBFunction);