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

📄 js520a.psc

📁 用于F3200掌机抄表设表
💻 PSC
📖 第 1 页 / 共 3 页
字号:
			}					}	}	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== 0x1B ) break;		else if(k== 0x0D ){			a2bcd(d,s);			while(1){				d[0] = 0;				k = OSEntryInWin(w0,24,30,9,d,0,0,0);	 				if(k== 0x1B ) break;				else if(k== 0x0D ){					a2bcd(d,&s[4]);					while(1){						d[0] = 0;						k = OSEntryInWin(w0,24,42,9,d,0,0,0);	 						if(k== 0x1B ) break;						else if(k== 0x0D ){							a2bcd(d,&s[8]);							while(1){								d[0]=0;								k = OSEntryInWin(w0,24,54,9,d,0,0,0);	 								if(k== 0x1B ) break;								else if(k== 0x0D ){									a2bcd(d,&s[12]);									while(1){										d[0] = 0;										k = OSEntryInWin(w0,24,92,9,d,0,0,0);	 										if(k== 0x1B ) break;										else if(k== 0x0D ){											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== 0x0D ){		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);}void SetTarrif(ULLONG devID, ULONG pPswd){	OS_WIN *w0,*w1;	OS_CALENDAR p;	UBYTE s[20],k,i,t[12][20];	ULLONG nID;	ULONG sele;		sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);	sele = 0;	while(1){		for(i=0;i<12;i++) {			sprintf(t[i],"%02d--%02X:%02X 费率%02X",i+1,tr[i][2],tr[i][1],tr[i][0]);		}						k = OSListInWin(w0,2,2,9,20,0,19,&sele,12,1,&t[0][0]);		if(k== 0x1B ) break;		else if(k== 0x0D ) {					for(i=0;i<12;i++){				if(tr[i][0] > 0x04){ break; }			}			if(DLT645_Write(4,devID,0xC33F,pPswd,&tr[0][0],i*3,2000,3)==0) {				OSMessageBox("修改显示选择","修改成功!","任意键返回...");			}				}		else if(k== 0x09 ){			w1 = OSCreatSubWindow(8,32,100,64,1,1,"修改时段表");			sprintf(s,"输入时段%d:",sele+1);			OSDrawInWin(w1,2,4,s,3,0);			OSDrawInWin(w1,2,16,"[时:分 费率]",3,0);			s[0]=0;			k = OSEntryInWin(w1,2,32,6,s,0,0,1);		 			if(k== 0x0D ){				tr[sele][2] = (s[0]<<4)+(s[1]&0xF);				tr[sele][1] = (s[2]<<4)+(s[3]&0xF);				tr[sele][0] = (s[4]<<4)+(s[5]&0xF);			}										CloseSubWindow(w1);		}			}	CloseSubWindow(w0);}void SetStore(ULLONG devID,ULONG pPswd){	OS_WIN *w0;	UBYTE k,d[8],s[20];	ULLONG nID;	sprintf(s," ID [%04X%08X]",(ULONG)(devID>>32),(ULONG)devID);	w0 = OSCreatSubWindow(0,0,128,128,1,1,s);	OSDrawInWin(w0,2,14,"请输入抄表日:",3,0);	OSDrawInWin(w0,24,34,"[日:时]",3,0);	d[0]=0;	k = OSEntryInWin(w0,26,50,4,d,0,0,1);			if(k== 0x0D ){		s[1] = (d[0]<<4)+(d[1]&0xF);		s[0] = (d[2]<<4)+(d[3]&0xF);		if(DLT645_Write(4,devID,0xC117,pPswd,s,2,1000,3)==0) {			OSMessageBox("修改抄表日","修改成功!","任意键返回...");		}	}	CloseSubWindow(w0);}void ReadPswd(ULLONG devID){	OS_WIN 	*w0;	UBYTE k;	UBYTE d[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,0xC1EE,d,12,1000,3)<0) 	break;		sprintf(s,"清零密码: %02X%02X%02X-%02X",d[3],d[2],d[1],d[0]);		OSDrawInWin(w0,2,30,s,3,0);		sprintf(s,"编程密码: %02X%02X%02X-%02X",d[7],d[6],d[5],d[4]);				OSDrawInWin(w0,2,44,s,3,0);		OSDrawInWin(w0,2,100,"任意键返回...",3,0);			OSWaitKey();		break;		}	CloseSubWindow(w0);}void ReadEE(ULLONG devID){	OS_WIN 	*w0;	UBYTE k;	UBYTE d[16],c[3],s[20];	UWORD addr;	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);				d[0] = 0;		k = OSEntryInWin(w0,14,20,6,d,0,0,1);		if(k== 0x1B ) break;		else if(k== 0x0D ){			addr = (UWORD)atol(d);			addr = (addr&0xFF) + 0xFF00;		}		if(DLT645_Read(4,devID,addr,d,18,1000,3)<0) 	break;		sprintf(s,"00: %02X%02X%02X%02X",d[0],d[1],d[2],d[3]);		OSDrawInWin(w0,2,12,s,3,0);		sprintf(s,"04: %02X%02X%02X%02X",d[4],d[5],d[6],d[7]);		OSDrawInWin(w0,2,24,s,3,0);		sprintf(s,"08: %02X%02X%02X%02X",d[8],d[9],d[10],d[11]);		OSDrawInWin(w0,2,36,s,3,0);		sprintf(s,"0C: %02X%02X%02X%02X",d[12],d[13],d[14],d[15]);		OSDrawInWin(w0,2,48,s,3,0);		OSDrawInWin(w0,2,100,"任意键返回...",3,0);			OSWaitKey();		break;		}	CloseSubWindow(w0);}void ClrAll(){	OS_WIN 	*w0;	UBYTE s[64],r[32],k;	OS_CALENDAR p;	UWORD d[8] ={ 0x0000,0x0000,0x0FFF,0x0FFF,0x0000,0x0000,0x0FFF,0x0FFF };	w0 = OSCreatSubWindow(0,0,128,128,1,1,"电表初始化");	s[7] = 0x00;	s[8] = 0x56;	s[9] = 0x34;	s[10] = 0x12;	s[11] = 0x01;	s[12] = 0x56;	s[13] = 0x34;	s[14] = 0x12;	sprintf(r,"密码  : %02X%02X%02X%02X",s[10],s[9],s[8],s[7]);	OSDrawInWin(w0,2,36,r,3,0);	sprintf(r,"        %02X%02X%02X%02X",s[14],s[13],s[12],s[11]);	OSDrawInWin(w0,2,48,r,3,0);	s[15] = 0x00;	s[16] = 0x01;	 	sprintf(r,"抄表日: %02X:%02X",s[16],s[15]);	OSDrawInWin(w0,2,8,r,3,0);		s[17] = 0x10;	s[18] = 0x00;	s[19] = 0x7F;	sprintf(r,"循显  : %02X%02X%02X",s[17],s[18],s[19]);	OSDrawInWin(w0,2,22,r,3,0);	 	s[20] = 0x06;	s[21] = 0x02;	s[22] = 0x00;	s[23] = 0x07;	s[24] = 0x04;	s[25] = 0x00;	s[26] = 0x22;	sprintf(r,"时段数: %02X",s[20]/3);	OSDrawInWin(w0,2,64,r,3,0);	sprintf(r,"%02X:%02X 费率%02X",s[23],s[22],s[21]);	OSDrawInWin(w0,12,76,r,3,0);	sprintf(r,"%02X:%02X 费率%02X",s[26],s[25],s[24]);	OSDrawInWin(w0,12,88,r,3,0);	while(1){		OSDrawInWin(w0,2,100,"ECS退出,其它发送",3,0);		OSKeyBufClr();		k = OSWaitKey();		if(k== 0x1B ) break;		OSGetCalendar(&p);		s[0] = hex2bcd(p.second);		s[1] = hex2bcd(p.minute);		s[2] = hex2bcd(p.hour);		s[3] = 0;		 		s[4] = hex2bcd(p.day);		s[5] = hex2bcd(p.month);		s[6] = hex2bcd(p.year%100);		DLT645(4,0x999999999999,0xFE,s,27,r,0,0);			BuzzPlay(12,120,5);	}	CloseSubWindow(w0);			} void SetMeter(void){	OS_WIN 	*w0;	UBYTE k;	ULONG sele;	ULLONG a;		w0 = OSCreatSubWindow(0,0,128,126,1,1,"设置电表数据");	while(1){		k = OSMenuInWin(w0,2,1,19,9,&sele,13,1," 1.设置初始编号"," 2.设置密码"," 3.广播校时"," 4.电表清零"," 5.设置时间"," 6.设置出厂表号"," 7.设置局编号"," 8.显示选择"," 9.设置时段表"," 10.设置抄表日","11. 读密码","12. 读EE"," 13.电表初始化");		if(k== 0x1B ) break;		else if(k== 0x09 ){			a = DLT645_InputID();			if(a<0x1000000000000) devID = a;			sele = DLT645_InputPswd(0);				if(sele!=0xFFFFFFFF) ClrPswd = (sele<<8);			sele = DLT645_InputPswd(1);				if(sele!=0xFFFFFFFF) PgmPswd = (sele<<8)+1;		}		else if(k== 0x0D ){			switch(sele){			case 0:	SetIniID(devID); 	break;			case 1: SetPassword(devID,ClrPswd,PgmPswd);	break;			case 2:	CorrectTime();	break;			case 3:	SetPower(devID,ClrPswd);	break;			case 4: SetTime(devID,PgmPswd);		break;			case 5:	SetMtID(devID,PgmPswd);		break;			case 6:	devID = SetDevID(devID,PgmPswd);	break;			case 7:	SetDisplay(devID,PgmPswd);	break;			case 8: SetTarrif(devID,PgmPswd);	break;			case 9: SetStore(devID,PgmPswd);	break;			case 10: ReadPswd(devID);			break;			case 11: ReadEE(devID);			break;			case 12: ClrAll();			break;			default:	break;						}		}			}	CloseSubWindow(w0);			}  void ComSele(void){	OS_WIN 	*w0;	UBYTE k;	ULONG sele;		w0 = OSCreatSubWindow(20,60,88,46,1,1,"选择串口");		if(Global_ComNum==4) sele = 1;	else sele = 0;	k = OSMenuInWin(w0,4,4,12,2,&sele,2,1,"电力红外接口","RS485接口");	if(k== 0x0D ){		if(sele==0) Global_ComNum = 1;		 		else if(sele==1) Global_ComNum = 4;	 		else Global_ComNum = 1;		OSComIni(Global_ComNum,1200,1,0,1,8);	}	CloseSubWindow(w0);			}  void ReadMeter(void){	OS_WIN 	*w0;	OS_DBF *rd;	OS_FIELD *id,*rflag,*rtime,*rdata;	OS_CALENDAR p;	FIELD fld,fld1;	UBYTE k,d[40];	ULONG sele;	ULLONG devid = 0xAAAAAAAAAAAA;		w0 = OSCreatSubWindow(0,0,128,128,1,1,"日常抄表");		OSDrawInWin(w0,16,32,"正在分析数据...",3,0);	rd = (OS_DBF*)OSDBFOpen(0,0,"read.dbf");	if(rd==0){				OSMessageBox("打开数据库","打开失败!" ,"任意键返回...");		CloseSubWindow(w0);			return;	}	id = OSDBFFieldSearch(rd,"METERID");	if(id==0) {		OSMessageBox("打开数据库","数据库字段错!" ,"任意键返回...");		OSDBFClose(rd);		CloseSubWindow(w0);			return;	}	rflag = OSDBFFieldSearch(rd,"RFLAG");	if(rflag==0) {		OSMessageBox("打开数据库","数据库字段错!" ,"任意键返回...");		OSDBFFieldFree(id);		OSDBFClose(rd);		CloseSubWindow(w0);			return;	}	rtime = OSDBFFieldSearch(rd,"RTIME");	if(rtime==0) {		OSMessageBox("打开数据库","数据库字段错!" ,"任意键返回...");		OSDBFFieldFree(rflag);		OSDBFFieldFree(id);		OSDBFClose(rd);		CloseSubWindow(w0);			return;	}	rdata = OSDBFFieldSearch(rd,"RDATA");	if(rdata==0) {		OSMessageBox("打开数据库","数据库字段错!" ,"任意键返回...");		OSDBFFieldFree(rtime);		OSDBFFieldFree(rflag);		OSDBFFieldFree(id);		OSDBFClose(rd);		CloseSubWindow(w0);			return;	}	while(1){				k = OSMessageBox("抄表","请对准要抄收的电表." ,"ENTER键抄表...");		if(k== 0x0D ){			devid = 0xAAAAAAAAAAAA;			if(DLT645_Read(4,devid,0xC033,d,6,1000,3)<0){				OSMessageBox("数据抄收","读回电表编号失败!","任意键继续...");				continue;			}			devid = (ULLONG)d[0]+((ULLONG)d[1]<<8)+((ULLONG)d[2]<<16)+((ULLONG)d[3]<<24)+((ULLONG)d[4]<<32)+((ULLONG)d[5]<<40);			for(k=0;k<250;k++) fld1.C.data[k] = 0xFF;				if(DLT645_Read(4,devid,0x901F,d,16,1000,3)<0) continue;			bcd2ascii(d,fld1.C.data,16);			if(DLT645_Read(4,devid,0x9020,d,4,1000,3)<0) continue;									bcd2ascii(d,&fld1.C.data[32],4);			if(DLT645_Read(4,devid,0xB020,d,4,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[40],4);			if(DLT645_Read(4,devid,0xB021,d,3,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[48],3);			if(DLT645_Read(4,devid,0xB210,d,4,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[54],4);			if(DLT645_Read(4,devid,0xB212,d,2,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[62],2);			if(DLT645_Read(4,devid,0xC010,d,4,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[66],4);			if(DLT645_Read(4,devid,0xC011,d,3,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[74],3);			if(DLT645_Read(4,devid,0xC020,d,1,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[80],1);			if(DLT645_Read(4,devid,0xC030,d,3,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[82],3);			if(DLT645_Read(4,devid,0xC032,d,6,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[88],6);			if(DLT645_Read(4,devid,0xC117,d,2,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[100],2);						if(DLT645_Read(4,devid,0xC33F,d,36,1000,3)<0) continue;			bcd2ascii(d,&fld1.C.data[104],36);			OSDrawInWin(w0,16,32,"抄表完成,正在存贮...",3,0);			 			sele = 0;			while(1){				if(OSDBFFieldRead(rd,id,sele,&fld)==0){					if(fld.N.data == devid){ 		 						fld.C.data[0] = '1';						OSDBFFieldWrite(rd,rflag,sele,&fld);												OSGetCalendar(&p);		 						fld.T.year = p.year;						fld.T.month = p.month;						fld.T.day = p.day;						fld.T.week = p.week;						fld.T.hour = p.hour;						fld.T.minute = p.minute;						fld.T.second = p.second;						OSDBFFieldWrite(rd,rtime,sele,&fld);						OSDBFFieldWrite(rd,rdata,sele,&fld1);						OSMessageBox("数据抄收","抄收成功!","任意键继续...");						break;					}					else sele++;		 				}					else{		 					if(OSDBFRecordAdd(rd)==0){						fld.N.data = devid;												OSDBFFieldWrite(rd,id,sele,&fld);						fld.C.data[0] = '1';						OSDBFFieldWrite(rd,rflag,sele,&fld);						OSGetCalendar(&p);		 						fld.T.year = p.year;						fld.T.month = p.month;						fld.T.day = p.day;						fld.T.week = p.week;						fld.T.hour = p.hour;						fld.T.minute = p.minute;						fld.T.second = p.second;						OSDBFFieldWrite(rd,rtime,sele,&fld);						OSDBFFieldWrite(rd,rdata,sele,&fld1);						OSMessageBox("数据抄收","抄收成功!","任意键继续...");						break;					}					else {						OSMessageBox("数据抄收","磁盘已满!","任意键返回...");					}				}							}																	}		else break;	}		OSDBFFieldFree(rdata);	OSDBFFieldFree(rtime);	OSDBFFieldFree(rflag);	OSDBFFieldFree(id);	OSDBFClose(rd);	CloseSubWindow(w0);	}  void ReadHistory(void){}   int main(void){ 	OS_WIN 	*wnd_Main;	UBYTE	k;	LONG sele;	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;	OSLCDClearPanel(0);		wnd_Main = OSCreatSubWindow(8,16,110,84,1,1,"江苏DDSF[V1.00]");	 	OSComIni(Global_ComNum,1200,1,0,1,8);	while(1){		k = OSMenuInWin(wnd_Main,2,2,16,5,&sele,5,1,"[1]日常抄表","[2]查看电表数据","[3]设置电表数据","[4]串口选择","[5]返回系统");		if(k== 0x0D ){			switch(sele){			case 0: ReadMeter(); break;			case 1: ViewMeter(); break;			case 2:	SetMeter();	break;			case 3: ComSele();	break;			case 4: OSExit(); 	break;			default:	break;			}		}	}	CloseSubWindow(wnd_Main);	}						

⌨️ 快捷键说明

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