pdm装置通讯规约
源代码在线查看: pdm.h
//**************************************************************************************//
// --PDM规约--- //
//**************************************************************************************//
/////////////////////////////////////////////////////////////////////////////////////////
#ifndef _PDM_PTL_H
#define _PDM_PTL_H
/////////////////////////////////////////////////////////////////////////////////////////
#include "slBSP.h"
#include "..\..\Channel\ChPtl.h"
/////////////////////////////////////////////////////////////////////////////////////////
//PDM800常量定义
#define PDM800_YCSSZ_STARTADDR 0x017A /*遥测瞬时值起始地址*/ #define PDM800_YCPJZ_STARTADDR 0x01A1 /*遥测平均值起始地址*/ #define PDM800_YCZDZ_STARTADDR 0x01C8 /*遥测最大值起始地址*/ #define PDM800_YCZXZ_STARTADDR 0x01EF /*遥测最小值起始地址*/ #define PDM800_YXO1_STARTADDR 0x023E /*继电器1状态起始地址*/ #define PDM800_YXO2_STARTADDR 0x0242 /*继电器2状态起始地址*/ #define PDM800_DDMOD2_STARTADDR 0x012 /*电度起始地址*/ //PDM801常量定义
#define PDM801_YCSSZ_STARTADDR 0x0100 /*遥测瞬时值起始地址*/ #define PDM801_YXI_STARTADDR 0x0000 /*状态起始地址*/ #define PDM801_YXO_STARTADDR 0x0000 /*继电器状态起始地址*/ #define PDM801_DDMOD1_STARTADDR 0x010A /*电度起始地址*/ #define PDM801_DDMOD2_STARTADDR 0x0105 /*电度起始地址*/ #define PDM801_YK_STARTADDR 0x0000 /*遥控起始地址*/ //PDM803常量定义
#define PDM803_YCSSZ_STARTADDR 0x00FD /*遥测瞬时值起始地址*/ #define PDM803_YXI_STARTADDR 0x0000 /*状态起始地址*/ #define PDM803_YXO_STARTADDR 0x0000 /*继电器状态地址*/ #define PDM803_DDMOD0_STARTADDR 0x00F8 /*电度起始地址*/ #define PDM803_DDMOD1_STARTADDR 0x011C /*电度起始地址*/ #define PDM803_YK_STARTADDR 0x000 /*遥控起始地址*/ //PDM810常量定义
#define PDM810_YCSSZ_STARTADDR 0x00FD /*遥测瞬时值起始地址*/ #define PDM810_YCSSZ_ENDADDR 0x0119 /*遥测瞬时值结束地址*/ #define PDM810_YXI_STARTADDR 0x0000 /*状态起始地址*/ #define PDM810_YXO_STARTADDR 0x0000 /*继电器状态地址*/ #define PDM810_DDMOD0_STARTADDR 0x00F8 /*电度起始地址*/ #define PDM810_DDMOD1_STARTADDR 0x011C /*电度起始地址*/ #define PDM810_YK_STARTADDR 0x0000 /*遥控起始地址*/
//PDM820常量定义
#define PDM820_YCSSZ_STARTADDR 0x00FD /*遥测瞬时值起始地址*/ #define PDM820_YXI_STARTADDR 0x0000 /*状态起始地址*/ #define PDM820_YXO_STARTADDR 0x0000 /*继电器状态地址*/ #define PDM820_DDMOD0_STARTADDR 0x00F8 /*电度起始地址*/ #define PDM820_DDMOD1_STARTADDR 0x011C /*电度起始地址*/ #define PDM820_YK_STARTADDR 0x0000 /*遥控起始地址*/ #define MODBUS_READ_REGISTER_FUNCODE 03 #define MODBUS_READ_DI_FUNCODE 02 #define MODBUS_READ_DO_FUNCODE 01 #define MODBUS_WRITE_DO_FUNCODE 05 #define MODBUS_WRITE_SREGISTER_FUNCODE 06 #define MODBUS_WRITE_MREGISTER_FUNCODE 10 #define MODBUS_DATA_START 03 /////////////////////////////////////////////////////////////////////////////////////////
//PDM私用参数结构定义
typedef struct PDM_DATA_PARA
{
WORD wYcStartAddr;
WORD wYxIStartAddr;
WORD wYxOStartAddr;
WORD wDdStartAddr;
WORD wYkStartAddr;
WORD wYtStartAddr;
WORD wYcNum;
WORD wYcMod;
WORD wYxINum; /*开关量输入状态*/
WORD wYxONum; /*开关量输出状态*/
WORD wYxOGoupNum;/*开关量输出状态组数*/
WORD wYxMod;
WORD wDdNum;
WORD wDdMod;
WORD wYkNum;
WORD wYtNum;
};
/////////////////////////////////////////////////////////////////////////////////////////
class CPdm:public CChPtl
{
public:
CPdm(){};
~CPdm(){};
private:
PDM_DATA_PARA m_PDMPara[CH_MAX_IED_NUM];
BYTE m_byStartNo; //起始表号
BYTE m_byEndNo; //结束表号
BYTE m_byAskMeterNo; //查询命令记录表号
BYTE m_byFunCode; //功能码
BYTE m_byRecvMiterAddr; //接收地址
WORD m_wAskStep; //查询步骤
BYTE m_byCtrlCode; //控制码
BYTE m_byDataLen; //数据长度
INT m_nDdVal;
INT m_nUnDataCnt;
INT m_nUnDataLen;
TASK* m_pTask;
CIED* m_pFrameIED;
CIED* m_pUnFrameIED;
INT m_nFrameStep;
public:// 重载函数
void InitPtl();
INT Frame(BYTE* pSendBuf,INT nLen);
void UnFrame(BYTE* pRecvBuf,INT nLen);
void OnTimer(void);
public://私有函数
BYTE ValueToBCD(BYTE byVal);
BYTE BCDToValue(BYTE byBCD);
void initIEDPara();
void loadIEDPara(CIED* pIED,WORD wID);
void load800IEDPara(CIED* pIED,WORD wID);
void load801IEDPara(CIED* pIED,WORD wID);
void load803IEDPara(CIED* pIED,WORD wID);
void load810IEDPara(CIED* pIED,WORD wID);
void load820IEDPara(CIED* pIED,WORD wID);
void UnFrameYxO1(BYTE* pRecvBuf,INT nLen);
void UnFrameYxO2(BYTE* pRecvBuf,INT nLen);
void UnFrameYxI(BYTE* pRecvBuf,INT nLen);
void UnFrameYc(BYTE* pRecvBuf,INT nLen);
void UnFrameYk(BYTE* pRecvBuf,INT nLen);
INT FrameAskData(BYTE* pSendBuf);
WORD FrameAskYc(WORD wID,BYTE* pSendBuf);
WORD FrameAskYxI(WORD wID,BYTE* pSendBuf);
WORD FrameAskYxO1(WORD wID,BYTE* pSendBuf);
WORD FrameAskYxO2(WORD wID,BYTE* pSendBuf);
WORD FrameAskDd(WORD wID,BYTE* pSendBuf);
WORD AddCRC(BYTE* pbyBuf,WORD wLen);
BOOL CheckCRC(BYTE* pbyBuf,WORD wLen);
};
/////////////////////////////////////////////////////////////////////////////////////////
#endif