UniSet  2.6.0
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<uniset::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();    
00038         void setLog( std::shared_ptr<DebugStream> dlog );
00039 
00040     protected:
00041         // действия при завершении работы
00042         void sigterm( int signo );
00043 
00045         uniset::ModbusRTU::mbErrCode readCoilStatus( uniset::ModbusRTU::ReadCoilMessage& query,
00046                                                      uniset::ModbusRTU::ReadCoilRetMessage& reply );
00048         uniset::ModbusRTU::mbErrCode readInputStatus( uniset::ModbusRTU::ReadInputStatusMessage& query,
00049                                                       uniset::ModbusRTU::ReadInputStatusRetMessage& reply );
00050 
00052         uniset::ModbusRTU::mbErrCode readOutputRegisters( uniset::ModbusRTU::ReadOutputMessage& query,
00053                                                           uniset::ModbusRTU::ReadOutputRetMessage& reply );
00054 
00056         uniset::ModbusRTU::mbErrCode readInputRegisters( uniset::ModbusRTU::ReadInputMessage& query,
00057                                                          uniset::ModbusRTU::ReadInputRetMessage& reply );
00058 
00060         uniset::ModbusRTU::mbErrCode forceSingleCoil( uniset::ModbusRTU::ForceSingleCoilMessage& query,
00061                                                       uniset::ModbusRTU::ForceSingleCoilRetMessage& reply );
00062 
00064         uniset::ModbusRTU::mbErrCode forceMultipleCoils( uniset::ModbusRTU::ForceCoilsMessage& query,
00065                                                          uniset::ModbusRTU::ForceCoilsRetMessage& reply );
00066 
00067 
00069         uniset::ModbusRTU::mbErrCode writeOutputRegisters( uniset::ModbusRTU::WriteOutputMessage& query,
00070                 uniset::ModbusRTU::WriteOutputRetMessage& reply );
00071 
00073         uniset::ModbusRTU::mbErrCode writeOutputSingleRegister( uniset::ModbusRTU::WriteSingleOutputMessage& query,
00074                 uniset::ModbusRTU::WriteSingleOutputRetMessage& reply );
00075 
00077         uniset::ModbusRTU::mbErrCode journalCommand( uniset::ModbusRTU::JournalCommandMessage& query,
00078                                                      uniset::ModbusRTU::JournalCommandRetMessage& reply );
00079 
00081         uniset::ModbusRTU::mbErrCode setDateTime( uniset::ModbusRTU::SetDateTimeMessage& query,
00082                                                   uniset::ModbusRTU::SetDateTimeRetMessage& reply );
00083 
00085         uniset::ModbusRTU::mbErrCode remoteService( uniset::ModbusRTU::RemoteServiceMessage& query,
00086                                                     uniset::ModbusRTU::RemoteServiceRetMessage& reply );
00087 
00088         uniset::ModbusRTU::mbErrCode fileTransfer( uniset::ModbusRTU::FileTransferMessage& query,
00089                                                    uniset::ModbusRTU::FileTransferRetMessage& reply );
00090 
00091         uniset::ModbusRTU::mbErrCode diagnostics( uniset::ModbusRTU::DiagnosticMessage& query,
00092                                                   uniset::ModbusRTU::DiagnosticRetMessage& reply );
00093 
00094         uniset::ModbusRTU::mbErrCode read4314( uniset::ModbusRTU::MEIMessageRDI& query,
00095                                                uniset::ModbusRTU::MEIMessageRetRDI& reply );
00096 
00098         uniset::ModbusRTUSlaveSlot* rscomm;
00099         std::unordered_set<uniset::ModbusRTU::ModbusAddr> vaddr;  
00101         bool verbose;
00102 #if 0
00103         typedef std::unordered_map<uniset::ModbusRTU::mbErrCode, unsigned int> ExchangeErrorMap;
00104         ExchangeErrorMap errmap;     
00105         uniset::ModbusRTU::mbErrCode prev;
00106 
00107 
00108         // можно было бы сделать unsigned, но аналоговые датчики у нас имеют
00109         // тип long. А это число передаётся в графику в виде аналогового датчика
00110         long askCount;    
00113         typedef std::unordered_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 // -------------------------------------------------------------------------