开机界面:

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的设置。电流的设置基本和电压一样;

总结

可以看到,处理了上行和下行,界面就可以非常随意,代码并不复杂,可以直接阅读。