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

📄 cbcx.c

📁 485单相电能表开发程序
💻 C
📖 第 1 页 / 共 5 页
字号:
}
void SetPowerddC(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,0xC03B,cPswd,0x04,3000,3)==0){
			OSMessageBox("电表断电","电表断电通知清除成功!","任意键返回...");
			}
		}		
			CloseSubWindow(w1);
		
			CloseSubWindow(w0);

}


void SethzPowersz485(ULLONG devID)//设置电量
{
	OS_WIN 	*w0,*w1,*w2;
	UBYTE k,s[20];
	ULONG a;
    
    UBYTE m[8];
    UBYTE m1[8];
    UBYTE n1[8];
	ULLONG nID,cPswd;
  	nID=0;
  	
    	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){
		
		  
			w2 =  OSCreatSubWindow(15,34,90,44,1,1,"输入电量");
		
			   m1[0]=0;
			 
			    
         k = OSEntryInWin(w2,1,2,8,m1,0,0,1);		//总;
			if(k==K_ESC) {CloseSubWindow(w1);CloseSubWindow(w2);CloseSubWindow(w0);return;}
			else if(k==K_ENTER){	    
	     
		    a2bcd2(m1,n1);
		while(1){
			  	if(DLT645_Write(4,nID,0xC119,cPswd,n1,0x0A,3000,3)==0){
					OSMessageBox("设置电量","设置电量成功!","任意键返回...");
			}
				
					CloseSubWindow(w1);
				CloseSubWindow(w2);
					
					CloseSubWindow(w0);
				return;				
			
				}	
					CloseSubWindow(w1);
				CloseSubWindow(w2);
					
					CloseSubWindow(w0);
				return;	
			}	
				
			CloseSubWindow(w1);
				CloseSubWindow(w2);
					
					CloseSubWindow(w0);
				return;		
	
}


void SetPowersz485(ULLONG devID)//设置电量
{
	OS_WIN 	*w0,*w1,*w2,*w3;
	UBYTE k,s[20];
	ULONG a;
    
    UBYTE m[8];
    UBYTE m1[8];
    UBYTE n1[8];
	ULLONG nID,cPswd;
  	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,"输入密码");	
    	m[0]=0;
	   
	    
		k = OSEntryInWin(w2,1,2,6,m,0,0,1);
			cPswd = (inpswd(m)<<8);

		if(k==K_ESC) break;
		else if(k==K_ENTER){
		while(1){
		
		  
			w3 =  OSCreatSubWindow(15,34,90,44,1,1,"输入电量");
		
			   m1[0]=0;
			 
			    
         k = OSEntryInWin(w3,1,2,8,m1,0,0,1);		//总;
			if(k==K_ESC) break;
			else if(k==K_ENTER){	    
	     
		    a2bcd2(m1,n1);
		while(1){
			  	if(DLT645_Write(4,nID,0xC119,cPswd,n1,0x0A,3000,3)==0){
					OSMessageBox("设置电量","设置电量成功!","任意键返回...");
			}
				
					CloseSubWindow(w1);
				CloseSubWindow(w2);
					CloseSubWindow(w3);
					CloseSubWindow(w0);
				return;				
				}
					}
				}
				
			}
			}	
				CloseSubWindow(w1);
	CloseSubWindow(w2);
	CloseSubWindow(w3);
	CloseSubWindow(w0);					
		}		
				
	CloseSubWindow(w1);
//	CloseSubWindow(w2);
//	CloseSubWindow(w3);
	CloseSubWindow(w0);	
}

