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
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 buffer ModbusMaster Buffer Management
@ -33,10 +34,10 @@ Arduino library for communicating with Modbus slaves over RS232/485 (via RTU pro
*/
#ifndef ModbusMaster_h
#define ModbusMaster_h
#include "Timer.h"
/**
@def __MODBUSMASTER_DEBUG__ (1).
@ -46,24 +47,24 @@ Set to 1 to enable debugging features within class:
*/
#define __MODBUSMASTER_DEBUG__ (0)
/* _____STANDARD INCLUDES____________________________________________________ */
/* _____STANDARD INCLUDES____________________________________________________
*/
// include types & constants of Wiring core API
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
//#include "WProgram.h"
#include <stdint.h>
#include <cstddef>
#include <stdint.h>
#endif
uint32_t millis();
#define BYTE 0xA5
/* _____UTILITY MACROS_______________________________________________________ */
/* _____UTILITY MACROS_______________________________________________________
*/
/* _____PROJECT INCLUDES_____________________________________________________ */
/* _____PROJECT INCLUDES_____________________________________________________
*/
// functions to calculate Modbus Application Data Unit CRC
//#include "util/crc16.h"
// moved inlcuding crc16.h to ModbusMaster.cpp
@ -72,10 +73,10 @@ uint32_t millis();
///#include "util/word.h"
#include "word.h"
#include "SerialPort.h"
/* _____CLASS DEFINITIONS____________________________________________________ */
/* _____CLASS DEFINITIONS____________________________________________________
*/
/**
Arduino class library for communicating with Modbus slaves over
RS232/485 (via RTU protocol).
@ -217,7 +218,6 @@ class ModbusMaster
uint8_t available (void);
uint16_t receive (void);
uint8_t readCoils (uint16_t, uint16_t);
uint8_t readDiscreteInputs (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 _u8MBSlave; ///< Modbus slave (1..255) initialized in constructor
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 _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 _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
uint8_t _u8TransmitBufferIndex;
uint16_t u16TransmitBufferLength;
@ -251,21 +257,32 @@ class ModbusMaster
uint8_t _u8ResponseBufferLength;
// Modbus function codes for bit access
static const uint8_t ku8MBReadCoils = 0x01; ///< Modbus function 0x01 Read Coils
static const uint8_t ku8MBReadDiscreteInputs = 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
static const uint8_t ku8MBReadCoils
= 0x01; ///< Modbus function 0x01 Read Coils
static const uint8_t ku8MBReadDiscreteInputs
= 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
static const uint8_t ku8MBReadHoldingRegisters = 0x03; ///< Modbus function 0x03 Read Holding Registers
static const uint8_t ku8MBReadInputRegisters = 0x04; ///< Modbus function 0x04 Read Input Registers
static const uint8_t ku8MBWriteSingleRegister = 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
static const uint8_t ku8MBReadHoldingRegisters
= 0x03; ///< Modbus function 0x03 Read Holding Registers
static const uint8_t ku8MBReadInputRegisters
= 0x04; ///< Modbus function 0x04 Read Input Registers
static const uint8_t ku8MBWriteSingleRegister
= 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]
static const uint16_t ku16MBResponseTimeout = 2000; ///< Modbus timeout [milliseconds]
static const uint16_t ku16MBResponseTimeout
= 2000; ///< Modbus timeout [milliseconds]
// master function that conducts Modbus transactions
uint8_t ModbusMasterTransaction (uint8_t u8MBFunction);