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