ModbusMaster/RTUStorage.h
00001
00002 #ifndef _RTUSTORAGE_H_
00003 #define _RTUSTORAGE_H_
00004
00005 #include <ostream>
00006 #include <string>
00007 #include "modbus/ModbusTypes.h"
00008 #include "UniSetTypes.h"
00009
00010 class ModbusRTUMaster;
00011
00012 class RTUStorage
00013 {
00014 public:
00015 RTUStorage( ModbusRTU::ModbusAddr addr );
00016 ~RTUStorage();
00017
00018 void poll( ModbusRTUMaster* mb )
00019 throw(ModbusRTU::mbException);
00020
00021 inline ModbusRTU::ModbusAddr getAddress(){ return addr; }
00022 inline bool ping(){ return pingOK; }
00023
00024 inline void setPollADC( bool set ){ pollADC = set; }
00025 inline void setPollDI( bool set ){ pollDI = set; }
00026 inline void setPollDIO( bool set ){ pollDIO = set; }
00027 inline void setPollUNIO( bool set ){ pollUNIO = set; }
00028
00029 enum RTUJack
00030 {
00031 nUnknown,
00032 nJ1,
00033 nJ2,
00034 nJ5,
00035 nX1,
00036 nX2,
00037 nX4,
00038 nX5
00039 };
00040
00041 static RTUJack s2j( const std::string jack );
00042 static std::string j2s( RTUJack j );
00043
00044 long getInt( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t );
00045 float getFloat( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t );
00046 bool getState( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t );
00047
00048 static ModbusRTU::ModbusData getRegister( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t );
00049
00050 static ModbusRTU::SlaveFunctionCode getFunction( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t );
00051
00052
00053 void print();
00054
00055 friend std::ostream& operator<<(std::ostream& os, RTUStorage& m );
00056 friend std::ostream& operator<<(std::ostream& os, RTUStorage* m );
00057
00058 protected:
00059 ModbusRTU::ModbusAddr addr;
00060 bool pingOK;
00061
00062 bool pollADC;
00063 bool pollDI;
00064 bool pollDIO;
00065 bool pollUNIO;
00066
00067
00068 float adc[8];
00069 bool di[16];
00070 bool dio_do[16];
00071 bool dio_di[16];
00072 float dio_ai[16];
00073 float dio_ao[16];
00074 bool unio_do[48];
00075 bool unio_di[48];
00076 float unio_ai[24];
00077 float unio_ao[24];
00078 };
00079
00080 #endif // _RTUSTORAGE_H_
00081