⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbcx.c

📁 485单相电能表开发程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    	sprintf(s," %02X%02X%",d1[1],d1[0]);	OSDrawInWin(w1,8,82,s,3,0);
		OSDrawInWin(w1,2,100,"任意键返回...",3,0);	
		OSWaitKey();
		CloseSubWindow(w1);
		break;	
	}
	}
	CloseSubWindow(w1);
	CloseSubWindow(w0);
}
void ViewDate(ULLONG devID)  //读取电表日期
{
	OS_WIN 	*w0,*w1;
	UBYTE k;
	UBYTE d[4],c[3],s[20];
	ULLONG nID,m;


  
	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
    w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
    
    
     
     w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
    nID = DLT645_InputID();
     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,0xC010,d,4,3000,3)<0) 	break;
	
		OSDrawInWin(w1,2,4,"电表日期",3,0);
		sprintf(s,"%02X年%02X月%02X日",d[3],d[2],d[1]);	OSDrawInWin(w1,8,18,s,3,0);
		OSDrawInWin(w1,2,100,"任意键返回...",3,0);	
		OSWaitKey();
    	CloseSubWindow(w1);
		break;	
	}
	}
	CloseSubWindow(w1);
	CloseSubWindow(w0);
}

void ViewTime(ULLONG devID)  //读取电表时间
{
	OS_WIN 	*w0,*w1;
	UBYTE k;
	UBYTE d[4],c[3],s[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();
    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,0xC011,c,3,2000,3)<0) 	break;	
		OSDrawInWin(w1,2,36,"电表时间",3,0);
		sprintf(s,"%2X:%02X:%02X",c[2],c[1],c[0]);	OSDrawInWin(w1,8,50,s,3,0);
		OSDrawInWin(w1,2,100,"任意键返回...",3,0);	
		OSWaitKey();
        CloseSubWindow(w1);
		break;	
	}
	}
	CloseSubWindow(w1);
	CloseSubWindow(w0);
}

//----------------------------------------------
void ViewMeter(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,6,&sele,6,1," [1]正向有功电量"," [2]正向有功数据块"," [3]日期时间脉冲"," [4]抄读电表日期"," [5]抄读电表时间"," [6]抄读电表表号");

		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: ViewPower485(devID); break;
				case 1: ViewPowersjk485(devID);break;
		    	case 2: ViewDatelf(devID); break;
		    	case 3: ViewDate(devID); break;
		    	case 4:	ViewTime(devID);	break;
		    	case 5: viewbh(devID); break;
		        //case 6:	Viewmccs485(devID); break;
		    	default:	break;			
			}
		}		
	}
	CloseSubWindow(w0);
}

//--------------------------------------------------------------
//--------------------------------------------------------------
void SetIniID(ULLONG devID)  //写电表表号
{
	OS_WIN 	*w0,*w1;
	UBYTE s[20],s1[20];
	ULLONG nID,m;
	nID=0;
   sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
    w0 = OSCreatSubWindow(0,0,128,128,1,1,s);	
	nID = DLT645_InputID();
	//sprintf(s1,"0010000[%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
//	nID=s1;
	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 (nID==0x000000000000)
        {
	      OSMessageBox("设置电表表号","电表表号不能为空!","任意键返回...");
	      break;
	     } 
	   else
	    {
         	if(DLT645_WriteID(4,nID,4000,3)==0)
         
        	{
	     	OSMessageBox("设置电表表号","设置成功!","任意键返回...");
	    		CloseSubWindow(w1);
	    		CloseSubWindow(w0);
	            return;
	        }
	         CloseSubWindow(w1);
	    		CloseSubWindow(w0);
	            return;
        }
      }
	}
	CloseSubWindow(w1);
	CloseSubWindow(w0);
}
void SetIniIDsc(ULLONG devID)  //写电表表号
{
	OS_WIN 	*w0,*w1;
	UBYTE s[20],s1[20],s4[20];
	ULLONG nID,m,s2,s3;
	
	nID=0;
   sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
    w0 = OSCreatSubWindow(0,0,128,128,1,1,s);	
	nID = DLT645_InputID();
	sprintf(s1,"10000%05X",(ULONG)nID);
	s2=0;
	nID=hex2bcd4(s1);

     
    
	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 (nID==0x000000000000)
        {
	      OSMessageBox("设置电表表号","电表表号不能为空!","任意键返回...");
	      break;
	     } 
	   else
	    {
         	if(DLT645_WriteID(4,nID,1000,3)==0)
         
        	{
	     	OSMessageBox("设置电表表号","设置成功!","任意键返回...");
	    		CloseSubWindow(w1);
	    		CloseSubWindow(w0);
	            return;
	        }
	         CloseSubWindow(w1);
	    		CloseSubWindow(w0);
	            return;
        }
      }
	}
	CloseSubWindow(w1);
	CloseSubWindow(w0);
}
ULONG inpswd(UBYTE *d)
{
	ULONG a = 0;
	UBYTE i;
	for(i=0;i<6;i++){
		if(d[i]==0)	break;
		a = (a<<4)+(d[i]&0xF);
	//	a = (d[i]&0xF);
	}
	return a;
}

void setPassword485(ULLONG devID)   //设置密码
{	OS_WIN 	*w0,*w1,*w2,*w3;
	UBYTE s[20],p[10],c[10],k,b[10],g[10];
	ULONG nPswd,cPswd;

	ULLONG nID,m;
	nID=0;
     sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	    w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	    nID = DLT645_InputID();
	   	sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
    	 w1 = OSCreatSubWindow(0,0,128,128,1,1,s);
		if(nID<0x1000000000000){  	
	while(1){
    w2=OSCreatSubWindow(15,34,90,44,1,1,"输入旧密码");	
	p[0]=0;	
		k = OSEntryInWin(w2,2,8,6,p,0,0,1);
		if(k==K_ESC) {CloseSubWindow(w2);CloseSubWindow(w1);CloseSubWindow(w0);return;}
		else if(k==K_ENTER){
			while(1){
		     w3 =OSCreatSubWindow(15,34,90,44,1,1,"输入新密码");	
			
			 c[0]=0;
				k = OSEntryInWin(w3,2,8,6,c,0,0,1);
				if(k==K_ESC) {CloseSubWindow(w3);CloseSubWindow(w2);CloseSubWindow(w1);CloseSubWindow(w0);return;}
				else if(k==K_ENTER){
		  
			cPswd = (inpswd(p)<<8);
			nPswd = (inpswd(c)<<8);
			if(DLT645_WritePswd(4,nID,cPswd,nPswd,3000,3)<0){
				CloseSubWindow(w1);
					CloseSubWindow(w2);
					CloseSubWindow(w3);
					CloseSubWindow(w0);
					return;
		    			   
				   }
					OSMessageBox("修改电表密码","修改成功!","任意键返回...");
					CloseSubWindow(w1);
					CloseSubWindow(w2);
					CloseSubWindow(w3);
					CloseSubWindow(w0);
					return;
				}
							
			}			
		}
	}
	}
	CloseSubWindow(w0);
}



void CorrectTime()
{
	OS_WIN 	*w0;	
	w0 = OSCreatSubWindow(0,0,128,128,1,1,"广播校时");
	DLT645_BroadTime(4);
	CloseSubWindow(w0);			
}

void SetPower485(ULLONG devID)  //电表清零
{
	OS_WIN 	*w0,*w1,*w2;
	UBYTE k,s[20];
	UBYTE m[8];
	ULLONG nID,nPswd;
	
	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){CloseSubWindow(w0);return;}
    sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
   	 w1 = OSCreatSubWindow(0,0,128,128,1,1,s);
     w2= OSCreatSubWindow(15,34,90,44,1,1,"输入密码");	
     m[0]=0;
	 k = OSEntryInWin(w2,1,2,6,m,0,0,1);
		
		if(k==K_ENTER){
			while(1){
         nPswd = (inpswd(m)<<8);
		
		if(DLT645_Write485ql(4,nID,0x09,nPswd,0x02,8000,3)==0){
			OSMessageBox("电表清零","清零成功!","任意键返回...");
				}
			CloseSubWindow(w1);
			CloseSubWindow(w2);
			CloseSubWindow(w0);
			return;		
}		
	
	
	}
	CloseSubWindow(w1);
			CloseSubWindow(w2);
			CloseSubWindow(w0)	;	

}

