📄 dlt645pri.h
字号:
/*------------------------------------------------------------------*/
/*模块名称:DL/T645.h */
/*模块功能:DL/T 645-1997 多功能电能表通讯规约 */
/*编写日期:2006年11月 */
/*编写者: zhangxiaodan */
/*------------------------------------------------------------------*/
#ifndef _PRI645_H
#define _PRI645_H
#define BIT0 0x0001
#define BIT1 0x0002
#define BIT2 0x0004
#define BIT3 0x0008
#define BIT4 0x0010
#define BIT5 0x0020
#define BIT6 0x0040
#define BIT7 0x0080
#define BIT8 0x0100
#define BIT9 0x0200
#define BIT10 0x0400
#define BIT11 0x0800
#define BIT12 0x1000
#define BIT13 0x2000
#define BIT14 0x4000
#define BIT15 0x8000
#define ALLDATA 0x0001 //全数据标志,定时器提供
#define KWHDATA 0x0002 //电度标志,定时器提供
#define TIMERCLOCK 0x0004 //对钟标志,定时器提供
#define PosiKWH 0x9010
#define NegaKWH 0x9020
#define PosiKVAR 0x9110
#define NegaKVAR 0x9120
#define RTUData 0xb621
#define ALLRTUData 0xb660
#define PosiKWHDB 0x901F
#define NegaKWHDB 0x902F
#define PosiKVARDB 0x911F
#define NegaKVARDB 0x912F
#define READCOM 0x1 //读数据
#define READNEXTCOM 0x2 //读后续数据
#define RE_READCOM 0x3 //重读数据
#define WRITECOM 0x4 //写数据
#define SETCLOCK 0x8 //广播校时
#define WRITEADD 0xa //写设备地址
#define SETBAND 0xc //更改通讯波特率
#define SETPASSINT16U 0xf //修改密码
#define CLEAR 0x10 //最大需量清零
#define NEXTFRAME 0x20 //有后续帧
#define ERRACK 0x40 //异常应答
#define SUBSTATIONACK 0x80 //从站发出应答
#define ALLDATATIMER 2//minite
#define CLOCKTIMER 10//minite
#define COUNTERTIMER 1//minite
#define ALLDATAFLAG 0x0010
#define CLOCKFLAG 0x0020
#define KWHFLAG 0x0040
#define BROADCAST 0x0080
#define APPTIMEFLAG 0x0008
#define MAXCOMERROR 3
#define RXBUFLEN sizeof(struct LPDUFRAME)+6
#define TXBUFLEN 100
#define STARTCODE68 0x68 //起始码
#define ENDCODE 0x16 //停止码
#define MAXERRORNUM 20
enum READKWHSTATUS{READPOSIKWH=0,READNEGAKWH,READPOSIKVAR,READNEGAKVAR};
enum WHMETERSTATUS{BUSY=0,CANUSE};
enum TDLRxdStatus{SEARCHFRAMEHEAD=0,FRAMEPROC};
struct PDevData{
INT16U AINum;
INT16U BINum;
INT16U CounterNum;
};
struct PDevInfo{
INT16U DevID;
INT8U Addr[6];
INT16U MAddr;
INT16U ComError;
INT16U FactDelayTime;
struct PDevData DevData;
enum WHMETERSTATUS MeterStatus;
INT16U ReadDataFlag;
enum READKWHSTATUS ReadKwhSta;
};
struct LPDUFRAME{
INT8U StartField1; //起始字节
INT8U A0; //站地址
INT8U A1; //站地址
INT8U A2; //站地址
INT8U A3; //站地址
INT8U A4; //站地址
INT8U A5; //站地址
INT8U StartField2; //起始字节
INT8U Control;
INT8U FramLength;
INT8U LPDU[255]; //数据
INT8U CheckCode; //校验码
INT8U EndField; //结束字符
};
struct LinkInfo
{
INT16U Port;
INT16U Attr; //规约
INT16U RTSONDelay; //发送等待时间
INT8U Medium; //通道介质 0 1 3 7 9
INT32U Baudrate;
INT16U MeterCount;
struct MeterAddr *DMeterAddr;
INT16U RxdHead; //处理数据的头指针
INT16U RxdTail;
INT16U RxdLength;
INT8U RxdBuf[RXBUFLEN]; //接收缓冲区
INT8U TxdBuf[TXBUFLEN]; //发送缓冲区
INT8U TxdBufBak[TXBUFLEN];
INT8U BAKBUFLENGTH;
BOOL SUBSTATIONSTATUS;
BOOL SUBNEXTFRAME;
INT8U ERRORWORD;
};
struct AppInfo
{
INT16U ProtocolId;
BOOL EnSetClock;
BOOL TimeAllData;
BOOL TimeCounter;
BOOL BroadCastClock;
INT16U KWHStatus;
INT32U AllData; //召唤全数据间隔 单位:分(minute)
INT32U SetClock; //对钟间隔 单位:分(minute)
INT32U Counter; //召唤电度间隔 单位:分(minute)
INT32U AllDataCount;
INT32U SetClockCount;
INT32U DDCounter;
INT16U DelayVal; //超时值 单位:10ms
INT16U DevNum;
struct PDevInfo *AppDevs;
INT8U CurDevNo;
};
struct AllData
{
INT16U Ua;
INT16U Ub;
INT16U Uc;
INT16U Ia;
INT16U Ib;
INT16U Ic;
INT16U Ptotal; //这个字段为三个字节,减少一个字节
INT16U Pa;
INT16U Pb;
INT16U Pc;
INT16U Qtotal;
INT16U Qa;
INT16U Qb;
INT16U Qc;
};
struct DDdata
{
INT32U DDtotal; //电能总
INT32U DDtine; //尖费率
INT32U DDapex; //峰费率
INT32U DDflat; //平费率
INT32U DDvale; //谷费率
};
#define MINIFRAMELEN 14//最小帧长度
#define CHECKSUMPOS 10//校验字节位置
#define LASTFLAGOPOS 11//结束字符位置
void DLT645_1997PriTask(struct SysPort *Info, struct PortAppInfo* PortCfg);
BOOL DLT645InitPriLink(INT8U Port, struct PortAppInfo* PortCfg);
BOOL DLT645InitPriApp(INT8U Port, struct PortAppInfo* PortCfg);
INT16U GetDevIDByAddr(INT8U Port,INT8U *Addr);
INT16U GetActDevNoByDevID(INT8U Port,INT16U DevID);
INT16U GetNextActDevNo(INT8U Port,INT16U DevNo);
INT16U BcdToBin(INT16U BCD);
INT32U BcdToBin8(unsigned char *BCD);
INT16U BinToBcd(INT16U i);
BOOL DevDispatch(INT8U Port);
void DLT645RecMISIData(INT8U Port, BOOL Flag);
BOOL DLT645HeadFun68(INT8U Port);
INT8U DLT6465CheckSum(INT8U *Buf,INT8U Num);
void DLT645APP(INT8U Port);
void DLT645SearchFrame(INT8U Port);
void READDATA(INT8U Port,INT16U FuntionCode);
void BROADCASTCLOCK(INT8U Port);
INT16U DELAYTIME(INT8U Port,INT16U DataLength);
BOOL PRI645SCHEDULE(INT8U Port);
void SetAllDataFlag(INT8U Port);
void SetClockFlag(INT8U Port);
void ClrClockFlag(INT8U Port);
void SetKWHFlag(INT8U Port);
void SendBakData(INT8U Port);
void SetComYxStatus(INT8U Port,BOOL Flag);
void RecAllData(INT8U Port,INT8U *Buf);
void RecKWH(INT8U Port,INT8U *Buf);
BOOL ReadComYxStatus(INT8U Port);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -