24 #include <unordered_map> 26 #include <condition_variable> 29 #include "UniSetObject.h" 30 #include "modbus/ModbusTypes.h" 31 #include "modbus/ModbusServerSlot.h" 32 #include "modbus/ModbusTCPServer.h" 33 #include "modbus/ModbusTCPServerSlot.h" 34 #include "PassiveTimer.h" 37 #include "SMInterface.h" 38 #include "SharedMemory.h" 41 #include "ThreadCreator.h" 42 #include "LogServer.h" 43 #include "LogAgregator.h" 47 #define vmonit( var ) vmon.add( #var, var ) 340 static std::shared_ptr<MBSlave>
init_mbslave(
int argc,
const char*
const* argv,
342 const std::string& prefix =
"mbs" );
344 static void help_print(
int argc,
const char*
const* argv );
346 static const int NoSafetyState = -1;
355 std::string amode2str( AccessMode m );
368 ModbusRTU::RegID regID;
373 vtype(VTypes::vtUnknown),
379 friend std::ostream& operator<<( std::ostream& os,
IOProperty& p );
385 typedef std::vector<IOProperty> BitSensorMap;
395 friend std::ostream& operator<<( std::ostream& os,
BitRegProperty& p );
396 friend std::ostream& operator<<( std::ostream& os,
BitRegProperty* p );
399 inline long getConnCount()
404 inline std::shared_ptr<LogAgregator> getLogAggregator()
408 inline std::shared_ptr<DebugStream> log()
415 #ifndef DISABLE_REST_API 417 virtual Poco::JSON::Object::Ptr httpHelp(
const Poco::URI::QueryParameters& p )
override;
418 virtual Poco::JSON::Object::Ptr httpRequest(
const std::string& req,
const Poco::URI::QueryParameters& p )
override;
478 typedef std::map<ModbusRTU::RegID, IOProperty> RegMap;
480 typedef std::unordered_map<ModbusRTU::ModbusAddr, RegMap> IOMap;
486 typedef std::list<IOBase> ThresholdList;
487 ThresholdList thrlist;
489 std::shared_ptr<ModbusServerSlot> mbslot;
490 std::unordered_set<ModbusRTU::ModbusAddr>
vaddr;
491 std::string default_mbaddr = {
"" };
493 xmlNode* cnode = { 0 };
494 std::string s_field = {
"" };
495 std::string s_fvalue = {
"" };
496 int default_mbfunc = {0};
498 std::shared_ptr<SMInterface> shm;
503 void askSensors( UniversalIO::UIOCommand cmd );
505 virtual void execute_rtu();
506 virtual void execute_tcp();
507 virtual void updateStatistics();
508 virtual void updateTCPStatistics();
509 virtual void updateThresholds();
510 virtual void postReceiveEvent( ModbusRTU::mbErrCode res );
517 virtual void finalThread();
524 uniset::timeout_t checkExchangeTime = { 10000 };
526 virtual void initIterators();
528 bool readItem(
const std::shared_ptr<UniXML>& xml,
UniXML::iterator& it, xmlNode* sec );
530 void readConfiguration();
533 ModbusRTU::mbErrCode real_write( RegMap& rmap,
const ModbusRTU::ModbusData regOKOK, ModbusRTU::ModbusData val,
const int fn = 0 );
534 ModbusRTU::mbErrCode real_write( RegMap& rmap,
const ModbusRTU::ModbusData regOKOK, ModbusRTU::ModbusData* dat,
size_t& i,
size_t count,
const int fn = 0 );
535 ModbusRTU::mbErrCode real_read( RegMap& rmap,
const ModbusRTU::ModbusData regOKOK, ModbusRTU::ModbusData& val,
const int fn = 0 );
536 ModbusRTU::mbErrCode much_real_read( RegMap& rmap,
const ModbusRTU::ModbusData regOKOK, ModbusRTU::ModbusData* dat,
size_t count,
const int fn = 0 );
537 ModbusRTU::mbErrCode much_real_write(RegMap& rmap,
const ModbusRTU::ModbusData regOKOK, ModbusRTU::ModbusData* dat,
size_t count,
const int fn = 0 );
539 ModbusRTU::mbErrCode real_read_it( RegMap& rmap, RegMap::iterator& it, ModbusRTU::ModbusData& val );
540 ModbusRTU::mbErrCode real_bitreg_read_it( std::shared_ptr<BitRegProperty>& bp, ModbusRTU::ModbusData& val );
541 ModbusRTU::mbErrCode real_read_prop(
IOProperty* p, ModbusRTU::ModbusData& val );
543 ModbusRTU::mbErrCode real_write_it(RegMap& rmap, RegMap::iterator& it, ModbusRTU::ModbusData* dat,
size_t& i,
size_t count );
544 ModbusRTU::mbErrCode real_bitreg_write_it( std::shared_ptr<BitRegProperty>& bp,
const ModbusRTU::ModbusData val );
545 ModbusRTU::mbErrCode real_write_prop(
IOProperty* p, ModbusRTU::ModbusData* dat,
size_t& i,
size_t count );
547 #ifndef DISABLE_REST_API 549 Poco::JSON::Object::Ptr request_regs(
const std::string& req,
const Poco::URI::QueryParameters& p );
550 Poco::JSON::Object::Ptr get_regs(ModbusRTU::ModbusAddr addr,
const RegMap& rmap,
const std::vector<std::string>& q_regs );
551 Poco::JSON::Object::Ptr get_reginfo(
const IOProperty& prop );
554 timeout_t initPause = { 3000 };
556 std::unique_ptr< ThreadCreator<MBSlave> > thr;
558 std::mutex mutexStartNotify;
559 std::condition_variable startNotifyEvent;
563 long maxHeartBeat = { 10 };
564 IOController::IOStateList::iterator itHeartBeat;
567 IOController::IOStateList::iterator itAskCount;
570 IOController::IOStateList::iterator itRespond;
572 bool respond_invert = {
false };
575 long connCount = { 0 };
576 long restartTCPServerCount = { 0 };
578 std::atomic_bool activated = {
false };
579 std::atomic_bool cancelled = {
false };
580 timeout_t activateTimeout = { 20000 };
581 bool smPingOK = {
false };
582 timeout_t wait_msec = { 3000 };
585 bool mbregFromID = {0};
586 bool checkMBFunc = {0};
587 bool noMBFuncOptimize = {0};
589 int getOptimizeWriteFunction(
const int fn );
591 typedef std::unordered_map<int, std::string> FileList;
593 std::string prefix = {
"" };
594 std::string prop_prefix = {
"" };
596 ModbusRTU::ModbusData
buf[ModbusRTU::MAXLENPACKET / 2 + 1];
601 typedef std::unordered_map<int, std::string> MEIValMap;
602 typedef std::unordered_map<int, MEIValMap> MEIObjIDMap;
603 typedef std::unordered_map<int, MEIObjIDMap> MEIDevIDMap;
607 std::shared_ptr<LogAgregator> loga;
608 std::shared_ptr<DebugStream> mblog;
609 std::shared_ptr<LogServer> logserv;
610 std::string logserv_host = {
""};
611 int logserv_port = {0};
613 std::string mbtype = {
"" };
620 timeout_t updateStatTime = { 4000 };
621 ModbusTCPServer::Sessions
sess;
622 std::mutex sessMutex;
623 size_t sessMaxNum = { 5 };
624 std::shared_ptr<ModbusTCPServerSlot> tcpserver;
634 std::string iaddr = {
"" };
637 IOController::IOStateList::iterator respond_it;
640 timeout_t tout = { 2000 };
642 long askCount = { 0 };
644 IOController::IOStateList::iterator askcount_it;
646 inline void initIterators(
const std::shared_ptr<SMInterface>& shm )
648 shm->initIterator( respond_it );
649 shm->initIterator( askcount_it );
652 const std::string getShortInfo()
const;
655 typedef std::unordered_map<std::string, ClientInfo> ClientsMap;
659 IOController::IOStateList::iterator sesscount_it;
661 std::atomic_bool tcpCancelled = {
true };
663 bool tcpBreakIfFailRun = {
false };
664 timeout_t tcpRepeatCreateSocketPause = { 30000 };
669 #endif // _MBSlave_H_ Пассивный таймер
Definition: PassiveTimer.h:92
Definition: ModbusTypes.h:1436
Definition: ModbusTypes.h:1013
Definition: CallbackTimer.h:29
Definition: ModbusTypes.h:1059
Definition: ModbusTypes.h:824
Definition: ModbusTypes.h:1469
std::shared_ptr< BitRegProperty > bitreg
Definition: extensions/ModbusSlave/MBSlave.h:367
ModbusRTU::ModbusData buf[ModbusRTU::MAXLENPACKET/2+1]
Definition: extensions/ModbusSlave/MBSlave.h:596
size_t wnum
Definition: extensions/ModbusSlave/MBSlave.h:365
Definition: ModbusTypes.h:327
ModbusRTU::mbErrCode writeOutputSingleRegister(ModbusRTU::WriteSingleOutputMessage &query, ModbusRTU::WriteSingleOutputRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:295
virtual bool activateObject() override
Активизация объекта (переопределяется для необходимых действий после активизации) ...
Definition: extensions/ModbusSlave/mbslave.cc:1150
ModbusRTU::mbErrCode remoteService(ModbusRTU::RemoteServiceMessage &query, ModbusRTU::RemoteServiceRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:367
ModbusRTU::mbErrCode setDateTime(ModbusRTU::SetDateTimeMessage &query, ModbusRTU::SetDateTimeRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:355
ModbusRTU::mbErrCode forceMultipleCoils(ModbusRTU::ForceCoilsMessage &query, ModbusRTU::ForceCoilsRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:272
std::unordered_set< ModbusRTU::ModbusAddr > vaddr
Definition: extensions/ModbusSlave/MBSlave.h:490
Definition: ModbusTypes.h:784
ModbusRTU::mbErrCode readOutputRegisters(ModbusRTU::ReadOutputMessage &query, ModbusRTU::ReadOutputRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:225
ModbusRTU::ModbusData mbreg
Definition: extensions/ModbusSlave/MBSlave.h:387
Definition: extensions/ModbusSlave/MBSlave.h:626
Definition: MessageType.h:168
Definition: ModbusTypes.h:878
Definition: extensions/ModbusSlave/MBSlave.h:359
ModbusRTU::mbErrCode writeOutputRegisters(ModbusRTU::WriteOutputMessage &query, ModbusRTU::WriteOutputRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:283
Definition: UniSetObject.h:73
Definition: ModbusTypes.h:1555
static std::shared_ptr< MBSlave > init_mbslave(int argc, const char *const *argv, uniset::ObjectId shmID, const std::shared_ptr< SharedMemory > &ic=nullptr, const std::string &prefix="mbs")
Definition: extensions/ModbusSlave/mbslave.cc:1615
Definition: VMonitor.h:116
Definition: ModbusTypes.h:1098
Definition: ModbusTypes.h:1168
IOMap iomap
Definition: extensions/ModbusSlave/MBSlave.h:482
const ObjectId DefaultObjectId
Definition: UniSetTypes.h:69
Definition: ModbusTypes.h:1583
Definition: ModbusTypes.h:968
timeout_t sessTimeout
Definition: extensions/ModbusSlave/MBSlave.h:619
Definition: ModbusTypes.h:1156
ModbusRTU::mbErrCode readCoilStatus(ModbusRTU::ReadCoilMessage &query, ModbusRTU::ReadCoilRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:109
virtual timeout_t setTiming(timeout_t msec) noexcept override
Definition: PassiveTimer.cc:59
Definition: extensions/ModbusSlave/MBSlave.h:383
Definition: ModbusTypes.h:358
Definition: ModbusTypes.h:1223
Definition: MessageType.h:124
VTypes::VType vtype
Definition: extensions/ModbusSlave/MBSlave.h:364
size_t nbyte
Definition: extensions/ModbusSlave/MBSlave.h:366
ModbusRTU::mbErrCode forceSingleCoil(ModbusRTU::ForceSingleCoilMessage &query, ModbusRTU::ForceSingleCoilRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:306
ModbusTCPServer::Sessions sess
Definition: extensions/ModbusSlave/MBSlave.h:621
Definition: ModbusTypes.h:707
virtual bool deactivateObject() override
Деактивиция объекта (переопределяется для необходимых действий при завершении работы) ...
Definition: extensions/ModbusSlave/mbslave.cc:1167
bool force
Definition: extensions/ModbusSlave/MBSlave.h:583
bool invert
Definition: IOBase.h:121
Definition: MessageType.h:211
Definition: ModbusTypes.h:557
Definition: IOController_i.idl:56
Definition: UniSetTypes_i.idl:64
ModbusRTU::ModbusData mbreg
Definition: extensions/ModbusSlave/MBSlave.h:362
Definition: ModbusTypes.h:528
Definition: ModbusTypes.h:1378
Definition: ModbusTypes.h:917
Definition: ModbusTypes.h:1416
ModbusRTU::mbErrCode readInputRegisters(ModbusRTU::ReadInputMessage &query, ModbusRTU::ReadInputRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:179
static bool initItem(IOBase *b, UniXML::iterator &it, const std::shared_ptr< SMInterface > &shm, const std::string &prefix, bool init_prefix_only, std::shared_ptr< DebugStream > dlog=nullptr, std::string myname="", int def_filtersize=0, float def_filterT=0.0, float def_lsparam=0.2, float def_iir_coeff_prev=0.5, float def_iir_coeff_new=0.5)
Definition: IOBase.cc:549
long ObjectId
Definition: UniSetTypes_i.idl:30
Definition: extensions/ModbusSlave/MBSlave.h:332
ModbusRTU::mbErrCode readInputStatus(ModbusRTU::ReadInputStatusMessage &query, ModbusRTU::ReadInputStatusRetMessage &reply)
Definition: Utilities/MBTester/mbslave.cc:135