📄 js520a.psc
字号:
} } } 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 + -