80 lines
1.8 KiB
C++
80 lines
1.8 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);
|
|
ReadModbus(unsigned char func, 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);
|
|
void AddUshort(unsigned short 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;
|
|
|
|
|
|
}; |