void SetPowertd(ULLONG devID)  //电表通电功能
{
	OS_WIN 	*w0,*w1,*w2;
	UBYTE k,s[20];
	UBYTE m[8];
	UBYTE d[6];
	ULLONG nID,cPswd,ncon;
	
	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){CloseSubWindow(w0);return;}
    sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
   	 w1 = OSCreatSubWindow(0,0,128,128,1,1,s); 
   	   w2 =OSCreatSubWindow(15,34,90,44,1,1,"输入密码");	
    	m[0]=0;
	   
	    
		k = OSEntryInWin(w2,1,2,6,m,0,0,1);
			cPswd = (inpswd(m)<<8);
	if(k==K_ESC){	CloseSubWindow(w2); CloseSubWindow(w1);	CloseSubWindow(w0);return;}
		else if(k==K_ENTER){       
	
    if (DLT645_Write485tdd(4,nID,0xC606,cPswd,0x04,3000,3)==0){
			OSMessageBox("电表通电","电表通电成功!","任意键返回...");
				}
				}
				CloseSubWindow(w2);
			CloseSubWindow(w1);
		
			CloseSubWindow(w0);

}
void SetPowertdau(ULLONG devID)  //电表通电功能
{
	OS_WIN 	*w0,*w1,*w2;
	UBYTE k,s[20];
	UBYTE m[8];
	UBYTE d[6];
	ULLONG nID,cPswd,ncon;
	
	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
   	nID = DLT645_InputID(); 
   //	nID=devID;   
   if (nID==0x1000000000000){CloseSubWindow(w0);return;}
    sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
   	 w1 = OSCreatSubWindow(0,0,128,128,1,1,s); 
   	   w2 =OSCreatSubWindow(15,34,90,44,1,1,"输入密码");	
    	m[0]=0;
    //	m[1]=0;
	 //  m[2]=0;
    //	m[3]=0;
    //	m[4]=0;
    //	m[5]=0;
	 //  m[6]=0;
    //	m[7]=0;
	    
	k = OSEntryInWin(w2,1,2,6,m,0,0,1);
			cPswd = (inpswd(m)<<8);
	if(k==K_ESC){	CloseSubWindow(w2); CloseSubWindow(w1);	CloseSubWindow(w0);return;}
		else if(k==K_ENTER){       
	
    if (DLT645_Write485tdd(4,nID,0xC606,cPswd,0x04,4000,3)==0){
			OSMessageBox("电表通电","电表通电成功!","任意键返回...");
				}
				}
				CloseSubWindow(w2);
			CloseSubWindow(w1);
		
			CloseSubWindow(w0);

}
void SetPowerddY(ULLONG devID)  //电表断电予通知功能
{
	OS_WIN 	*w0,*w1,*w2;
	UBYTE k,s[20];
	UBYTE m[8];
	UBYTE d[6];
	UBYTE f[6];
	ULLONG nID,cPswd,ncon,ncon1;
	
	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){CloseSubWindow(w0);return;}
    sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
   	 w1 = OSCreatSubWindow(0,0,128,128,1,1,s);  
   	  w2 =OSCreatSubWindow(15,34,90,44,1,1,"输入密码");	
    	m[0]=0;
	   
	    
		k = OSEntryInWin(w2,1,2,6,m,0,0,1);
			cPswd = (inpswd(m)<<8);
	if(k==K_ESC) {CloseSubWindow(w2);CloseSubWindow(w1);	CloseSubWindow(w0);return;}
		else if(k==K_ENTER){   
	
    if (DLT645_Write485tdd(4,nID,0xC03A,cPswd,0x04,3000,3)==0){
    
			OSMessageBox("电表断电","电表断电通知成功!","任意键返回...");
		
			}	
			}
			CloseSubWindow(w1);
		
			CloseSubWindow(w0);

}
void SetPowerddK(ULLONG devID)  //电表断电控制功能
{
	OS_WIN 	*w0,*w1,*w2;
	UBYTE k,s[20];
	UBYTE m[8];
	UBYTE d[6];
	UBYTE f[6];
	ULLONG nID,cPswd,ncon,ncon1;
	
	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){CloseSubWindow(w0);return;}
    sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
   	 w1 = OSCreatSubWindow(0,0,128,128,1,1,s);     
	 w2 =OSCreatSubWindow(15,34,90,44,1,1,"输入密码");	
    	m[0]=0;
	   
	    
		k = OSEntryInWin(w2,1,2,6,m,0,0,1);
			cPswd = (inpswd(m)<<8);
	if(k==K_ESC) {CloseSubWindow(w2);CloseSubWindow(w1);CloseSubWindow(w0);return;}
		else if(k==K_ENTER){
    
    
    if (DLT645_Write485tdd(4,nID,0xC605,cPswd,0x04,3000,3)==0){
			OSMessageBox("电表断电","电表断电成功!","任意键返回...");
			}
	}		CloseSubWindow(w2);	
			CloseSubWindow(w1);
		
			CloseSubWindow(w0);

}
void SetPowerddKau(ULLONG devID)  //电表断电控制功能
{
	OS_WIN 	*w0,*w1,*w2;
	UBYTE k,s[20];
	UBYTE m[8];
	UBYTE d[6];
	UBYTE f[6];
	ULLONG nID,cPswd,ncon,ncon1;
	
	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
   	nID = DLT645_InputID(); 
   //	nID=devID;   
   if (nID==0x1000000000000){CloseSubWindow(w0);return;}
    sprintf(s," ID [%04X%08X]",(ULONG)(nID>>32),(ULONG)nID);
   	 w1 = OSCreatSubWindow(0,0,128,128,1,1,s);     
	w2 =OSCreatSubWindow(15,34,90,44,1,1,"输入密码");	
    		m[0]=0;
    //	m[1]=0;
	//   m[2]=0;
    //	m[3]=0;
    //	m[4]=0;
   // 	m[5]=0;
//	   m[6]=0;
   // 	m[7]=0;
	   
	    
		k = OSEntryInWin(w2,1,2,6,m,0,0,1);
			cPswd = (inpswd(m)<<8);
	if(k==K_ESC) {CloseSubWindow(w2);CloseSubWindow(w1);CloseSubWindow(w0);return;}
	else if(k==K_ENTER){
    
    
    if (DLT645_Write485tdd(4,nID,0xC605,cPswd,0x04,4000,3)==0){
			OSMessageBox("电表断电","电表断电成功!","任意键返回...");
		}
	}		CloseSubWindow(w2);	
			CloseSubWindow(w1);
		
			CloseSubWindow(w0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -