UniSet  2.2.1
Utilities/MBTester/MBSlave.h
00001 // -------------------------------------------------------------------------
00002 #ifndef MBSlave_H_
00003 #define MBSlave_H_
00004 // -------------------------------------------------------------------------
00005 #include <map>
00006 #include <unordered_set>
00007 #include <string>
00008 #include "modbus/ModbusRTUSlaveSlot.h"
00009 
00010 // -------------------------------------------------------------------------
00012 class MBSlave
00013 {
00014     public:
00015         MBSlave( const std::unordered_set<ModbusRTU::ModbusAddr>& vaddr, const std::string& dev, const std::string& speed, bool use485 = false );
00016         ~MBSlave();
00017 
00018         inline void setVerbose( bool state )
00019         {
00020             verbose = state;
00021         }
00022 
00023         inline void setReply( long val )
00024         {
00025             replyVal = val;
00026         }
00027         inline void setReply2( long val )
00028         {
00029             replyVal2 = val;
00030         }
00031         inline void setReply3( long val )
00032         {
00033             replyVal3 = val;
00034         }
00035 
00036         void execute();    
00039         void setLog( std::shared_ptr<DebugStream> dlog );
00040 
00041     protected:
00042         // действия при завершении работы
00043         void sigterm( int signo );
00044 
00046         ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query,
00047                                              ModbusRTU::ReadCoilRetMessage& reply );
00049         ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query,
00050                                               ModbusRTU::ReadInputStatusRetMessage& reply );
00051 
00053         ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query,
00054                 ModbusRTU::ReadOutputRetMessage& reply );
00055 
00057         ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query,
00058                 ModbusRTU::ReadInputRetMessage& reply );
00059 
00061         ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query,
00062                                               ModbusRTU::ForceSingleCoilRetMessage& reply );
00063 
00065         ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query,
00066                 ModbusRTU::ForceCoilsRetMessage& reply );
00067 
00068 
00070         ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query,
00071                 ModbusRTU::WriteOutputRetMessage& reply );
00072 
00074         ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query,
00075                 ModbusRTU::WriteSingleOutputRetMessage& reply );
00076 
00078         ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query,
00079                                              ModbusRTU::JournalCommandRetMessage& reply );
00080 
00082         ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query,
00083                                           ModbusRTU::SetDateTimeRetMessage& reply );
00084 
00086         ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query,
00087                                             ModbusRTU::RemoteServiceRetMessage& reply );
00088 
00089         ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query,
00090                                            ModbusRTU::FileTransferRetMessage& reply );
00091 
00092         ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query,
00093                                           ModbusRTU::DiagnosticRetMessage& reply );
00094 
00095         ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query,
00096                                        ModbusRTU::MEIMessageRetRDI& reply );
00097 
00099         ModbusRTUSlaveSlot* rscomm;
00100         std::unordered_set<ModbusRTU::ModbusAddr> vaddr;  
00102         bool verbose;
00103 #if 0
00104         typedef std::unordered_map<ModbusRTU::mbErrCode, unsigned int> ExchangeErrorMap;
00105         ExchangeErrorMap errmap;     
00106         ModbusRTU::mbErrCode prev;
00107 
00108 
00109         // можно было бы сделать unsigned, но аналоговые датчики у нас имеют
00110         // тип long. А это число передаётся в графику в виде аналогового датчика
00111         long askCount;    
00114         typedef std::unordered_map<int, std::string> FileList;
00115         FileList flist;
00116 #endif
00117         long replyVal;
00118         long replyVal2;
00119         long replyVal3;
00120     private:
00121 
00122 };
00123 // -------------------------------------------------------------------------
00124 #endif // MBSlave_H_
00125 // -------------------------------------------------------------------------