UniSet  1.4.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         
00095         ModbusRTUSlaveSlot* rscomm;
00096         ModbusRTU::ModbusAddr addr;         
00098         bool verbose;
00099 #if 0       
00100         typedef std::map<ModbusRTU::mbErrCode,unsigned int> ExchangeErrorMap;
00101         ExchangeErrorMap errmap;    
00102         ModbusRTU::mbErrCode prev;
00103 
00104 
00105         // можно было бы сделать unsigned, но аналоговые датчики у нас имеют 
00106         // тип long. А это число передаётся в графику в виде аналогового датчика
00107         long askCount;  
00110         typedef std::map<int,std::string> FileList;
00111         FileList flist;
00112 #endif 
00113         long replyVal;
00114         long replyVal2;
00115         long replyVal3;
00116     private:
00117         
00118 };
00119 // -------------------------------------------------------------------------
00120 #endif // MBSlave_H_
00121 // -------------------------------------------------------------------------