Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
AbstractModbusCommunicationProtocol.hpp
Go to the documentation of this file.
1#ifndef IV_SRC_COMMS_MODBUS_ABSTRACTMODBUSCOMMUNICATIONPROTOCOL_HPP_
2#define IV_SRC_COMMS_MODBUS_ABSTRACTMODBUSCOMMUNICATIONPROTOCOL_HPP_
3
6
7namespace iv::comms::modbus
8{
9
11{
12public:
15 const std::shared_ptr<iv::comms::ICommunicationDriver> &driver, iv::model::comms::modbus::Settings settings,
16 const std::weak_ptr<iv::diamar::AppFailuresLoggerManager> &appFailuresLoggerManager,
17 iv::types::networkId networkId, std::weak_ptr<iv::channels::AbstractChannel> &heartbeatChannel);
21
24
25 [[nodiscard]] bool isOnline() override
26 {
27 return m_driver->isOnline();
28 }
29
30 virtual bool writeQueries() = 0;
31 virtual bool readQueries() = 0;
32
33 std::optional<iv::types::comms::modbus::registerValue>
35
36 void emptyGrid();
37
38protected:
40 std::vector<std::shared_ptr<iv::channels::AbstractChannel>>> &channels,
41 const iv::types::networkId &netId, bool forceContinuousRegisters);
42
44
45 std::vector<iv::comms::modbus::ModbusQueryMessage> m_queriesCoils;
46 std::vector<iv::comms::modbus::ModbusQueryMessage>
48 std::vector<iv::comms::modbus::ModbusQueryMessage>
50 std::vector<iv::comms::modbus::ModbusQueryMessage>
52 std::vector<iv::comms::modbus::ModbusQueryMessage>
54 std::vector<iv::comms::modbus::ModbusQueryMessage>
56 std::map<iv::types::comms::modbus::modbusAddressAndFunction, std::optional<iv::types::comms::modbus::registerValue>>
59 std::weak_ptr<iv::channels::AbstractChannel> m_heartbeatChannel;
60 std::weak_ptr<iv::diamar::AppFailuresLoggerManager> m_appFailuresLoggerManager;
62
63private:
64 static void
66 std::vector<std::shared_ptr<iv::channels::AbstractChannel>>> &channelsByAddress,
67 std::vector<std::shared_ptr<iv::channels::AbstractChannel>> &readCoils,
68 std::vector<std::shared_ptr<iv::channels::AbstractChannel>> &readDiscreteInputs,
69 std::vector<std::shared_ptr<iv::channels::AbstractChannel>> &readInputRegisters,
70 std::vector<std::shared_ptr<iv::channels::AbstractChannel>> &readHoldingRegisters,
71 std::vector<std::shared_ptr<iv::channels::AbstractChannel>> &writeCoils,
72 std::vector<std::shared_ptr<iv::channels::AbstractChannel>> &writeHoldingRegisters,
73 const iv::types::networkId &netId);
74
75 [[nodiscard]] std::vector<iv::comms::modbus::ModbusQueryMessage>
76 buildSpecificQuery(const std::vector<std::shared_ptr<iv::channels::AbstractChannel>> &chVectOrderedByAddress,
77 uint16_t maxRegPerQuery, iv::comms::modbus::eFunctionCode mbFunction,
78 const iv::types::networkId &netId, bool forceContinuousRegisters = false) const;
79};
80
81}// namespace iv::comms::modbus
82
83#endif//IV_SRC_COMMS_MODBUS_ABSTRACTMODBUSCOMMUNICATIONPROTOCOL_HPP_
Definition ICommunicationProtocol.hpp:12
std::shared_ptr< iv::comms::ICommunicationDriver > m_driver
Definition ICommunicationProtocol.hpp:29
Definition AbstractModbusCommunicationProtocol.hpp:11
static void classifyChannelsMap(const std::map< iv::types::comms::modbus::modbusAddressAndFunction, std::vector< std::shared_ptr< iv::channels::AbstractChannel > > > &channelsByAddress, std::vector< std::shared_ptr< iv::channels::AbstractChannel > > &readCoils, std::vector< std::shared_ptr< iv::channels::AbstractChannel > > &readDiscreteInputs, std::vector< std::shared_ptr< iv::channels::AbstractChannel > > &readInputRegisters, std::vector< std::shared_ptr< iv::channels::AbstractChannel > > &readHoldingRegisters, std::vector< std::shared_ptr< iv::channels::AbstractChannel > > &writeCoils, std::vector< std::shared_ptr< iv::channels::AbstractChannel > > &writeHoldingRegisters, const iv::types::networkId &netId)
Definition AbstractModbusCommunicationProtocol.cpp:21
std::vector< iv::comms::modbus::ModbusQueryMessage > m_queriesWriteRegisters
Definition AbstractModbusCommunicationProtocol.hpp:55
std::optional< iv::types::comms::modbus::registerValue > getAddressValue(const iv::types::comms::modbus::modbusAddressAndFunction &addressAndFunct)
Definition AbstractModbusCommunicationProtocol.cpp:252
std::vector< iv::comms::modbus::ModbusQueryMessage > m_queriesHoldingRegisters
Definition AbstractModbusCommunicationProtocol.hpp:51
void buildAllQueries(const std::map< iv::types::comms::modbus::modbusAddressAndFunction, std::vector< std::shared_ptr< iv::channels::AbstractChannel > > > &channels, const iv::types::networkId &netId, bool forceContinuousRegisters)
Definition AbstractModbusCommunicationProtocol.cpp:122
std::vector< iv::comms::modbus::ModbusQueryMessage > buildSpecificQuery(const std::vector< std::shared_ptr< iv::channels::AbstractChannel > > &chVectOrderedByAddress, uint16_t maxRegPerQuery, iv::comms::modbus::eFunctionCode mbFunction, const iv::types::networkId &netId, bool forceContinuousRegisters=false) const
std::weak_ptr< iv::channels::AbstractChannel > m_heartbeatChannel
Definition AbstractModbusCommunicationProtocol.hpp:59
AbstractModbusCommunicationProtocol & operator=(const AbstractModbusCommunicationProtocol &other)=delete
iv::types::networkId m_networkId
Definition AbstractModbusCommunicationProtocol.hpp:61
bool isOnline() override
Definition AbstractModbusCommunicationProtocol.hpp:25
AbstractModbusCommunicationProtocol & operator=(AbstractModbusCommunicationProtocol &&other)=delete
void emptyGrid()
Definition AbstractModbusCommunicationProtocol.cpp:262
AbstractModbusCommunicationProtocol(const AbstractModbusCommunicationProtocol &other)=delete
iv::model::comms::modbus::Settings m_modbusSettings
Definition AbstractModbusCommunicationProtocol.hpp:43
std::vector< iv::comms::modbus::ModbusQueryMessage > m_queriesCoils
Definition AbstractModbusCommunicationProtocol.hpp:45
std::weak_ptr< iv::diamar::AppFailuresLoggerManager > m_appFailuresLoggerManager
Definition AbstractModbusCommunicationProtocol.hpp:60
AbstractModbusCommunicationProtocol(AbstractModbusCommunicationProtocol &&other)=delete
std::map< iv::types::comms::modbus::modbusAddressAndFunction, std::optional< iv::types::comms::modbus::registerValue > > m_valueAtAddress
Definition AbstractModbusCommunicationProtocol.hpp:57
std::vector< iv::comms::modbus::ModbusQueryMessage > m_queriesWriteCoils
Definition AbstractModbusCommunicationProtocol.hpp:53
std::vector< iv::comms::modbus::ModbusQueryMessage > m_queriesInputRegisters
Definition AbstractModbusCommunicationProtocol.hpp:49
std::vector< iv::comms::modbus::ModbusQueryMessage > m_queriesDiscreteInputs
Definition AbstractModbusCommunicationProtocol.hpp:47
Definition AbstractModbusCommunicationProtocol.cpp:8
eFunctionCode
Definition enums.hpp:23
std::pair< iv::types::comms::modbus::modbusAddress, iv::comms::modbus::eRegisterType > modbusAddressAndFunction
Definition defines.hpp:39
std::string networkId
Definition types.hpp:43
Definition ModbusSettings.hpp:11