开机界面:
void x2.onclick(){ gopage(1);}
void x1.onclick(){ gopage(4);}
void l2.ontimer(){ gopage(4);}
app.resetVA(); //开始数控电源,设置默认参数
start();
可以看到,在开机界面调用了app.resetVA()来开启数控电源,数控电源的控制算法都在appbase控件中。
l2控件的2.55秒延时后,在l2.ontimer事件中,页面跳转到主界面(第4界面)
上行处理以及数据刷新
辅助单片机,定时会通过串口传来 app.data("ADI|ADV|AD24"); 系统会自动调用appbase中的da方法,通过校准值,计算出实际电压电流,以及各个显示值:
oid da(str s){
//由串口cmd调用 app.data("ADI|ADV|AD24");
int ad24;
int adh;
int adl;
adi=explode_num(s,"|",0);
adv=explode_num(s,"|",1);
ad24=explode_num(s,"|",2);
//计算24V输入,
//----计算 电压电流值27K 2.7K分压 (ad24/4095=v/3.3)
v24=ad24*3300/4095;
//v24/2.7K=V/(27+2.7)
v24=v24*297/27;
adh=bind_get("X5V");
if (adh>0)vv=5000*adv/adh;
adl=bind_get("XLA");
adh=bind_get("XHA");
if((adh-adl)!=0) {va=1800*(adi-adl)/(adh-adl)+200;}
//---合成字符串,规则10VA一下,3位小数;10以上,2位小数,保证显示字符串含小数点5位
if (vv>10000){
sv=itos(vv,4,2);
}
else{
sv=itos(vv,4,3);
}
if (va>=1000){
sa=itos(va,4,3)+"A";
}
else{
sa=va+"mA";
}
//---后续处理
P=vv*va; //功率
mWh=P*3600;
mAh=va*3600;
datawork();
}
最后调用datawork()事件,通过页面继承datawork事件来完成各种显示的刷新
下行处理
当用户通过UI来操作电压后,系统调用:
void setV(int v){ //设定电压,单位mv
int d;
range(v,0,v24-3000);
bind_set("SDACV",v);
d=compDACV(v);
bind_set("DAV",d);
echo("[DAV:"+d+"]");
changbz=1;
}
app.setv(v); 来设置电压,可以看到函数内部,经过校准参数计算出DAC值,然后通过echo语句发送undefinedDAV:xxx]到辅助单片机,辅助单片机完成DAC的设置。电流的设置基本和电压一样;
总结
可以看到,处理了上行和下行,界面就可以非常随意,代码并不复杂,可以直接阅读。