void SetPowercx485(ULLONG devID)//设置初校电量
{
	OS_WIN 	*w0,*w1;
	UBYTE s[20];
	
    
    UBYTE m[8];
    UBYTE m1[8];
   
	ULLONG nID,cPswd;
  	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){  	
	
    	m[0]='0';
	    m[1]='0';
	    m[2]='0';
	    m[3]='0';
	    m[4]='0';
	    m[5]='0';	    

			cPswd = (inpswd(m)<<8);


		
			   m1[0]=0;
			  m1[1]=128;
			  m1[2]=153;
		       m1[3]=153;
			  m1[4]=1;
			   m1[5]=16;
			   m1[6]=80;
			   m1[7]=229;
			  
			    
	
			  	if(DLT645_Write(4,nID,0xC119,cPswd,m1,0x0A,3000,3)==0){
					OSMessageBox("设置电量","设置电量成功!","任意键返回...");
		
					CloseSubWindow(w1);
		
					CloseSubWindow(w0);
				return;				
		
			}	
				CloseSubWindow(w1);

	CloseSubWindow(w0);					
		}		
				
	CloseSubWindow(w1);

	CloseSubWindow(w0);	
}
void SetPowercx485hz(ULLONG devID)//设置初校电量
{
	OS_WIN 	*w0,*w1;
	UBYTE s[20];
	
    
    UBYTE m[8];
    UBYTE m1[8];
   
	ULLONG nID,cPswd;
  	nID=0;
  	
     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){  	
	
    	m[0]='0';
	    m[1]='0';
	    m[2]='0';
	    m[3]='0';
	    m[4]='0';
	    m[5]='0';	    

			cPswd = (inpswd(m)<<8);


		
			   m1[0]=0;
			  m1[1]=153;
			  m1[2]=153;
		       m1[3]=153;
			  m1[4]=1;
			   m1[5]=16;
			   m1[6]=80;
			   m1[7]=229;
			  
			    
	
			  	if(DLT645_Write(4,nID,0xC119,cPswd,m1,0x0A,4000,3)==0){
					OSMessageBox("设置电量","设置电量成功!","任意键返回...");
		
					CloseSubWindow(w1);
		
					CloseSubWindow(w0);
				return;				
		
			}	
				CloseSubWindow(w1);

	CloseSubWindow(w0);					
		}		
				
	CloseSubWindow(w1);

	CloseSubWindow(w0);	
}

void SetMtID485(ULLONG devID)   //写电表表号
{
	OS_WIN *w0,*w1;
	OS_CALENDAR p;
	UBYTE s[20];
	ULLONG nID;
	

	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){  
		ID2bcd(nID,s);
		if(DLT645_Write485(4,devID,0xC032,s,6,1000,3)==0) {
			OSMessageBox("修改出厂编号","修改成功!","任意键返回...");
		}
	}
	CloseSubWindow(w1);
	CloseSubWindow(w0);
}

void setcolock(ULLONG devID)//写时钟频率
{
	OS_WIN 	*w0,*w1,*w2;
	UBYTE k,s[20];
   UBYTE m[8];
   UBYTE U[1];
     
     
   
   
	ULLONG nID;
	double x1,x2,x3,x4,x5;
	int c1;
	 
  	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,"输入时钟频率");	
    	m[0]=0;
	
		k = OSEntryInWin(w2,1,2,8,m,0,0,1);
	
		if(k==K_ESC) break;
		else if(k==K_ENTER){	
		x1=atof(m);
		x2=32768;
		 x3=(x1-x2)/x2*1000000000;
		if (x3<0)
		{x4=-x3/1000;
		x5=jinwu(x4);
        x5=x5/3.05;
        x5=jinwu(x5);
        
        x5=-x5+128;
       
        if (x5<-64){
        OSMessageBox("电表时钟频率","数据超过最小值!","任意键返回...");
        CloseSubWindow(w1);
					CloseSubWindow(w2);
				
					CloseSubWindow(w0);
				return;		
        }
       
	
		} 
		if (x3>0)
		{x4=x3/1000;
		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 setcolockau(ULLONG devID)//写时钟频率
{
	OS_WIN 	*w0,*w1,*w2;
	UBYTE k,s[20];
   UBYTE m[8];
   UBYTE U[1];
     
     
   
   
	ULLONG nID;
	double x1,x2,x3,x4,x5;
	int c1;
	 
  	nID=0;
  	
     sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	    w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	    //nID = DLT645_InputID();
	    nID=devID;
	    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,"输入时钟频率");	
    	m[0]=0;
	
		k = OSEntryInWin(w2,1,2,8,m,0,0,1);
	
		if(k==K_ESC) break;
		else if(k==K_ENTER){	
		x1=atof(m);
		x2=32768;
		 x3=(x1-x2)/x2*1000000000;
		if (x3<0)
		{x4=-x3/1000;
		x5=jinwu(x4);
        x5=x5/3.05;
        x5=jinwu(x5);
        
        x5=-x5+128;
       
        if (x5<-64){
        OSMessageBox("电表时钟频率","数据超过最小值!","任意键返回...");
        CloseSubWindow(w1);
					CloseSubWindow(w2);
				
					CloseSubWindow(w0);
				return;		
        }
       
	
		} 
		if (x3>0)
		{x4=x3/1000;

⌨️ 快捷键说明

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