|
UniSet
1.7.0
|
00001 // ------------------------------------------------------------------------- 00002 #ifndef ModbusServer_H_ 00003 #define ModbusServer_H_ 00004 // ------------------------------------------------------------------------- 00005 #include <string> 00006 00007 #include "Debug.h" 00008 #include "Mutex.h" 00009 #include "Configuration.h" 00010 #include "PassiveTimer.h" 00011 #include "ModbusTypes.h" 00012 // ------------------------------------------------------------------------- 00014 class ModbusServer 00015 { 00016 public: 00017 ModbusServer(); 00018 virtual ~ModbusServer(); 00019 00020 void initLog( UniSetTypes::Configuration* conf, const std::string name, const std::string logfile="" ); 00021 void setLog( DebugStream& dlog ); 00022 00023 00029 virtual ModbusRTU::mbErrCode receive( ModbusRTU::ModbusAddr addr, timeout_t msecTimeout )=0; 00030 00031 00035 timeout_t setAfterSendPause( timeout_t msec ); 00036 00040 timeout_t setReplyTimeout( timeout_t msec ); 00041 00043 void setRecvTimeout( timeout_t msec ); 00044 00046 inline void setSleepPause( timeout_t usec ){ sleepPause_usec = usec; } 00047 00048 inline void setCRCNoCheckit( bool set ){ crcNoCheckit = set; } 00049 inline bool isCRCNoCheckit(){ return crcNoCheckit; } 00050 00051 inline void setBroadcastMode( bool set ){ onBroadcast = set; } 00052 inline bool getBroadcastMode(){ return onBroadcast; } 00053 00054 inline void setCleanBeforeSend( bool set ){ cleanBeforeSend = set; } 00055 inline bool getCleanBeforeSend(){ return cleanBeforeSend; } 00056 00060 static ModbusRTU::mbErrCode replySetDateTime( ModbusRTU::SetDateTimeMessage& query, 00061 ModbusRTU::SetDateTimeRetMessage& reply, 00062 DebugStream* dlog=0 ); 00063 00064 00070 static ModbusRTU::mbErrCode replyFileTransfer( const std::string fname, 00071 ModbusRTU::FileTransferMessage& query, 00072 ModbusRTU::FileTransferRetMessage& reply, 00073 DebugStream* dlog=0 ); 00074 00075 virtual void cleanupChannel(){} 00076 virtual void terminate(){} 00077 00078 protected: 00079 00085 virtual ModbusRTU::mbErrCode readCoilStatus( ModbusRTU::ReadCoilMessage& query, 00086 ModbusRTU::ReadCoilRetMessage& reply )=0; 00092 virtual ModbusRTU::mbErrCode readInputStatus( ModbusRTU::ReadInputStatusMessage& query, 00093 ModbusRTU::ReadInputStatusRetMessage& reply )=0; 00094 00100 virtual ModbusRTU::mbErrCode readOutputRegisters( ModbusRTU::ReadOutputMessage& query, 00101 ModbusRTU::ReadOutputRetMessage& reply )=0; 00102 00108 virtual ModbusRTU::mbErrCode readInputRegisters( ModbusRTU::ReadInputMessage& query, 00109 ModbusRTU::ReadInputRetMessage& reply )=0; 00110 00116 virtual ModbusRTU::mbErrCode forceSingleCoil( ModbusRTU::ForceSingleCoilMessage& query, 00117 ModbusRTU::ForceSingleCoilRetMessage& reply )=0; 00118 00119 00125 virtual ModbusRTU::mbErrCode writeOutputSingleRegister( ModbusRTU::WriteSingleOutputMessage& query, 00126 ModbusRTU::WriteSingleOutputRetMessage& reply )=0; 00127 00133 virtual ModbusRTU::mbErrCode forceMultipleCoils( ModbusRTU::ForceCoilsMessage& query, 00134 ModbusRTU::ForceCoilsRetMessage& reply )=0; 00135 00141 virtual ModbusRTU::mbErrCode writeOutputRegisters( ModbusRTU::WriteOutputMessage& query, 00142 ModbusRTU::WriteOutputRetMessage& reply )=0; 00143 00144 00150 virtual ModbusRTU::mbErrCode diagnostics( ModbusRTU::DiagnosticMessage& query, 00151 ModbusRTU::DiagnosticRetMessage& reply )=0; 00152 00158 virtual ModbusRTU::mbErrCode read4314( ModbusRTU::MEIMessageRDI& query, 00159 ModbusRTU::MEIMessageRetRDI& reply )=0; 00160 00161 00167 virtual ModbusRTU::mbErrCode journalCommand( ModbusRTU::JournalCommandMessage& query, 00168 ModbusRTU::JournalCommandRetMessage& reply )=0; 00169 00170 00176 virtual ModbusRTU::mbErrCode setDateTime( ModbusRTU::SetDateTimeMessage& query, 00177 ModbusRTU::SetDateTimeRetMessage& reply )=0; 00178 00179 00185 virtual ModbusRTU::mbErrCode remoteService( ModbusRTU::RemoteServiceMessage& query, 00186 ModbusRTU::RemoteServiceRetMessage& reply )=0; 00187 00188 00194 virtual ModbusRTU::mbErrCode fileTransfer( ModbusRTU::FileTransferMessage& query, 00195 ModbusRTU::FileTransferRetMessage& reply )=0; 00196 00203 virtual int getNextData( unsigned char* buf, int len )=0; 00204 00205 virtual ModbusRTU::mbErrCode sendData( unsigned char* buf, int len )=0; 00206 00207 00209 virtual void setChannelTimeout( timeout_t msec )=0; 00210 00212 virtual ModbusRTU::mbErrCode send( ModbusRTU::ModbusMessage& buf ); 00213 00214 virtual ModbusRTU::mbErrCode pre_send_request( ModbusRTU::ModbusMessage& request ){ return ModbusRTU::erNoError; } 00215 virtual ModbusRTU::mbErrCode post_send_request( ModbusRTU::ModbusMessage& request ){ return ModbusRTU::erNoError; } 00216 00217 // default processing 00218 virtual ModbusRTU::mbErrCode processing( ModbusRTU::ModbusMessage& buf ); 00219 00221 ModbusRTU::mbErrCode recv( ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusMessage& buf, timeout_t timeout ); 00222 ModbusRTU::mbErrCode recv_pdu( ModbusRTU::ModbusMessage& rbuf, timeout_t timeout ); 00223 00224 UniSetTypes::uniset_mutex recvMutex; 00225 timeout_t recvTimeOut_ms; 00226 timeout_t replyTimeout_ms; 00227 timeout_t aftersend_msec; 00228 timeout_t sleepPause_usec; 00229 bool onBroadcast; 00230 bool crcNoCheckit; 00231 bool cleanBeforeSend; 00232 00233 void printProcessingTime(); 00234 PassiveTimer tmProcessing; 00235 00236 DebugStream dlog; 00237 00238 private: 00239 00240 }; 00241 // ------------------------------------------------------------------------- 00242 #endif // ModbusServer_H_ 00243 // -------------------------------------------------------------------------
1.7.6.1