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

📄 js520a.c

📁 用于F3200掌机抄表设表
💻 C
📖 第 1 页 / 共 3 页
字号:
{
	OS_WIN 	*w0;
	UBYTE k;
	UBYTE d[4],c[3],s[20];

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(1){
		if(DLT645_Read(4,devID,0xC010,d,4,2000,3)<0) 	break;
		if(DLT645_Read(4,devID,0xC011,c,3,2000,3)<0) 	break;
		OSDrawInWin(w0,2,4,"电表日期",3,0);
		sprintf(s,"%02X年%02X月%02X日",d[3],d[2],d[1]);	OSDrawInWin(w0,8,18,s,3,0);
		OSDrawInWin(w0,2,36,"电表时间",3,0);
		sprintf(s,"%2X:%02X:%02X",c[2],c[1],c[0]);	OSDrawInWin(w0,8,50,s,3,0);
		OSDrawInWin(w0,2,100,"任意键返回...",3,0);	
		OSWaitKey();
		break;	
	}
	CloseSubWindow(w0);
}

void ViewStatus(ULLONG devID)
{
	OS_WIN 	*w0;
	UBYTE k;
	UBYTE d[6],s[20];

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(1){
		if(DLT645_Read(4,devID,0xC020,d,1,2000,3)<0) 	break;
		OSDrawInWin(w0,2,4,"电表状态: ",3,0);
		if(d[0]&1) OSDrawInWin(w0,8,18,"电池-异常",3,0);
		else OSDrawInWin(w0,8,18,"电池-正常",3,0);
		if(d[0]&2) OSDrawInWin(w0,8,30,"电表硬件-异常",3,0);
		else OSDrawInWin(w0,8,30,"电表硬件-正常",3,0);
		if(d[0]&4) OSDrawInWin(w0,8,42,"电表通讯-异常",3,0);
		else OSDrawInWin(w0,8,42,"电表通讯-正常",3,0);
		if(d[0]&8) OSDrawInWin(w0,8,42,"电表时钟-异常",3,0);
		else OSDrawInWin(w0,8,42,"电表时钟-正常",3,0);
		if(d[0]&0x10) OSDrawInWin(w0,8,54,"电能方向-反向",3,0);
		else OSDrawInWin(w0,8,54,"电能方向-正向",3,0);
		if(d[0]&0x20) OSDrawInWin(w0,8,66,"允许校时期",3,0);
		else OSDrawInWin(w0,8,66,"禁止校时期",3,0);
		if((d[0]&0xC0)==0) OSDrawInWin(w0,8,78,"当前费率-尖",3,0);
		else if((d[0]&0xC0)==0x40) OSDrawInWin(w0,8,78,"当前费率-峰",3,0);
		else if((d[0]&0xC0)==0x80) OSDrawInWin(w0,8,78,"当前费率-平",3,0);
		else OSDrawInWin(w0,8,78,"当前费率-谷",3,0);
		OSDrawInWin(w0,2,100,"任意键返回...",3,0);	
		OSWaitKey();
		break;	
	}
	CloseSubWindow(w0);
}

void ViewConstant(ULLONG devID)
{
	OS_WIN 	*w0;
	UBYTE k;
	UBYTE d[3],s[20];

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(1){
		if(DLT645_Read(4,devID,0xC030,d,3,2000,3)<0) 	break;
		OSDrawInWin(w0,2,4,"脉冲常数",3,0);
		sprintf(s,"%02X%02X%02X",d[2],d[1],d[0]);	OSDrawInWin(w0,8,18,s,3,0);
		OSDrawInWin(w0,2,100,"任意键返回...",3,0);	
		OSWaitKey();
		break;	
	}
	CloseSubWindow(w0);
}

void ViewID(ULLONG devID)
{
	OS_WIN 	*w0;
	UBYTE k;
	UBYTE d[8],c[8],s[20];

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(1){
		if(DLT645_Read(4,devID,0xC032,d,6,2000,3)<0) 	break;
		if(DLT645_Read(4,devID,0xC033,c,6,2000,3)<0) 	break;
		OSDrawInWin(w0,2,4,"出厂编号",3,0);
		sprintf(s,"%02X%02X%02X%02X%02X%02X",d[5],d[4],d[3],d[2],d[1],d[0]);	OSDrawInWin(w0,8,18,s,3,0);
		OSDrawInWin(w0,2,36,"局编号",3,0);
		sprintf(s,"%02X%02X%02X%02X%02X%02X",c[5],c[4],c[3],c[2],c[1],c[0]);	OSDrawInWin(w0,8,50,s,3,0);
		OSDrawInWin(w0,2,100,"任意键返回...",3,0);	
		OSWaitKey();
		break;	
	}
	CloseSubWindow(w0);
}

void ViewTarrif(ULLONG devID)
{
	OS_WIN 	*w0;
	UBYTE d[12][3],s[20],t[12][16];
	LONG l,i;
	ULONG sele;

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(1){
		l = DLT645_Read(4,devID,0xC33F,&d[0][0],38,2000,3);
		if(l<0) break;
		if((l<3)||(l>38)) {
			OSSureBox("抄收时段表","时段表无数据!");		//确认消息框
			break;
		}
		for(i=0;i<(l/3);i++) {
			sprintf(t[i],"%02X:%02X 费率%02X",d[i][2],d[i][1],d[i][0]);
		}		
		sele = 0;
		OSListInWin(w0,2,2,9,16,0,19,&sele,l/3,1,&t[0][0]);
		break;	
	}
	CloseSubWindow(w0);
}

void ViewStore(ULLONG devID)
{
	OS_WIN 	*w0;
	UBYTE k;
	UBYTE d[6][16],c[3],s[20];

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(1){
		if(DLT645_Read(4,devID,0xC117,d[5],2,1000,3)<0) 	break;
		sprintf(s,"自动抄表日: %02X日%02X时",d[5][1],d[5][0]);
		OSDrawInWin(w0,2,44,s,3,0);
		OSDrawInWin(w0,2,100,"任意键返回...",3,0);	
		OSWaitKey();
		break;	
	}
	CloseSubWindow(w0);
}


void ViewDisplay(ULLONG devID)
{
	OS_WIN 	*w0;
	UBYTE k;
	UBYTE d[6][16],c[3],s[20];

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(1){
		if(DLT645_Read(4,devID,0xC115,d[5],3,1000,3)<0) 	break;
		sprintf(s,"显示选择: %02X-%02X-%02X",d[5][0],d[5][1],d[5][2]);
		OSDrawInWin(w0,2,44,s,3,0);
		OSDrawInWin(w0,2,100,"任意键返回...",3,0);	
		OSWaitKey();
		break;	
	}
	CloseSubWindow(w0);
}

void ViewVolage(ULLONG devID)
{
	OS_WIN 	*w0;
	UBYTE k;
	UBYTE d[6][16],c[3],s[20];

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(1){
		if(DLT645_Read(4,devID,0xCFFF,d[5],3,1000,3)<0) 	break;
		sprintf(s,"温度: %d",d[5][0]);  OSDrawInWin(w0,2,44,s,3,0);
		sprintf(s,"电压: %02X-%02X",d[5][1],d[5][1]);  OSDrawInWin(w0,2,60,s,3,0);		
		OSDrawInWin(w0,2,100,"任意键返回...",3,0);	
		OSWaitKey();
		break;	
	}
	CloseSubWindow(w0);
}


//----------------------------------------------
void ViewMeter(void)
{
	OS_WIN 	*w0;
	UBYTE k;
	ULONG sele;
	ULLONG devID=0xAAAAAAAAAAAA,a;
	
	w0 = OSCreatSubWindow(0,0,128,126,1,1,"查看电表数据");
	while(1){
		k = OSMenuInWin(w0,2,1,19,9,&sele,12,1," 1.电量数据"," 2.历史电量数据"," 3.反向信息"," 4.编程信息"," 5.电表时间"," 6.电表状态"," 7.电表常数"," 8.电表编号"," 9.时段"," 10.抄表日"," 11.显示选择"," 12.电池电压及温度");
		if(k==K_ESC) break;
		else if(k==K_HYPHEN){
			a = DLT645_InputID();
			if(a<0x1000000000000) devID = a;			
		}
		else if(k==K_ENTER){
			switch(sele){
			case 0:	ViewPower(devID); 	break;
			case 1: ViewHistory(devID);	break;
			case 2:	ViewReverse(devID);	break;
			case 3:	ViewProgram(devID);	break;
			case 4: ViewTime(devID);	break;
			case 5:	ViewStatus(devID);	break;
			case 6:	ViewConstant(devID);break;
			case 7:	ViewID(devID);		break;
			case 8: ViewTarrif(devID);	break;
			case 9: ViewStore(devID);	break;
			case 10: ViewDisplay(devID);	break;
			case 11: ViewVolage(devID);	break;
			default:	break;			
			}
		}		
	}
	CloseSubWindow(w0);
}

//--------------------------------------------------------------
//--------------------------------------------------------------
void SetIniID(ULLONG devID)
{
	OS_WIN 	*w0;
	UBYTE s[20];

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	if(DLT645_WriteID(4,devID,1000,3)==0){
		OSMessageBox("设置电表编号","设置成功!","任意键返回...");
	}
	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);
	}
	return a;
}

void SetPassword(ULLONG devID, ULONG cPswd, ULONG pPswd)
{
	OS_WIN 	*w0;
	UBYTE s[20],d[8],c[8],k;
	ULONG nPswd;
	UBYTE a = 1;

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(a){
		OSDrawInWin(w0,2,4,"输入新清零密码",3,0);		
		d[0] = 0;
		k = OSEntryInWin(w0,14,20,6,d,0,0,1);
		if(k==K_ESC) break;
		else if(k==K_ENTER){
			while(1){
				c[0] = 0;
				OSDrawInWin(w0,2,40,"输入新编程密码",3,0);
				k = OSEntryInWin(w0,14,56,6,c,0,0,1);
				if(k==K_ESC) break;
				else if(k==K_ENTER){
					nPswd = (inpswd(d)<<8);
					if(DLT645_WritePswd(4,devID,cPswd,nPswd,1000,3)<0) break;
					ClrPswd = nPswd;
					nPswd = (inpswd(c)<<8)+1;
					if(DLT645_WritePswd(4,devID,pPswd,nPswd,1000,3)<0) break;
					PgmPswd = nPswd;
					OSMessageBox("修改电表密码","修改成功!","任意键返回...");
					a = 0;
					break;
				}			
			}			
		}
	}
	CloseSubWindow(w0);
}


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

void SetPower(ULLONG devID, ULONG cPswd)
{
	OS_WIN 	*w0;
	UBYTE k,d[9],s[20];
	ULONG a;
	
	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	while(1){
		OSDrawInWin(w0,2,4,"输入正向电量",3,0);
		OSDrawInWin(w0,2,18,"总:",3,0);
		OSDrawInWin(w0,2,30,"峰:",3,0);
		OSDrawInWin(w0,2,42,"平:",3,0);
		OSDrawInWin(w0,2,54,"谷:",3,0);
		OSDrawInWin(w0,2,80,"输入反向电量",3,0);
		OSDrawInWin(w0,2,92,"总:",3,0);
		d[0]=0;
		k = OSEntryInWin(w0,24,18,9,d,0,0,0);		//总
		if(k==K_ESC) break;
		else if(k==K_ENTER){
			a2bcd(d,s);
			while(1){
				d[0] = 0;
				k = OSEntryInWin(w0,24,30,9,d,0,0,0);	//峰
				if(k==K_ESC) break;
				else if(k==K_ENTER){
					a2bcd(d,&s[4]);
					while(1){
						d[0] = 0;
						k = OSEntryInWin(w0,24,42,9,d,0,0,0);	//平
						if(k==K_ESC) break;
						else if(k==K_ENTER){
							a2bcd(d,&s[8]);
							while(1){
								d[0]=0;
								k = OSEntryInWin(w0,24,54,9,d,0,0,0);	//谷
								if(k==K_ESC) break;
								else if(k==K_ENTER){
									a2bcd(d,&s[12]);
									while(1){
										d[0] = 0;
										k = OSEntryInWin(w0,24,92,9,d,0,0,0);	//反
										if(k==K_ESC) break;
										else if(k==K_ENTER){
											a2bcd(d,&s[16]);
											if(DLT645_Write(4,devID,0xC119,cPswd,s,20,3000,3)==0){
												OSMessageBox("电表清零","清零成功!","任意键返回...");
											}
											CloseSubWindow(w0);
											return;				
										}
									}									
								}
							}
						}
					}
				}
			}						
		}		
	}
	CloseSubWindow(w0);	
}

void SetTime(ULLONG devID, ULONG pPswd)
{
	OS_WIN *w0;
	OS_CALENDAR p;
	UBYTE s[20];
	

	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	OSGetCalendar(&p);
	s[0] = 0x00; s[1] = hex2bcd(p.day); s[2] = hex2bcd(p.month); s[3] = hex2bcd((UBYTE)(p.year-2000));	
	if(DLT645_Write(4,devID,0xC010,pPswd,s,4,1000,3)==0) {
		s[0] = hex2bcd(p.second); s[1] = hex2bcd(p.minute); s[2] = hex2bcd((UBYTE)p.hour);
		if(DLT645_Write(4,devID,0xC011,pPswd,s,4,1000,3)==0) {
			OSMessageBox("修改电表时钟","修改成功!","任意键返回...");
		}
	}
	CloseSubWindow(w0);
}

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

ULLONG SetDevID(ULLONG devID, ULONG pPswd)
{
	OS_WIN *w0;
	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();
	if(nID<0x1000000000000){  
		ID2bcd(nID,s);
		if(DLT645_Write(4,devID,0xC033,pPswd,s,6,1000,3)==0) {
			OSMessageBox("修改局编号","修改成功!","任意键返回...");
		}
	}
	CloseSubWindow(w0);
	return nID;
}

void SetDisplay(ULLONG devID, ULONG pPswd)
{
	OS_WIN *w0;
	OS_CALENDAR p;
	UBYTE s[20],d[8],k,i;
	ULLONG nID;
	
	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);
	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);
	OSDrawInWin(w0,2,4,"输入选择[D3D2D1]",3,0);
	s[0]=0;
	k = OSEntryInWin(w0,8,22,6,s,0,0,1);		//输入
	if(k==K_ENTER){
		for(i=0;i<6;i++) {
			if(s[i]>0x40) s[i]-=7;	//十六进制
		}
		d[0] = (s[0]<<4)+(s[1]&0xF);
		d[1] = (s[2]<<4)+(s[3]&0xF);
		d[2] = (s[4]<<4)+(s[5]&0xF);
		if(DLT645_Write(4,devID,0xC115,pPswd,d,3,1000,3)==0) {
			OSMessageBox("修改显示选择","修改成功!","任意键返回...");
		}
	}
	CloseSubWindow(w0);
}

⌨️ 快捷键说明

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