• 流量校准仪开发日志-2017-10-24


    今晚的内容:

    把校准部分搞定

    把参数存储调通

    让电机自己启动开始动作

    今天实际完成的工作量:

    写了校准函数

     1 /****************************************
     2 
     3 input: 
     4 输入从触摸屏来的指令
     5 
     6 来确定下一步的动作
     7 out:
     8 压力参数校准
     9 ****************************************/
    10 void PressureCalibration(void)
    11 {
    12                 //GetPressureZero();
    13             //printf("this is压力校准");
    14             if( (ScreenScan()==0xeeee))//收到按键指令
    15             {
    16                     if(g_u16TouchKeyAddress==0x0052)
    17                     {
    18                             switch(g_u16TouchKeyValue)
    19                         {
    20                                 case 0x0001://300
    21                                         PressureCaliTureValue[0]=g_fFinalPressure;
    22                                         PressureCaliCorrectPara[0]=300-PressureCaliTureValue[0];
    23                                         printf("压力设置 300:%f
    ",PressureCaliTureValue[0]);        
    24                                         break;
    25                                 case 0x0002://240
    26                                         PressureCaliTureValue[1]=g_fFinalPressure;    
    27                                         PressureCaliCorrectPara[1]=240-PressureCaliTureValue[1];    
    28                                         printf("压力设置  240:%f
    ",PressureCaliTureValue[1]);                    
    29                                         break;
    30                                 case 0x0003://180
    31                                         PressureCaliTureValue[2]=g_fFinalPressure;
    32                                         PressureCaliCorrectPara[2]=180-PressureCaliTureValue[2];    
    33                                         printf("t压力设置 180:%f
    ",PressureCaliTureValue[2]);                            
    34                                         break;        
    35                                 case 0x0004://120
    36                                         PressureCaliTureValue[3]=g_fFinalPressure;    
    37                                         PressureCaliCorrectPara[3]=120-PressureCaliTureValue[3];        
    38                                         printf("压力设置  120:%f
    ",PressureCaliTureValue[3]);                                
    39                                         break;    
    40                                 case 0x0005://60
    41                                         PressureCaliTureValue[4]=g_fFinalPressure;        
    42                                         PressureCaliCorrectPara[4]=60-PressureCaliTureValue[4];    
    43                                         printf("压力设置  60:%f
    ",PressureCaliTureValue[4]);                                
    44                                         break;        
    45                                 
    46 
    47                                         break;                            
    48                                 default:
    49                                         break;    
    50                             }
    51                     
    52                 }
    53                 if(g_u16TouchKeyAddress==0x0050)
    54                 {
    55                         g_u16PageNum==u16ContextPageSetSelect;
    56                 }
    57             }
    58             
    59 }

    写了与校准函数配套的最终压力输出函数

     1 /****************************************
     2 
     3 input: 
     4 输入从触摸屏来的指令
     5 
     6 来确定下一步的动作
     7 out:
     8     
     9 压力计算
    10 
    11 首先修正值的计算公式如下
    12 PressureCaliCorrectPara= 300-NowPress
    13 其次
    14 在最终压力输出函数中
    15 通过   压力加上两个端点的修正系数的平均值得出最终压力
    16 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[4]+PressureCaliCorrectPara[3])/2;
    17 ****************************************/
    18 void GetFinalPressure(void)
    19 {
    20         float l_fNowPressure;
    21         l_fNowPressure=g_fAfter2Pressure-g_fPressureZero;
    22         if(l_fNowPressure==0)
    23         {
    24                 g_fFinalPressure=0;
    25         }
    26         
    27         if((l_fNowPressure>0)&(l_fNowPressure<1))
    28         {
    29                 g_fFinalPressure=0;
    30         }        
    31         
    32         if(((l_fNowPressure>0)&(l_fNowPressure<60))|(l_fNowPressure==60))
    33         {
    34                 g_fFinalPressure=l_fNowPressure+PressureCaliCorrectPara[4];
    35         }
    36         if( ((l_fNowPressure>60)&(l_fNowPressure<120))|(l_fNowPressure==120) )
    37         {
    38                 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[4]+PressureCaliCorrectPara[3])/2;
    39         }
    40         if( ((l_fNowPressure>120)&(l_fNowPressure<180))|(l_fNowPressure==180) )
    41         {
    42                 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[3]+PressureCaliCorrectPara[2])/2;
    43         }
    44         if( ((l_fNowPressure>180)&(l_fNowPressure<240))|(l_fNowPressure==240) )
    45         {
    46                 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[2]+PressureCaliCorrectPara[1])/2;
    47         }        
    48         if( ((l_fNowPressure>240)&(l_fNowPressure<300))|(l_fNowPressure==300) )
    49         {
    50                 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[1]+PressureCaliCorrectPara[0])/2;
    51         }            
    52                 if( l_fNowPressure>300 )
    53         {
    54                 g_fFinalPressure=l_fNowPressure+(PressureCaliCorrectPara[1]+PressureCaliCorrectPara[0])/2;
    55         }        
    56 }

    上面的函数执行的是简单的逻辑  即为:分段切割  修正压力值

    写了一个求零点的函数

     1 /****************************************
     2 
     3 input: 
     4 输入从触摸屏来的指令
     5 
     6 来确定下一步的动作
     7 out:
     8     
     9 计算零点
    10 
    11 ****************************************/
    12 void GetPressureZero(void)
    13 {
    14         float l_press;
    15         // 控制电磁阀撒气  回到零点
    16         
    17         delay_ms(1000);//wait 1s
    18         
    19         g_fPressureZero=MS561101BA_readdata();
    20         //g_fPressureZero=(u16)l_press;
    21         printf("this is get zero:%f
    ",g_fPressureZero);
    22         
    23 }

    这个求零点函数  主要用在当电机的电磁阀打开时

    自己检测到是0点状态

    然后自己求偏移量  自动校零

    总结:

    注意

    迪文屏的发送函数

    有些还没有改过来

    发现的问题:

    DWIN_sprintf这个函数现在不能正常使用

    无法正常打印浮点数据

    如上的程序

    LCD显示:259.9

    如上的显示为285.3

    我看了一下8040里面的程序   好像也没有使用   只是有些函数中定义了这个用法 

    但是DWIN_sprintf没有使用他来打印浮点数据

    我现在使用的是

    DisplayOneWord(0x0058,g_fFinalPressure*10);

    这样向上传输据

    还挺好用的

    注意  我尝试过 用

    DisplayDoubleWord(0x0058,g_fFinalPressure*10);

    是不可以的

    原因如下

    还有一个问题

    昨天的时候

    向开机自检界面0x0200传输据传不上去

    今天一来就OK了

    配置如上图

    我猜是应该没有把屏幕重新上电导致的吧  重新上电就好了  (内部寄存器重置了)

    调试总结:

    每天都要定计划

    定好计划再去敲打码

    调试

    这样才能高效

    计划要详细一些

    有的时候盲目的调试  好像着魔了一样

  • 相关阅读:
    软件工程最后一次作业
    软件工程第四次作业
    软件工程第三次作业
    软件工程第一次作业
    软件工程第二次作业
    软件工程第一次作业
    2020年最后一次软工作业
    2020年第四次软工作业(第二次结对作业)
    2020年第三次软工作业(第一次结对作业)
    2020年第二次软工作业
  • 原文地址:https://www.cnblogs.com/qdrs/p/7726348.html
Copyright © 2020-2023  润新知