📄 js520a.c
字号:
{
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 + -