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