68 lines
1.9 KiB
C++
68 lines
1.9 KiB
C++
/*
|
|
* ModBusRtuSetup.hh
|
|
*
|
|
* Created on: 30 èþí. 2020 ã.
|
|
* Author: s.maksimenko
|
|
*/
|
|
|
|
#ifndef UMLIBRARY_APPLICATION_DRIVERS_MODBUSRTU_HH_
|
|
#define UMLIBRARY_APPLICATION_DRIVERS_MODBUSRTUSETUP_HH_
|
|
|
|
#include <memory_resource>
|
|
#include "../ISetupStep.hh"
|
|
#include "../../peripheral/IUartPort.hh"
|
|
#include "../../systemic/ISignal.hh"
|
|
#include "../../systemic/IStatus.hh"
|
|
|
|
namespace application {
|
|
namespace drivers {
|
|
|
|
//!Äðàéâåð ïðîòîêîëà îáìåíà Modbus RTU.
|
|
class ModbusRtu : public ISetupStep {
|
|
|
|
typedef systemic::ISignal ISignal;
|
|
typedef systemic::IStatus IStatus;
|
|
|
|
peripheral::IUartPort* mpPort = nullptr;
|
|
|
|
std::pmr::memory_resource * mpMemRes = nullptr;
|
|
|
|
ISignal * mpSigAddrModBus = nullptr;
|
|
IStatus * mpStsAddrValid = nullptr;
|
|
|
|
public:
|
|
bool input ( Environment & env );
|
|
void build ( Environment & env );
|
|
|
|
struct Links {
|
|
/* Input links */
|
|
Environment::Id uart; //!<Ïîðò Modbus.
|
|
Environment::SignalId address; //!<Àäðåñ íà øèíå Modbus RTU.
|
|
Environment::StatusId enable; //!<Ðàçðåøåíèå ïðèñâîåíèÿ àäðåñà.
|
|
Environment::Id memory; //!<Cèñòåìíûé èäåíòèôèêàòîð àëëîêàòîðà ïàìÿòè
|
|
|
|
/* Output links */
|
|
Environment::Id modbus_rtu; //!<Ïðîòîêîë Modbus RTU.
|
|
Environment::Id crc_error; //!<Îøèáêà êîíòðîëüíîé ñóììû.
|
|
Environment::Id incorrect_request; //!<Íåêîððåêòíûé çàïðîñ.
|
|
Environment::Id packet_counter; //!<Ñ÷åò÷èê ïàêåòîâ.
|
|
};
|
|
|
|
struct Setting {
|
|
uint16_t address; //!<Àäðåñ íà øèíå MODBUS (åñëè == 0 òî àäðåñ îïðåäåëÿåòñÿ links.sigAddr)
|
|
};
|
|
|
|
const Links & links;
|
|
const Setting & cfg;
|
|
const configuration::ProcessConfig & params;
|
|
|
|
ModbusRtu( const Links &, const Setting &, const configuration::ProcessConfig & );
|
|
};
|
|
|
|
}// namespace drivers
|
|
}// namespace application
|
|
|
|
|
|
|
|
#endif /* UMLIBRARY_APPLICATION_DRIVERS_MODBUSRTU_HH_ */
|