📄 cbcx.c
字号:
x5=jinwu(x4);
x5=x5/3.05;
x5=jinwu(x5);
x5=x5+1;
if (x5>62){
OSMessageBox("电表时钟频率","数据超过最大值!","任意键返回...");
CloseSubWindow(w1);
CloseSubWindow(w2);
CloseSubWindow(w0);
return;
}
}
// a2bcd((UBYTE)x5,z)
c1=x5;
c1=(int)x5;
U[0]=0;
U[1]=0;
U[2]=0;
inttohex(c1,U);
if (DLT645_Writeclock(4,nID,0xE010,U,3,1000,3)==0){
//if(DLT645_Write485(4,devID,0xC032,s,6,1000,3)==0) {
OSMessageBox("时钟频率设置","设置时钟频率成功!","任意键返回...");
CloseSubWindow(w1);
CloseSubWindow(w2);
CloseSubWindow(w0);
return;
}
}
CloseSubWindow(w1);
CloseSubWindow(w2);
CloseSubWindow(w0);
return;
}
} //else if(k==K_ENTER){
CloseSubWindow(w1);
CloseSubWindow(w2);
CloseSubWindow(w0);
return;
// while(1){
}
//------------------------------------------
void SetMeter485(void) //485设置电表数据菜单
{
OS_WIN *w0;
UBYTE k;
ULONG sele;
ULLONG devID,a;
w0 = OSCreatSubWindow(0,0,128,126,1,1,"设置电表数据");
while(1){
k = OSMenuInWin(w0,6,5,16,7,&sele,7,1,"[1]广播校时","[2]电表清零","[3]设置电表电量","[4]设置电表表号","[5]设置电表密码","[6]电表时钟频率","[7]设置初校电量");
if(k==K_ESC) break;
else if(k==K_HYPHEN){
a = DLT645_InputID();
if(a<0x1000000000000) devID = a;
}
else if(k==K_ENTER){
// devID=0x000000000000;
devID=0xAAAAAAAAAAAA;
switch(sele){
case 0:CorrectTime(); break;
case 1: SetPower485(devID); break;
case 2:SetPowersz485(devID) ;break;
case 3: SetIniID(devID); break;
case 4:setPassword485(devID);break;
// case 5:SetPowertd(devID);break;
//case 6:SetPowerddY(devID);break;
case 5:setcolock(devID);break;
case 6:SetPowercx485(devID) ;break;
default: break;
}
}
}
CloseSubWindow(w0);
}
//--------------------------------------------------------------
//--------------------------------------------------------------
void ComSele(void)
{
OS_WIN *w0;
UBYTE k;
ULONG sele;
w0 = OSCreatSubWindow(0,0,128,126,1,1,"选择串口");
if(Global_ComNum==4) sele = 1;
else sele = 0;
k = OSMenuInWin(w0,20,24,12,2,&sele,2,1,"电力红外接口","RS485接口");
if(k==K_ENTER){
if(sele==0) Global_ComNum = 1; //TVIR
else if(sele==1) Global_ComNum = 4; //RS485
else Global_ComNum = 1;
OSComIni(Global_ComNum,9600,1,0,1,8);
}
CloseSubWindow(w0);
}
//--------------------------------------------------------------
//--------------------------------------------------------------
void rwdl(ULLONG devID)//读设电量
{
UBYTE n[8];
UBYTE n1[8];
ULLONG cPswd;
OS_WIN *w0,*w1;
UBYTE k;
UBYTE d[20],s[20],bh[20],bh1[20];
ULLONG nID,m;
sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
nID = DLT645_InputID();
if (nID==0xAAAAAAAAAAAA){
OSMessageBox("读取电量","没有输入表号!","任意键返回...");
CloseSubWindow(w0);
return;
}
if(nID<0x1000000000000){
while(1){
sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
w1 = OSCreatSubWindow(0,0,128,128,1,1,s);
if(DLT645_Read(4,nID,0x9010,d,20,2000,3)<0) break;
// if(DLT645_Read(4,devID,0xC032,bh1,6,2000,3)<0) break;
// OSDrawInWin(w1,2,4,"电表表号:",3,0);
// sprintf(bh,"%02X%02X%02X%02X%02X%02X",bh1[5],bh1[4],bh1[3],bh1[2],bh1[1],bh1[0]); OSDrawInWin(w1,8,18,bh,3,0);
OSDrawInWin(w1,2,4,"当前电量:",3,0);
sprintf(s," %02X%02X%02X.%02X kWh",d[3],d[2],d[1],d[0]); OSDrawInWin(w1,8,18,s,3,0);
OSDrawInWin(w1,2,100,"按ENTER 设电量",3,0);
k=OSWaitKey();
if (k==K_ENTER)
{
n[0]='0';
n[1]='0';
n[2]='0';
n[3]='0';
n[4]='0';
n[5]='0';
cPswd = (inpswd(n)<<8);
n1[0]=0;
n1[1]=153;
n1[2]=153;
n1[3]=153;
n1[4]=0;
n1[5]=16;
n1[6]=1;
n1[7]=19;
if(DLT645_Write(4,nID,0xC119,cPswd,n1,0x0A,3000,3)==0){
OSMessageBox("设置电量","设置电量成功!","任意键返回...");
}
}
CloseSubWindow(w1);
CloseSubWindow(w0);
break;
}
}
CloseSubWindow(w1);
CloseSubWindow(w0);
}
void rbhdl(ULLONG devID)//抄表号和电量
{
OS_WIN *w0,*w1;
UBYTE k;
UBYTE d[20],s[20],bh[20],bh1[20];
ULLONG nID,m;
sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
// nID = DLT645_InputID();
if(nID<0x1000000000000){
while(1){
sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
w1 = OSCreatSubWindow(0,0,128,128,1,1,s);
if(DLT645_Read(4,devID,0xC032,bh1,6,2000,3)<0) break;
if(DLT645_Read(4,devID,0x9010,d,20,2000,3)<0) break;
OSDrawInWin(w1,2,4,"电表表号:",3,0);
sprintf(bh,"%02X%02X%02X%02X%02X%02X",bh1[5],bh1[4],bh1[3],bh1[2],bh1[1],bh1[0]); OSDrawInWin(w1,8,18,bh,3,0);
OSDrawInWin(w1,2,36,"当前电量:",3,0);
sprintf(s," %02X%02X%02X.%02X kWh",d[3],d[2],d[1],d[0]); OSDrawInWin(w1,8,48,s,3,0);
OSDrawInWin(w1,2,100,"任意键返回...",3,0);
OSWaitKey();
CloseSubWindow(w1);
CloseSubWindow(w0);
break;
}
}
CloseSubWindow(w1);
CloseSubWindow(w0);
}
void hzsc(void)
{
OS_WIN *w0;
UBYTE k;
ULONG sele;
ULLONG devID,a;
w0 = OSCreatSubWindow(0,0,128,126,1,1,"后装抄设数据");
while(1){
// k = OSMenuInWin(w0,1,15,19,7,&sele,7,1," [1]正向有功电量"," [2]正向有功数据块"," [3]联发电表日期"," [4]抄读电表日期"," [5]抄读电表时间"," [6]抄读电表表号"," [7]抄读脉冲常数");
k = OSMenuInWin(w0,1,15,19,3,&sele,3,1," [1]设置表号"," [2]读设电量"," [3]读表号电量");
if(k==K_ESC) break;
else if(k==K_HYPHEN){
a = DLT645_InputID();
if(a<0x1000000000000) devID = a;
}
else if(k==K_ENTER){
// devID=0x000000000000;
devID=0xAAAAAAAAAAAA;
switch(sele){
case 0: SetIniIDsc(devID); break;
case 1: rwdl(devID);break;
case 2: rbhdl(devID); break;
//case 6: Viewmccs485(devID); break;
default: break;
}
}
}
CloseSubWindow(w0);
}
void autot(devID)
{
CorrectTime();
ViewDatelfau(devID);
SetPowerddKau(devID);
SetPowertdau(devID);
setcolockau(devID);
}
void qzscau(void)
{
OS_WIN *w0;
UBYTE k;
ULONG sele;
ULLONG devID,a;
w0 = OSCreatSubWindow(0,0,128,126,1,1,"后装抄设数据");
while(1){
// k = OSMenuInWin(w0,1,15,19,7,&sele,7,1," [1]正向有功电量"," [2]正向有功数据块"," [3]联发电表日期"," [4]抄读电表日期"," [5]抄读电表时间"," [6]抄读电表表号"," [7]抄读脉冲常数");
k = OSMenuInWin(w0,1,15,19,2,&sele,2,1," [1]自动设置");
if(k==K_ESC) break;
else if(k==K_HYPHEN){
a = DLT645_InputID();
if(a<0x1000000000000) devID = a;
}
else if(k==K_ENTER){
// devID=0x000000000000;
devID=0xAAAAAAAAAAAA;
switch(sele){
case 0: autot(devID); break;
//case 6: Viewmccs485(devID); break;
default: break;
}
}
}
CloseSubWindow(w0);
}
void SetMetertdd(void) //485设置电表数据菜单
{
OS_WIN *w0;
UBYTE k;
ULONG sele;
ULLONG devID,a;
w0 = OSCreatSubWindow(0,0,128,126,1,1,"设置电表数据");
while(1){
k = OSMenuInWin(w0,6,5,16,3,&sele,3,1,"[1]断电","[2]通电","[3]状态");
if(k==K_ESC) break;
else if(k==K_HYPHEN){
a = DLT645_InputID();
if(a<0x1000000000000) devID = a;
}
else if(k==K_ENTER){
// devID=0x000000000000;
devID=0xAAAAAAAAAAAA;
switch(sele){
//case 0:SetPowerddY(devID); break;
// case 1: SetPowerddC(devID); break;
case 0:SetPowerddKau(devID) ;break;
case 1: SetPowertdau(devID); break;
case 2: Viewzt(devID); break;
default: break;
}
}
}
CloseSubWindow(w0);
}
//--------------------------------------------------------------
//--------------------------------------------------------------
void ViewDatelfhau(ULLONG devID) //联发读取电表日期
{
OS_WIN *w0,*w1;
UBYTE k;
UBYTE d[4],c[3],s[20],d1[3],d2[3];
ULLONG nID,m;
sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
nID = DLT645_InputID();
// if (nID=0xAAAAAAAAAAAA){OSMessageBox("信息","表号错误!","任意键返回...");CloseSubWindow(w0); return; }
sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
w1 = OSCreatSubWindow(0,0,128,128,1,1,s);
if(nID<0x1000000000000){
while(1){
if(DLT645_Read(4,nID,0x9010,d2,4,8000,3)<0) break;
if(DLT645_Read(4,nID,0xC010,d,4,8000,3)<0) break;
if(DLT645_Read(4,nID,0xC011,c,3,8000,3)<0) break;
if(DLT645_Read(4,nID,0xC030,d1,3,8000,3)<0) break;
OSDrawInWin(w1,2,2,"电表电量",3,0);
sprintf(s,"%02X%02X%02X.%02X",d2[3],d2[2],d2[1],d2[0]); OSDrawInWin(w1,8,14,s,3,0);
OSDrawInWin(w1,2,26,"电表日期",3,0);
sprintf(s,"%02X年%02X月%02X日",d[3],d[2],d[1]); OSDrawInWin(w1,8,38,s,3,0);
OSDrawInWin(w1,2,50,"电表时间",3,0);
sprintf(s,"%2X:%02X:%02X",c[2],c[1],c[0]); OSDrawInWin(w1,8,62,s,3,0);
OSDrawInWin(w1,2,74,"电表脉冲",3,0);
sprintf(s," %02X%02X%",d1[1],d1[0]); OSDrawInWin(w1,56,74,s,3,0);
OSDrawInWin(w1,2,90,"任意键返回...",3,0);
OSWaitKey();
CloseSubWindow(w1);
break;
}
}
CloseSubWindow(w1);
CloseSubWindow(w0);
}
void authz(devID)
{
SetIniID(devID);
ViewDatelfhau(devID);
SetPowerddKau(devID);
SetPowertdau(devID);
SethzPowersz485(devID);
}
void hzscau(void)
{
OS_WIN *w0;
UBYTE k;
ULONG sele;
ULLONG devID,a;
w0 = OSCreatSubWindow(0,0,128,126,1,1,"后装抄设数据");
while(1){
// k = OSMenuInWin(w0,1,15,19,7,&sele,7,1," [1]正向有功电量"," [2]正向有功数据块"," [3]联发电表日期"," [4]抄读电表日期"," [5]抄读电表时间"," [6]抄读电表表号"," [7]抄读脉冲常数");
k = OSMenuInWin(w0,1,15,19,2,&sele,2,1," [1]自动设置");
if(k==K_ESC) break;
else if(k==K_HYPHEN){
a = DLT645_InputID();
if(a<0x1000000000000) devID = a;
}
else if(k==K_ENTER){
// devID=0x000000000000;
devID=0xAAAAAAAAAAAA;
switch(sele){
case 0: authz(devID); break;
//case 6: Viewmccs485(devID); break;
default: break;
}
}
}
CloseSubWindow(w0);
}
void qzscsd(void)
{
OS_WIN *w0;
UBYTE k;
ULONG sele;
ULLONG devID,a;
w0 = OSCreatSubWindow(0,0,128,126,1,1,"后装手动抄设数据");
while(1){
// k = OSMenuInWin(w0,1,15,19,7,&sele,7,1," [1]正向有功电量"," [2]正向有功数据块"," [3]联发电表日期"," [4]抄读电表日期"," [5]抄读电表时间"," [6]抄读电表表号"," [7]抄读脉冲常数");
k = OSMenuInWin(w0,1,15,19,5,&sele,5,1," [1]设置表号"," [2]设置电量"," [3]电量时间脉冲"," [4]断电"," [5]通电");
if(k==K_ESC) break;
else if(k==K_HYPHEN){
a = DLT645_InputID();
if(a<0x1000000000000) devID = a;
}
else if(k==K_ENTER){
// devID=0x000000000000;
devID=0xAAAAAAAAAAAA;
switch(sele){
case 0: SetIniID(devID); break;
case 1: SetPowercx485hz(devID); break;
case 2:ViewDatelfhau(devID);break;
case 3: SetPowerddK(devID);
case 4: SetPowertd(devID);
//case 6: Viewmccs485(devID); break;
default: break;
}
}
}
CloseSubWindow(w0);
}
/**************************************/
/* 主程序: 用户程序从此开始 */
/**************************************/
int main(void)
{
OS_WIN *wnd_Main;
UBYTE k;
LONG sele;
ULLONG devID=0xAAAAAAAAAAAA,a;
for(k=0;k<12;k++){ tr[k][0] = 0xFF; }
tr[0][0] = 0x02; tr[0][1] = 0x00; tr[0][2] = 0x07;
tr[1][0] = 0x04; tr[1][1] = 0x00; tr[1][2] = 0x22;
bt[0] = 0; bt[1] = 0; bt[2] = 1; bt[3] = 1;
OSLCDClearPanel(0);
wnd_Main = OSCreatSubWindow(6,6,110,100,1,1,"棋港485单相电能表"); //创建子窗口
OSComIni(Global_ComNum,1200,1,0,1,8);
while(1){
k = OSMenuInWin(wnd_Main,2,10,16,7,&sele,7,1,"[1]查看电表数据","[2]设置电表数据","[3]后装自动抄设数据","[4]后装抄设数据","[5]串口选择","[6]通断电","[7]返回系统");
if(k==K_HYPHEN){
a = DLT645_InputID();
if(a<0x1000000000000) devID = a;
}
else
if(k==K_ENTER){
switch(sele){
case 0: ViewMeter(); break;
case 1: SetMeter485(); break;
//case 2: hzsc(); break;
case 2:qzscau();break;
//case 3:hzscau();break;
case 3:qzscsd();break;
case 4: ComSele();break;
case 5: SetMetertdd();break;
case 6: OSExit(); break;
default: break;
}
}
}
CloseSubWindow(wnd_Main);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -