Modbus cpp 0.1
Loading...
Searching...
No Matches
modbusResponse.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#include "modbusRequest.hpp"
15#include "modbusUtils.hpp"
16
20namespace MB {
26 private:
27 uint8_t _slaveID;
28 utils::MBFunctionCode _functionCode;
29
30 uint16_t _address;
31 uint16_t _registersNumber;
32
33 std::vector<ModbusCell> _values;
34
35 public:
36 // We do not allow default CTORs: https://github.com/Mazurel/Modbus/issues/6
37 ModbusResponse() = delete;
38
52 explicit ModbusResponse(std::vector<uint8_t> inputData, bool CRC = false);
53
54 /*
55 * @description Constructs Response from raw data
56 * @params inputData is a vector of bytes that will be interpreted
57 * @throws ModbusException
58 **/
59 static ModbusResponse fromRaw(std::vector<uint8_t> inputData) {
60 return ModbusResponse(inputData);
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 ModbusResponse fromRawCRC(std::vector<uint8_t> inputData) {
70 return ModbusResponse(inputData, true);
71 }
72
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 = {});
82
83 ModbusResponse(const ModbusResponse &) = default;
84
86 [[nodiscard]] std::string toString() const;
87 [[nodiscard]] std::vector<uint8_t> toRaw() const;
89 void from(const ModbusRequest &);
90
91 [[nodiscard]] utils::MBFunctionType functionType() const {
92 return utils::functionType(_functionCode);
93 }
94
95 [[nodiscard]] utils::MBFunctionRegisters functionRegisters() const {
96 return utils::functionRegister(_functionCode);
97 }
98
99 [[nodiscard]] uint8_t slaveID() const { return _slaveID; }
100 [[nodiscard]] utils::MBFunctionCode functionCode() const { return _functionCode; }
101 [[nodiscard]] uint16_t registerAddress() const { return _address; }
102 [[nodiscard]] uint16_t numberOfRegisters() const { return _registersNumber; }
103 [[nodiscard]] const std::vector<ModbusCell> &registerValues() const {
104 return _values;
105 }
106
107 void setSlaveId(uint8_t slaveId) { _slaveID = slaveId; }
108 void setFunctionCode(utils::MBFunctionCode functionCode) {
109 _functionCode = functionCode;
110 }
111 void setAddress(uint16_t address) { _address = address; }
112 void setRegistersNumber(uint16_t registersNumber) {
113 _registersNumber = registersNumber;
114 _values.resize(registersNumber);
115 }
116 void setValues(const std::vector<ModbusCell> &values) { _values = values; }
117};
118} // namespace MB
Definition modbusRequest.hpp:23
Definition modbusResponse.hpp:25
void from(const ModbusRequest &)
Fills all data from associated request.
Definition modbusResponse.cpp:181
std::string toString() const
Converts object to it's string representation.
Definition modbusResponse.cpp:109
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