?? 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 + -