302 lines
6.9 KiB
C
302 lines
6.9 KiB
C
|
|
#pragma once
|
|
#pragma pack (1)
|
|
|
|
//自定义消息
|
|
#define WM_THREAD_RECV WM_USER + 1000
|
|
#define WM_SERTHREAD_RECV WM_USER + 2000
|
|
|
|
#define WP_WPARA_RECV 1001
|
|
#define WP_WPARA_CLOSE 1002 //socket关闭
|
|
#define WP_WPARA_THREAD_QUIT 1005 //线程关闭
|
|
|
|
#define WP_WPARA_SERVER_RECV 2001
|
|
#define WP_WPARA_SERVER_CLOSE 2002 //socket关闭
|
|
#define WP_WPARA_SERTHREAD_QUIT 2005 //线程关闭
|
|
|
|
//寄存器总个数
|
|
#define DUSTDEV_REGNUM 14 //采集寄存器的总个数
|
|
|
|
//采集数据
|
|
typedef struct __dustDevPara{
|
|
double fDCVolt;
|
|
double fDCCurr;
|
|
double fPSVolt;
|
|
double fPSCurr;
|
|
WORD wPsFreq;
|
|
double fEnvTempr;
|
|
double fEnvHumity;
|
|
double fDcIgbtTemp;
|
|
double fPulseIgbtTemp;
|
|
__dustDevPara(){
|
|
fDCVolt =0.0;
|
|
fDCCurr =0.0;
|
|
fPSVolt =0.0;
|
|
fPSCurr =0.0;
|
|
wPsFreq =0;
|
|
fEnvTempr =0.0;
|
|
fEnvHumity =0.0;
|
|
fDcIgbtTemp =0.0;
|
|
fPulseIgbtTemp =0.0;
|
|
}
|
|
}ST_DUSTDEV_WOORKPARA;
|
|
|
|
//Modbus功能码枚举值
|
|
typedef enum __enumFuncCode{
|
|
EN_MODBUS_READ_SINGLECOIL =0x01, //读线圈
|
|
EN_MODBUS_READ_PERSISREG =0x03, //读寄存器
|
|
EN_MODBUS_WRITE_SINGLECOIL =0x05, //写单个线圈
|
|
EN_MODBUS_WRITE_SINGLEREG =0x06, //写单个寄存器
|
|
EN_MODBUS_WRITE_MULTIREG =0x10,
|
|
|
|
EN_MODBUS_READ_SINGLECOIL_RSPERR =0x81,
|
|
EN_MODBUS_READ_PERSISREG_RSPERR =0x83,
|
|
EN_MODBUS_WRITE_SINGLECOIL_RSPERR =0x85,
|
|
EN_MODBUS_WRITE_SINGLEREG_RSPERR =0x86,
|
|
EN_MODBUS_WRITE_MULTIREG_RSPERR =0x90
|
|
}EN_NUM_MODBUS_FUNCCODE;
|
|
|
|
//寄存器枚举值(*10表示寄存器的值为实际值得倍数)
|
|
typedef enum __enumRegAddr{
|
|
EN_REGADDR_DCVOLTH =0x0000, //直流电压高
|
|
EN_REGADDR_DCVOLTL =0x0001, //直流电压低
|
|
EN_REGADDR_DCCURR =0x0002, //直流电流 *10.0
|
|
EN_REGADDR_PULSEVOLTH =0x0003, //脉冲电压高
|
|
EN_REGADDR_PULSEVOLTL =0x0004, //脉冲电压低
|
|
EN_REGADDR_PULSECURR =0x0005, //脉冲电流 *10.0
|
|
EN_REGADDR_PULSEFREQ =0x0006, //脉冲频率 *10.0
|
|
EN_REGADDR_ENVTEMP =0x0007, //环境温度 *10.0
|
|
EN_REGADDR_ENVHUMITY =0x0008, //环境湿度 *10.0
|
|
EN_REGADDR_SUPPLYVOLT =0x0009, //市电电压 *10.0
|
|
EN_REGADDR_SUPPLYCURR =0x000A, //市电电流 *10.0
|
|
EN_REGADDR_ACTODCVOLT =0x000B, //直流部分交流整流后的直流电压 *10.0
|
|
EN_REGADDR_DCIGBTTEMP =0x000C, //直流部分IGBT工作温度 *10.0
|
|
EN_REGADDR_PULSEIGBTTEMP=0x000D //脉冲部分IGBT工作温度 *10.0
|
|
}EN_NUM_REGADDR;
|
|
|
|
//MBAP报文头
|
|
typedef struct __modbusMbapHeader{
|
|
WORD wTransFlag;
|
|
WORD wProtocolFlag;
|
|
WORD wLen;
|
|
BYTE bUnitFlag;
|
|
__modbusMbapHeader(){
|
|
wTransFlag =0;
|
|
wProtocolFlag =0;
|
|
wLen =0;
|
|
bUnitFlag =0;
|
|
}
|
|
}ST_MODBUS_MBAP_HEADER;
|
|
|
|
//发送请求读单个线圈/多个寄存器报文---Cient端
|
|
typedef struct __clientRqtReadFrame{
|
|
ST_MODBUS_MBAP_HEADER stMbapHeader;
|
|
BYTE bFuncConde;
|
|
WORD wStartAddr;
|
|
WORD wRegNum;
|
|
__clientRqtReadFrame()
|
|
{
|
|
bFuncConde =0x0;
|
|
wStartAddr =0;
|
|
wRegNum =0;
|
|
}
|
|
}ST_MODBUS_CLIENT_RQTREAD_FRAME;
|
|
|
|
//发送写单个线圈报文---Cient端
|
|
typedef struct __clientRqtWrtCoilFrame{
|
|
ST_MODBUS_MBAP_HEADER stMbapHeader;
|
|
BYTE bFuncConde;
|
|
WORD wAddr;
|
|
WORD wOutVal;
|
|
__clientRqtWrtCoilFrame()
|
|
{
|
|
bFuncConde =0x05;
|
|
wAddr =0;
|
|
wOutVal =0;
|
|
}
|
|
}ST_MODBUS_CLIENT_RQTWRTCOIL_FRAME;
|
|
|
|
//发送写单个寄存器报文
|
|
typedef struct __serverRqtWrtRegFrame{
|
|
ST_MODBUS_MBAP_HEADER stMbapHeader;
|
|
BYTE bFuncConde;
|
|
WORD wAddr;
|
|
WORD wOutVal;
|
|
__serverRqtWrtRegFrame()
|
|
{
|
|
bFuncConde =0x06;
|
|
wAddr =0;
|
|
wOutVal =0;
|
|
}
|
|
}ST_MODBUS_SERVER_RQTWRTREG_FRAME;
|
|
|
|
//发送写多个寄存器报文---Cient端
|
|
typedef struct __clientRqtWrtMultiRegFrame{
|
|
ST_MODBUS_MBAP_HEADER stMbapHeader;
|
|
BYTE bFuncConde;
|
|
WORD wStartAddr;
|
|
WORD wRegNum;
|
|
BYTE bLen;
|
|
BYTE bRegVal[255];
|
|
__clientRqtWrtMultiRegFrame()
|
|
{
|
|
bFuncConde =0x10;
|
|
wStartAddr =0;
|
|
wRegNum =0;
|
|
bLen =0;
|
|
memset(bRegVal,0,255);
|
|
}
|
|
}ST_MODBUS_CLIENT_RQTWRTMULTIREG_FRAME;
|
|
|
|
//响应读单个线圈/多个保持寄存器报文--Server 端
|
|
typedef struct __serveRspReadFrame{
|
|
ST_MODBUS_MBAP_HEADER stMbapHeader;
|
|
BYTE bFuncConde;
|
|
BYTE bLen;
|
|
BYTE bRtnData[255];
|
|
}ST_MODBUS_SERVER_RSPREAD_FRAME;
|
|
|
|
//响应写单个线圈/多个保持寄存器报文--Server 端
|
|
typedef struct __serveRspWrtFrame{
|
|
ST_MODBUS_MBAP_HEADER stMbapHeader;
|
|
BYTE bFuncConde;
|
|
WORD wStartAddr;
|
|
WORD wRegNum;
|
|
}ST_MODBUS_SERVER_RSPWRT_FRAME;
|
|
|
|
//错误响应帧
|
|
typedef struct __serverRspErrFrame{
|
|
ST_MODBUS_MBAP_HEADER stMbapHeader;
|
|
BYTE bFuncConde;
|
|
BYTE bErrCode;
|
|
}ST_MODBUS_SERVER_RSPERR_FRAME;
|
|
|
|
////===========================================================================================================
|
|
//------------以下定义与PC通信相关
|
|
//命令码枚举
|
|
typedef enum __enumpcCommFuncCode{
|
|
EN_PCCOMM_TRANSDATA =0x51, //HMI--->PC
|
|
EN_PCCOMM_WORKPARASET =0x52, //PC---->HMI
|
|
EN_PCCOMM_SAMPLEPARASET =0x53, //PC---->HMI
|
|
EN_PCCOMM_DEVSTARTSTOP =0x54, //PC---->HMI
|
|
EN_PCCOMM_HISTORYDATARQT =0x55, //PC---->HMI
|
|
|
|
EN_PCCOMM_TRANSDATA_RSP =0x61, //PC---->HMI
|
|
EN_PCCOMM_WORKPARASET_RSP =0x62, //HMI--->PC
|
|
EN_PCCOMM_SAMPLEPARASET_RSP =0x63, //HMI--->PC
|
|
EN_PCCOMM_DEVSTARTSTOP_RSP =0x64 //HMI--->PC
|
|
|
|
}EN_NUM_PCCOMM_FUNCCODE;
|
|
|
|
|
|
//采集数据结构体
|
|
typedef struct __devSampleData{
|
|
int iDevID;
|
|
DWORD dwIPAddr;
|
|
WORD wPulseFreq;
|
|
float fDcVolt;
|
|
float fDcCurr;
|
|
float fPulseVolt;
|
|
float fPulseCurr;
|
|
float fEnvTemprature;
|
|
float fEnvHumidity;
|
|
float fSupplyVolt;
|
|
float fSupplyCurr;
|
|
float fRectiferDC;
|
|
float fDcIgbtTemp;
|
|
float fPsIgbtTemp;
|
|
BYTE bSampleTime[6];
|
|
__devSampleData(){
|
|
iDevID =0;
|
|
dwIPAddr =0;
|
|
wPulseFreq =0;
|
|
fDcVolt =0;
|
|
fDcCurr =0;
|
|
fPulseVolt =0;
|
|
fPulseCurr =0;
|
|
fEnvHumidity=0;
|
|
fEnvTemprature =0;
|
|
fSupplyVolt =0;
|
|
fSupplyCurr =0;
|
|
fRectiferDC =0;
|
|
fDcIgbtTemp =0;
|
|
fPsIgbtTemp =0;
|
|
memset(bSampleTime,0,6);
|
|
}
|
|
}ST_DEVSAMPLE_DATA;
|
|
|
|
//工作参数
|
|
typedef struct __devWorkParaFromPC{
|
|
int iDevID;
|
|
DWORD dwIPAddr;
|
|
WORD wPulseFreq;
|
|
float fDcVolt;
|
|
float fDcCurr;
|
|
float fPulseVolt;
|
|
float fPulseCurr;
|
|
char szDevName[32];
|
|
char szDevIPAddr[32];
|
|
__devWorkParaFromPC(){
|
|
iDevID =0;
|
|
dwIPAddr =0;
|
|
wPulseFreq =0;
|
|
fDcVolt =0;
|
|
fDcCurr =0;
|
|
fPulseVolt =0;
|
|
fPulseCurr =0;
|
|
szDevName[0] ='\0';
|
|
szDevIPAddr[0] ='\0';
|
|
}
|
|
__devWorkParaFromPC& operator=(const __devWorkParaFromPC &rhs)
|
|
{
|
|
this->iDevID = rhs.iDevID;
|
|
this->dwIPAddr = rhs.dwIPAddr;
|
|
this->wPulseFreq= rhs.wPulseFreq;
|
|
this->fDcVolt = rhs.fDcVolt;
|
|
this->fDcCurr = rhs.fDcCurr;
|
|
this->fPulseVolt= rhs.fPulseVolt;
|
|
this->fPulseCurr= rhs.fPulseCurr;
|
|
strcpy(this->szDevName,rhs.szDevName);
|
|
strcpy(this->szDevIPAddr,rhs.szDevIPAddr);
|
|
|
|
return (*this);
|
|
}
|
|
}ST_DEVWORKPARA_FROMPC,*PST_DEVWORKPARA_FROMPC;
|
|
|
|
//采集参数
|
|
typedef struct __devSampleParaFromPC{
|
|
WORD wSampleIntver;
|
|
BYTE bIsSavePcOnline;
|
|
__devSampleParaFromPC(){
|
|
wSampleIntver =0;
|
|
bIsSavePcOnline =0;
|
|
}
|
|
}ST_SAMPLEPARA_FROMPC;
|
|
|
|
//设备启停
|
|
typedef struct __devStartStopFromPC{
|
|
int iDevID;
|
|
DWORD dwIPAddr;
|
|
BYTE bIsStart;
|
|
__devStartStopFromPC(){
|
|
iDevID =0;
|
|
dwIPAddr =0;
|
|
bIsStart =0;
|
|
}
|
|
}ST_DEVSTARTSTOP_FROMPC;
|
|
|
|
//历史数据请求
|
|
typedef struct __historyRqtFromPC{
|
|
int iDevID;
|
|
DWORD dwIPAddr;
|
|
BYTE bStartTime[6];
|
|
BYTE bStopTime[6];
|
|
__historyRqtFromPC(){
|
|
iDevID =0;
|
|
dwIPAddr =0;
|
|
memset(bStartTime,0,6);
|
|
memset(bStopTime,0,6);
|
|
}
|
|
}ST_HISTORYRQT_FROMPC;
|
|
|
|
#pragma pack () |