78 lines
1.6 KiB
C++

#pragma once
#include "Command.h"
#include <vector>
/*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<unsigned char> 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;
};