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