pdm装置通讯规约

源代码在线查看: pdm.h

软件大小: 5 K
上传用户: wzy1
关键词: pdm 装置 通讯规约
下载地址: 免注册下载 普通下载 VIP

相关代码

				//**************************************************************************************//
				//				   		--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
							

相关资源