2.2 KiB
2.2 KiB
Modbus
Path: src/modbus/Modbus.h
Revision History: Initial documentation
A header file providing standardized macros for initializing Modbus communication blocks in ESP-32 industrial applications.
Requirements
- ESP-32 microcontroller
- PlatformIO development environment
- C++17 support
Provides
- INIT_MODBUS_BLOCK_TCP: Macro for initializing Modbus blocks with TCP base address
- INIT_MODBUS_BLOCK: Macro for initializing standard Modbus blocks
- LOW_WORD / HIGH_WORD: Macros for handling 32-bit word operations
Features
- Standardized initialization of Modbus communication blocks
- Automated address calculations based on specified offsets
- Consistent parameter setting for both TCP and standard interfaces
- Streamlined documentation and organization through group identifiers
Dependencies
graph TD
Modbus[Modbus.h] --> ModbusTypes[ModbusTypes.h]
Behaviour
The Modbus header provides initialization macros that ensure consistent formatting and values when setting up Modbus blocks. These macros handle address calculations, function codes, and access permissions.
graph TD
Start[Application code] --> UsesMacros[Uses INIT_MODBUS_BLOCK macros]
UsesMacros --> TCP{Is TCP?}
TCP -->|Yes| TCPMACRO[INIT_MODBUS_BLOCK_TCP]
TCP -->|No| STDMACRO[INIT_MODBUS_BLOCK]
TCPMACRO --> ModbusBlock[Initialized Modbus Block]
STDMACRO --> ModbusBlock
TODOs
Performance
- Consider pre-computing constant addresses at compile time where possible to reduce runtime calculations
Security
- Add validation macros to ensure proper function code and access flag combinations
- Implement range checking for addresses to prevent potential buffer overflows
Compliance
- Validate against Modbus specifications for both RTU and TCP implementations
- Ensure error handling complies with industrial standards
Recommendations
- Use these macros consistently across the codebase to maintain uniformity
- Document the address range and offset enumerations carefully to avoid address conflicts
- Consider adding specific macros for different function types (read vs. write operations)