Modbus cpp 0.1
Loading...
Searching...
No Matches
modbusRequest.hpp
1// Modbus for c++ <https://github.com/Mazurel/Modbus>
2// Copyright (c) 2020 Mateusz Mazur aka Mazurel
3// Licensed under: MIT License <http://opensource.org/licenses/MIT>
4
5#pragma once
6
7#include <cstdint>
8#include <stdexcept>
9#include <string>
10#include <vector>
11
12#include "modbusCell.hpp"
13#include "modbusException.hpp"
14
18namespace MB {
24 private:
25 uint8_t _slaveID;
26 utils::MBFunctionCode _functionCode;
27
28 uint16_t _address;
29 uint16_t _registersNumber;
30
31 std::vector<ModbusCell> _values;
32
33 public:
34 // We do not allow default CTORs: https://github.com/Mazurel/Modbus/issues/6
35 ModbusRequest() = delete;
36
50 explicit ModbusRequest(const std::vector<uint8_t> &inputData,
51 bool CRC = false) noexcept(false);
52
53 /*
54 * @description Constructs Request from raw data
55 * @params inputData is a vector of bytes that will be interpreted
56 * @throws ModbusException
57 **/
58 static ModbusRequest fromRaw(const std::vector<uint8_t> &inputData) noexcept(false) {
59 return ModbusRequest(inputData);
60 }
61
62 /*
63 * @description Constructs Request from raw data and checks it's CRC
64 * @params inputData is a vector of bytes that will be interpreted
65 * @throws ModbusException
66 * @note This methods performs CRC check that may throw ModbusException on
67 * invalid CRC
68 **/
69 static ModbusRequest fromRawCRC(const std::vector<uint8_t> &inputData) {
70 return ModbusRequest(inputData, true);
71 }
72
77 explicit ModbusRequest(
78 uint8_t slaveId = 0,
79 utils::MBFunctionCode functionCode = static_cast<utils::MBFunctionCode>(0),
80 uint16_t address = 0, uint16_t registersNumber = 0,
81 std::vector<ModbusCell> values = {}) noexcept;
82
83 ModbusRequest(const ModbusRequest &) = default;
84
86 [[nodiscard]] std::string toString() const noexcept;
89 [[nodiscard]] std::vector<uint8_t> toRaw() const noexcept;
90
92 [[nodiscard]] utils::MBFunctionType functionType() const noexcept {
93 return utils::functionType(_functionCode);
94 }
96 [[nodiscard]] utils::MBFunctionRegisters functionRegisters() const noexcept {
97 return utils::functionRegister(_functionCode);
98 }
99
100 [[nodiscard]] uint8_t slaveID() const { return _slaveID; }
101 [[nodiscard]] utils::MBFunctionCode functionCode() const { return _functionCode; }
102 [[nodiscard]] uint16_t registerAddress() const { return _address; }
103 [[nodiscard]] uint16_t numberOfRegisters() const { return _registersNumber; }
104 [[nodiscard]] const std::vector<ModbusCell> &registerValues() const {
105 return _values;
106 }
107
108 void setSlaveId(uint8_t slaveId) { _slaveID = slaveId; }
109 void setFunctionCode(utils::MBFunctionCode functionCode) {
110 _functionCode = functionCode;
111 }
112 void setAddress(uint16_t address) { _address = address; }
113 void setRegistersNumber(uint16_t registersNumber) {
114 _registersNumber = registersNumber;
115 _values.resize(registersNumber);
116 }
117 void setValues(const std::vector<ModbusCell> &values) { _values = values; }
118};
119} // namespace MB
Definition modbusRequest.hpp:23
utils::MBFunctionType functionType() const noexcept
Returns function type based on Modbus function code.
Definition modbusRequest.hpp:92
std::string toString() const noexcept
Returns string representation of object.
Definition modbusRequest.cpp:106
utils::MBFunctionRegisters functionRegisters() const noexcept
Returns register type based on Modbus function code.
Definition modbusRequest.hpp:96
std::vector< uint8_t > toRaw() const noexcept
Definition modbusRequest.cpp:134
MBFunctionType
Simplified function types.
Definition modbusUtils.hpp:137
MBFunctionRegisters
Simplified register types.
Definition modbusUtils.hpp:159
MBFunctionCode
All modbus standard function codes + Undefined one.
Definition modbusUtils.hpp:117
MBFunctionType functionType(const MBFunctionCode code)
Checks "Function type", according to MBFunctionType.
Definition modbusUtils.hpp:140
MBFunctionRegisters functionRegister(const MBFunctionCode code)
Get register type based on function code.
Definition modbusUtils.hpp:162
Definition crc.hpp:5