#pragma once #include "Command.h" #include /*typedef union { float fValue; unsigned char data[4]; }FLOATDATA;*/ class Modbus:public Command { public: Modbus(unsigned char addr); virtual ~Modbus(void); virtual int GetRequestSequence(unsigned char* bseq){return 0;} virtual bool Verity(unsigned char* rseq,int dlength){return false;} public: unsigned char m_addr; protected: unsigned char m_funcCode; unsigned char m_crcLo; unsigned char m_crcHi; }; class ReadModbus:public Modbus { public: ReadModbus(unsigned char addr,unsigned short startReg,unsigned short regCount); virtual ~ReadModbus(); int GetRequestSequence(unsigned char* bseq); bool Verify(unsigned char* rseq,int dlength); int ConstReturnSize() { return 5 + m_regCount * 2; } protected: unsigned short m_startReg; unsigned short m_regCount; }; class WriteModbus:public Modbus { public: WriteModbus(unsigned char addr,unsigned short startReg); virtual ~WriteModbus(); int GetRequestSequence(unsigned char* bseq); bool Verify(unsigned char* rseq,int dlength); void AddShort(short value); void AddInt(int value); void AddFloat(float value); protected: unsigned short m_startReg; unsigned short m_regCount; unsigned char m_byteCount; std::vector m_valueBytes; }; class ReadCoilModbus :public Modbus { public: ReadCoilModbus(unsigned char addr, unsigned short startReg, unsigned short regCount); ~ReadCoilModbus(); int GetRequestSequence(unsigned char* bseq); bool Verify(unsigned char* rseq, int dlength); int ConstReturnSize() { return 5 + m_regCount * 2; } protected: unsigned short m_startReg; unsigned short m_regCount; };