UniSet
1.4.0
|
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 // -------------------------------------------------------------------------