?? mptran.cpp
字號:
// MPTran.cpp: implementation of the CMPTran class.
//
//////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "MPTran.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMPTran::CMPTran()
{
}
CMPTran::~CMPTran()
{
}
int CMPTran::GetTranItem(int Item_data,BYTE Flags)
{
int data = Item_data & 0xFFFF;//bit15 bit14 == 1 表示設(shè)置,==0 表示查詢
char LoBYTE = Item_data & 0xFF;
char HiBYTE = ( Item_data & 0xFF00 ) >> 8;
char LoBCD = LoBYTE & 0x0F;
char HiBCD = (LoBYTE & 0xF0) >> 4;
#ifdef DBUG_PRO
printf("\r\nITEM%x",HiBYTE);
#endif
data = 0;
switch(HiBYTE & 0xFF)
{
case 0x90:
data = 0x0100 + (LoBYTE & 0xF0) + ((LoBCD + 1) & 0x0F);
break;
case 0x91:
data = 0x0120 + (LoBYTE & 0xF0) + ((LoBCD + 1) & 0x0F);
break;
case 0xA0:
case 0xB0:
data = 0x0140 + (LoBYTE & 0xF0) + ((LoBCD + 1) & 0x0F);
break;
case 0x94:
data = 0x0200 + (LoBYTE & 0xF0) + ((LoBCD + 1) & 0x0F);
break;
case 0x95:
data = 0x0200 + (LoBYTE & 0xF0) + ((LoBCD + 1) & 0x0F);
break;
case 0xA4:
case 0xB4:
data = 0x0240 + (LoBYTE & 0xF0) + ((LoBCD + 1) & 0x0F);
break;
case 0xB3:
if(HiBCD == 2)
{
data = 0x0310 + ((LoBCD + 1) & 0x0F);
}
break;
case 0xB6:
data = 0x0400;
break;
case 0xC3:
if(HiBCD ==3)
{
data = 0x0710;
}
break;
}
#ifdef DBUG_PRO
printf("\r\nDATA%x",data);
#endif
return data;
}
int CMPTran::FormCheckClock(BYTE *buff,time_t *m_time , BYTE * addr)//設(shè)置電表時(shí)鐘
{
return 0;
}
int CMPTran::FormReadDataFrame(BYTE *buff, int item , BYTE * addr)
{
return CMPZJ::FormReadDataFrame(buff, GetTranItem(item,0) , addr);
}
int CMPTran::FormSetAddress(BYTE *buff, BYTE *addr)//設(shè)置電表地址
{
return 0;
}
int CMPTran::ProcReturnedFrame(BYTE *inbuff, int inLen,int &item, BYTE *outbuff,int &outlen,BYTE *addr)//返回?cái)?shù)據(jù)的處理
{
int m = CMPZJ::ProcReturnedFrame(inbuff, inLen,GetTranItem(item,0), outbuff,outlen,addr);
if( m != 0)
return m;
if(outlen == 0)
return 0;
BYTE buf[256];
long i,j;
switch( item )
{
case 0xA01F:
case 0xA02F:
outlen = 15;
for(i = 0;i < 5;i++)
{
memcpy(&buf[3 *i],&outbuff[7 * i],3);
}
memcpy(outbuff,buf,15);
break;
case 0xB01F:
case 0xB02F:
outlen = 20;
for(i = 0;i < 5;i++)
{
memcpy(&buf[4 *i],&outbuff[7 * i + 3],4);
}
memcpy(outbuff,buf,20);
break;
case 0xB61F:
if(addr[1] == 0x03)//三相三線
{
buf[0] = outbuff[12];buf[1] = outbuff[13];//A相電壓
buf[2] = 0;buf[3] = 0;
buf[4] = outbuff[14];buf[5] = outbuff[15];//C相電壓
}
else
{
memcpy(buf,&outbuff[12],6);
}
memcpy(outbuff,buf,6);
outlen = 6;
break;
case 0xB62F:
if(addr[1] == 0x03)//三相三線
{
buf[0] = outbuff[18];buf[1] = outbuff[19];//A相電流
buf[2] = 0;buf[3] = 0;
buf[4] = outbuff[20];buf[5] = outbuff[21];//C相電流
}
else
{
memcpy(buf,&outbuff[18],6);
}
memcpy(outbuff,buf,6);
outlen = 6; break;
case 0xB63F://有功功率
i = TranBcdToHex(outbuff[0]) + TranBcdToHex(outbuff[1]) * 100 + TranBcdToHex(outbuff[2]) *10000;
j = TranBcdToHex(outbuff[3]) + TranBcdToHex(outbuff[4]) * 100 + TranBcdToHex(outbuff[5]) *10000;
i -= j;
outbuff[0] = TranHexToBcd(i & 0xFF);
outbuff[1] = TranHexToBcd((i >> 8 ) & 0xFF);
outbuff[2] = TranHexToBcd((i >> 16) & 0xFF);
memset(&outbuff[3],0xFF,9);
outlen = 12;
break;
case 0xB64F://無功功率
i = TranBcdToHex(outbuff[6]) + TranBcdToHex(outbuff[ 7]) * 100 + TranBcdToHex(outbuff[ 8]) *10000;
j = TranBcdToHex(outbuff[9]) + TranBcdToHex(outbuff[10]) * 100 + TranBcdToHex(outbuff[11]) *10000;
i -= j;
outbuff[0] = TranHexToBcd(i & 0xFF);
outbuff[1] = TranHexToBcd((i >> 8 ) & 0xFF);
memset(&outbuff[2],0xFF,6);
outlen = 8;
break;
case 0xB65F:
outlen = 0;
break;
}
return 0;
}
/* TRANITEM [100] = {
{0x9010,0x111},{0x9011,0x112},{0x9012,0x113},{0x9013,0x114},{0x9014,0x115},{0x901F,0x110},//當(dāng)前正向有功電量
{0x9020,0x121},{0x9021,0x122},{0x9022,0x123},{0x9023,0x124},{0x9024,0x125},{0x902F,0x120},
{0x9110,0x131},{0x9111,0x132},{0x9112,0x133},{0x9113,0x134},{0x9114,0x135},{0x911F,0x130},
{0x9120,0x141},{0x9121,0x142},{0x9122,0x143},{0x9123,0x144},{0x9124,0x145},{0x912F,0x140},
{0xA010,0x151},{0xA011,0x152},{0xA012,0x153},{0xA013,0x154},{0xA014,0x155},{0xA01F,0x150},//當(dāng)前需量最大值
{0xA020,0x161},{0xA021,0x162},{0xA022,0x163},{0xA023,0x164},{0xA024,0x165},{0xA02F,0x160},//“”“”“”“”“”
{0xB010,0x151},{0xB011,0x152},{0xB012,0x153},{0xB013,0x154},{0xB014,0x155},{0xB01F,0x150},//需量時(shí)間
{0xB020,0x161},{0xB021,0x162},{0xB022,0x163},{0xB023,0x164},{0xB024,0x165},{0xB02F,0x160},//""""""""""
{0x9410,0x211},{0x9411,0x212},{0x9412,0x213},{0x9413,0x214},{0x9414,0x215},{0x941F,0x210},
{0x9420,0x221},{0x9421,0x222},{0x9422,0x223},{0x9423,0x224},{0x9424,0x225},{0x942F,0x220},
{0x9510,0x231},{0x9511,0x232},{0x9512,0x233},{0x9513,0x234},{0x9514,0x235},{0x951F,0x230},
{0x9520,0x241},{0x9521,0x242},{0x9522,0x243},{0x9523,0x244},{0x9524,0x245},{0x952F,0x240},
{0xA410,0x251},{0xA411,0x252},{0xA412,0x253},{0xA413,0x254},{0xA414,0x255},{0xA41F,0x250},//上月需量最大值
{0xA420,0x261},{0xA421,0x262},{0xA422,0x263},{0xA423,0x264},{0xA424,0x265},{0xA42F,0x260},
{0xB410,0x251},{0xB425,0x252},{0xB412,0x253},{0xB413,0x254},{0xB414,0x255},{0xB41F,0x250},//上月需量時(shí)間
{0xB420,0x261},{0xB421,0x262},{0xB422,0x263},{0xB423,0x264},{0xB424,0x265},{0xB42F,0x260},
{0xB320,0x311},{0xB321,0x312},{0xB322,0x313},{0xB323,0x314}, {0xB32F,0x310},//失壓
{0xB611,0x400},{0xB612,0x400},{0xB613,0x400},{0xB61F,0x400},//瞬時(shí)量電壓
{0xB621,0x400},{0xB622,0x400},{0xB623,0x400},{0xB62F,0x400},//電流
{0xB630,0x400}, {0xB63F,0x400},
{0xB640,0x400}, {0xB64F,0x400}
};
*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -