⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 canbus.c

📁 新能源燃料电池小车系统
💻 C
📖 第 1 页 / 共 3 页
字号:
      CAN1TXDSR1 = MsgSdCANFCE[tempIndex].data[1];
      CAN1TXDSR2 = MsgSdCANFCE[tempIndex].data[2];
      CAN1TXDSR3 = MsgSdCANFCE[tempIndex].data[3];                 
      CAN1TXDSR4 = MsgSdCANFCE[tempIndex].data[4];
      CAN1TXDSR5 = MsgSdCANFCE[tempIndex].data[5];
      CAN1TXDSR6 = MsgSdCANFCE[tempIndex].data[6];
      CAN1TXDSR7 = MsgSdCANFCE[tempIndex].data[7];                  //LOAD data

      CAN1TXDLR  = MsgSdCANFCE[tempIndex].length;                   //set data length 8bytes
      CAN1TXTBPR = CAN1TBSEL;                                  //config proprity
      CAN1TFLG   = CAN1TBSEL;  
    }
  
  
  }
    
 
 void CANFCE_DownLoad(CAN_Message temp)
      {
      unsigned char  index,dataindex;
      CAN_ID i,j; 
      j=temp.ID;
      for(index=0;index<CANFCE_RXD;index++)
        { 
         i=MsgRdCANFCE[index].ID;
         if((i.IDBYTES.ID0==j.IDBYTES.ID0)&&(i.IDBYTES.ID1==(j.IDBYTES.ID1&0xE0)))  //check the first 11bits
          {//if the corresponding buffer is found begin downloading
            for(dataindex=0;dataindex<8;dataindex++ )MsgRdCANFCE[index].data[dataindex]= temp.data[dataindex]; 
            if(index==FCSCmd){
              TaskFCECmd=1;
             //FCECmdDeal();       //FCE CAN cmd deal routine
             //TaskFCECmd=0;   
            }
            else						 {CVmin=MsgRdCANFCE[M1Msg].data[1]*256;
            									CVmin+= MsgRdCANFCE[M1Msg].data[0];
                              CVmax=MsgRdCANFCE[M1Msg].data[4]*256;
                              CVmax+= MsgRdCANFCE[M1Msg].data[3];
                              flgErrCANFCE=flagNormal;
                              for(dataindex=1;dataindex<4;dataindex++ )
                                  {unsigned int tempDateMin,tempDateMax;
                                    tempDateMin=MsgRdCANFCE[dataindex].data[1]*256;
                                    tempDateMin+=MsgRdCANFCE[dataindex].data[0];
                                    tempDateMax=MsgRdCANFCE[dataindex].data[4]*256;
                                    tempDateMax+=MsgRdCANFCE[dataindex].data[3];
                                    if(CVmin>tempDateMin)CVmin=tempDateMin;
                                    if(CVmax>tempDateMax)CVmax=tempDateMax;
                              		}
            
                              }
            if(index==M1Msg)      {CMV1= temp.data[7]*256;CMV1+= temp.data[6];}
            else if(index==M2Msg) {CMV2= temp.data[7]*256;CMV2+=temp.data[6];}
            else if(index==M3Msg) {CMV3= temp.data[7]*256;CMV3+= temp.data[6];}
            else if(index==M4Msg) {CMV4= temp.data[7]*256;CMV4+= temp.data[6];}
            
            break; 
          }      
        }
      }
   
    void CANVMS_Load(void)
      {  volatile unsigned int tempDate;
      	 unsigned char FCEContStatus=0X55;													 //stands for contactor state
        /**************_____FCE2VMSA______************/
        tempDate=PPar/15;																													  // |\____change PPar resolution 0.001kW to 0.015kW
        MsgSdCANVMS[FCE2VMSA].data[0]= (unsigned char)(tempDate&0x00FF);            // | ____calculate the PPar to send
        MsgSdCANVMS[FCE2VMSA].data[1]= (unsigned char)(tempDate>>8);                // |/   
        tempDate=Ist/4;																									            // |\____change Ist resolution from 0.1A to 0.4A
        MsgSdCANVMS[FCE2VMSA].data[2]= (unsigned char)(tempDate&0x00FF);            // | ____calculate the current output tosend
        MsgSdCANVMS[FCE2VMSA].data[3]= (unsigned char)(tempDate>>8);                // |/   
        
        
        if(PLmt>PLmtPatch)tempDate=PLmt-PLmtPatch;																	//compensate PLmt for send to VMS based on safty factors
        else              tempDate=0;
        //if(PLmt>(Pst+1000))tempDate=Pst+1000;																				  //limit the step value no more than 1000W
        if(PLmt>5000)tempDate=5000;																			//limit the gross output power no more than 5700W
        tempDate=tempDate/60;	 
        //tempDate=1000/60;                                                     // |\____change PLmt resolution from 0.001kW to 0.06kW 
        MsgSdCANVMS[FCE2VMSA].data[4]= (unsigned char)(tempDate&0x00FF);            // | ____calculate the PLmt to send
        MsgSdCANVMS[FCE2VMSA].data[5]= (unsigned char)(tempDate>>8);                // |/   
        if(sysFlgCNT)FCEContStatus=0X02;
        else         FCEContStatus=0X01;
        MsgSdCANVMS[FCE2VMSA].data[6]= FCEContStatus;                               // |\____ contactor status and fce status
        MsgSdCANVMS[FCE2VMSA].data[7]= FCEStatus.state;   													// |/
        
        /**************_____FCE2VMSB______************/
        tempDate= Pst/60;                                                           // |\____change Pst resolution from 0.001kW to 0.06kW
        MsgSdCANVMS[FCE2VMSB].data[0]= (unsigned char)(tempDate&0x00FF);            // | ____calculate the power output to send
        MsgSdCANVMS[FCE2VMSB].data[1]= (unsigned char)(tempDate>>8);                // |/   
        tempDate= Vst*2/11;																							            // |\____change Vst resolution from 0.1V to 0.55V
        MsgSdCANVMS[FCE2VMSB].data[2]= (unsigned char)(tempDate&0x00FF);            // | ___calculate the stack voltage to send
        MsgSdCANVMS[FCE2VMSB].data[3]= (unsigned char)(tempDate>>8);                // |/   
        tempDate= CVmax;                                                         // |\ ____change CVmax resolution from 0.001V to 0.01V                                                          
        MsgSdCANVMS[FCE2VMSB].data[4]= (unsigned char)(tempDate&0x00FF);            // |  __calculate the maxium cell voltage to send
        MsgSdCANVMS[FCE2VMSB].data[5]= (unsigned char)(tempDate>>8);                // |/   
        tempDate= CVmin;                                                         // |\ ____change CVmin resolution from 0.001V to 0.01V                                                          
        MsgSdCANVMS[FCE2VMSB].data[6]= (unsigned char)(tempDate&0x00FF);            // |  __calculate the minimal cell voltage to send
        MsgSdCANVMS[FCE2VMSB].data[7]= (unsigned char)(tempDate>>8);                // |/   
        
        /**************_____FCE2VMSC______************/
        MsgSdCANVMS[FCE2VMSC].data[0]= (unsigned char)(CMV1&0x00FF);                // | ___calculate 1st cell module voltage to send
        MsgSdCANVMS[FCE2VMSC].data[1]= (unsigned char)(CMV1>>8);                    // |/   
                                                                  
        MsgSdCANVMS[FCE2VMSC].data[2]= (unsigned char)(CMV2&0x00FF);                // | ___calculate 2nd cell module voltage to send
        MsgSdCANVMS[FCE2VMSC].data[3]= (unsigned char)(CMV2>>8);                    // |/   
                                                                  
        MsgSdCANVMS[FCE2VMSC].data[4]= (unsigned char)(CMV3&0x00FF);                // |  __calculate 3rd cell module voltage to send
        MsgSdCANVMS[FCE2VMSC].data[5]= (unsigned char)(CMV3>>8);                    // |/   
        
        MsgSdCANVMS[FCE2VMSC].data[6]= (unsigned char)(CMV4&0x00FF);                // |  __calculate 4th cell module voltage to send
        MsgSdCANVMS[FCE2VMSC].data[7]= (unsigned char)(CMV4>>8);                    // |/ 
        
        /**************_____FCE2VMSD______************/
        tempDate=0;//PHout is not measured;																								      // |\____change Pressure resolution from 0.001bar(0.1kPa) to 1kPa
        MsgSdCANVMS[FCE2VMSD].data[0]= (unsigned char)(tempDate&0x00FF);            // | ____calculate the hydrogen outlet pressure to send
        MsgSdCANVMS[FCE2VMSD].data[1]= (unsigned char)(tempDate>>8);                // |/   
        tempDate=PHin/10;																								            // |\____change Pressure resolution from 0.001bar(0.1kPa) to 1kPa
        MsgSdCANVMS[FCE2VMSD].data[2]= (unsigned char)(tempDate&0x00FF);            // | ___calculate the hydrogen inlet pressure to send
        MsgSdCANVMS[FCE2VMSD].data[3]= (unsigned char)(tempDate>>8);                // |/   
        tempDate=0;//THout is not measured;																				  // |\____change Temp resolution from 0.01C to 0.16C
        MsgSdCANVMS[FCE2VMSD].data[4]= (unsigned char)(tempDate&0x00FF);            // |  __calculate the hydrogen outlet Temp. to send
        MsgSdCANVMS[FCE2VMSD].data[5]= (unsigned char)(tempDate>>8);                // |/   
        tempDate=THin/16;																								            // |\____change Temp resolution from 0.01C to 0.16C
        MsgSdCANVMS[FCE2VMSD].data[6]= (unsigned char)(tempDate&0x00FF);            // |  __calculate the hydrogen inlet Temp. to send
        MsgSdCANVMS[FCE2VMSD].data[7]= (unsigned char)(tempDate>>8);                // |/ 
        
        /**************_____FCE2VMSE______************/
        tempDate=PWin/10;																								            // |\____change Pressure resolution from 0.001bar(0.1kPa) to 1kPa
        MsgSdCANVMS[FCE2VMSE].data[0]= (unsigned char)(tempDate&0x00FF);            // | ___calculate the water inlet pressure to send
        MsgSdCANVMS[FCE2VMSE].data[1]= (unsigned char)(tempDate>>8);                // |/   
        tempDate=TWout/16;																								          // |\____change Temp resolution from 0.01C to 0.16C
        MsgSdCANVMS[FCE2VMSE].data[2]= (unsigned char)(tempDate&0x00FF);            // |  __calculate the water outlet Temp. to send
        MsgSdCANVMS[FCE2VMSE].data[3]= (unsigned char)(tempDate>>8);                // |/   
        tempDate=TWin/16;																								            // |\____change Temp resolution from 0.01C to 0.16C
        MsgSdCANVMS[FCE2VMSE].data[4]= (unsigned char)(tempDate&0x00FF);            // |  __calculate the water inlet Temp. to send
        MsgSdCANVMS[FCE2VMSE].data[5]= (unsigned char)(tempDate>>8);                // |/   
        tempDate=0;//PWout is not measured  																				// |\____change Pressure resolution from 0.001bar(0.1kPa) to 1kPa
        MsgSdCANVMS[FCE2VMSE].data[6]= (unsigned char)(tempDate&0x00FF);            // | ____calculate the water outlet pressure to send
        MsgSdCANVMS[FCE2VMSE].data[7]= (unsigned char)(tempDate>>8);                // |/   
        
        /**************_____FCE2VMSF______************/
        tempDate=PAin/10;																									          // |\____change Pressure resolution from 0.001bar(0.1kPa) to 1kPa
        MsgSdCANVMS[FCE2VMSF].data[0]= (unsigned char)(tempDate&0x00FF);            // | ___calculate the Air inlet pressure to send
        MsgSdCANVMS[FCE2VMSF].data[1]= (unsigned char)(tempDate>>8);                // |/   
        tempDate=0;//TAout is not measured;																				  // |\____change Temp resolution from 0.01C to 0.16C
        MsgSdCANVMS[FCE2VMSF].data[2]= (unsigned char)(tempDate&0x00FF);            // |  __calculate the Air outlet Temp. to send
        MsgSdCANVMS[FCE2VMSF].data[3]= (unsigned char)(tempDate>>8);                // |/   
        tempDate=TAin/16;																								            // |\____change Temp resolution from 0.01C to 0.16C
        MsgSdCANVMS[FCE2VMSF].data[4]= (unsigned char)(tempDate&0x00FF);            // |  __calculate the Air inlet Temp. to send
        MsgSdCANVMS[FCE2VMSF].data[5]= (unsigned char)(tempDate>>8);                // |/  
        tempDate=0;//PAout is not measured																					// |\____change Pressure resolution from 0.001bar(0.1kPa) to 1kPa
        MsgSdCANVMS[FCE2VMSF].data[6]= (unsigned char)(tempDate&0x00FF);            // | ____calculate the Air outlet pressure to send
        MsgSdCANVMS[FCE2VMSF].data[7]= (unsigned char)(tempDate>>8);                // |/   
        
      }
      

    void CANFCE_Load(void)
      { unsigned int tempNcp; 
        /**************_____FCEP______************/															  // |\ 
        MsgSdCANFCE[FCEP].data[0]=  (unsigned char)(Vst&0x00FF);                  // | ---Voltage of fuel cell stack 
        MsgSdCANFCE[FCEP].data[1]=  (unsigned char)(Vst>>8);                      // |/   
             
        MsgSdCANFCE[FCEP].data[2]=  (unsigned char)(Ist&0x00FF);                  // | ---Current of fuel cell stack 
        MsgSdCANFCE[FCEP].data[3]=  (unsigned char)(Ist>>8);                      // |/   
        
        MsgSdCANFCE[FCEP].data[4]=  (unsigned char)(Pst&0x00FF);                  // | ---Power output of fuel cell stack 
        MsgSdCANFCE[FCEP].data[5]=  (unsigned char)(Pst>>8);                      // |/   
        
        MsgSdCANFCE[FCEP].data[6]=  (unsigned char)(PPar&0x00FF);                 // | ---Parasitical pwer of fuel cell stack 
        MsgSdCANFCE[FCEP].data[7]=  (unsigned char)(PPar>>8);                     // |/   
        
        /**************_____StCaMSG__ ************/
        MsgSdCANFCE[StCaMsg].data[0]= (unsigned char)(PAin&0x00FF);               // | ____LOAD Air inlet pressure to send
        MsgSdCANFCE[StCaMsg].data[1]= (unsigned char)(PAin>>8);                   // |/
        
        MsgSdCANFCE[StCaMsg].data[2]= 0;//(unsigned char)(ATD[indexPAout]&0x00FF);// | ____LOAD Air outlet pressure to send
        MsgSdCANFCE[StCaMsg].data[3]= 0;//(unsigned char)(ATD[indexPAout]>>8);    // |/
        
        MsgSdCANFCE[StCaMsg].data[4]= (unsigned char)(TAin&0x00FF);               // | ____LOAD Air inlet temp. to send
        MsgSdCANFCE[StCaMsg].data[5]= (unsigned char)(TAin>>8);                   // |/
        
        MsgSdCANFCE[StCaMsg].data[6]= 0;//(unsigned char)(T[indexTAout]&0x00FF);  // | ____LOAD Air outlet temp. to send
        MsgSdCANFCE[StCaMsg].data[7]= 0;//(unsigned char)(T[indexTAout]>>8);      // |/   
       
        /**************_____StAnMsg______************/
        MsgSdCANFCE[StAnMsg].data[0]= (unsigned char)(PHin&0x00FF);               // | ____LOAD hydrogen inlet pressure to send
        MsgSdCANFCE[StAnMsg].data[1]= (unsigned char)(PHin>>8);                   // |/
        
        MsgSdCANFCE[StAnMsg].data[2]= (unsigned char)(PHS&0x00FF);//(unsigned char)(ATD[indexPHout]&0x00FF);// | ____LOAD hydrogen outlet pressure to send
        MsgSdCANFCE[StAnMsg].data[3]= (unsigned char)(PHS>>8);//(unsigned char)(ATD[indexPHout]>>8);    // |/
        
        MsgSdCANFCE[StAnMsg].data[4]= (unsigned char)(THin&0x00FF);               // | ____LOAD hydrogen inlet temp. to send
        MsgSdCANFCE[StAnMsg].data[5]= (unsigned char)(THin>>8);                   // |/
        
        MsgSdCANFCE[StAnMsg].data[6]= 0;//(unsigned char)(T[indexTHout]&0x00FF);  // | ____LOAD hydrogen outlet temp. to send
        MsgSdCANFCE[StAnMsg].data[7]= 0;//(unsigned char)(T[indexTHout]>>8);      // |/   
        
        /**************_____StCTMsg______************/
        MsgSdCANFCE[StCTMsg].data[0]= (unsigned char)(PWin&0x00FF);               // | ____LOAD water inlet pressure to send
        MsgSdCANFCE[StCTMsg].data[1]= (unsigned char)(PWin>>8);                   // |/
        
        MsgSdCANFCE[StCTMsg].data[2]= 0;//(unsigned char)(ATD[indexPWout]&0x00FF);// | ____LOAD water outlet pressure to send
        MsgSdCANFCE[StCTMsg].data[3]= 0;//(unsigned char)(ATD[indexPWout]>>8);    // |/
        
        MsgSdCANFCE[StCTMsg].data[4]= (unsigned char)(TWin&0x00FF);               // | ____LOAD water inlet temp. to send
        MsgSdCANFCE[StCTMsg].data[5]= (unsigned char)(TWin>>8);                   // |/
        
        MsgSdCANFCE[StCTMsg].data[6]= (unsigned char)(TWout&0x00FF);              // | ____LOAD water outlet temp. to send
        MsgSdCANFCE[StCTMsg].data[7]= (unsigned char)(TWout>>8);                  // |/  
        
        /**************_____StSTMsg______************/
        MsgSdCANFCE[StSTMsg].data[0]=  StateDevice.StateBytes.DevStateL;          // | ____LOAD state of FCS  
        MsgSdCANFCE[StSTMsg].data[1]=  StateDevice.StateBytes.DevStateH; 
        
        tempNcp=Ncp;
        MsgSdCANFCE[StSTMsg].data[2]= (unsigned char)(tempNcp&0x00FF);            // | ____LOAD speed of comp to send
        MsgSdCANFCE[StSTMsg].data[3]= (unsigned char)(tempNcp>>8);                // |/  
        
        if(sysFlgFAN1)frqR1=200;
        else          frqR1=0;
        if(sysFlgFAN2)frqR2=200;
        else          frqR2=0;																										// |\____resolution is 0.5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -