?? canuser.c
字號:
#include "includes.h"
#define CAN_R_CONFIG 0 //讀配置
#define CAN_W_CONFIG 1 //寫配置
#define CAN_R_FIXED_VALUE 2 //讀定值
#define CAN_W_FIXED_VALUE 3 //寫定值
#define CAN_R_ANALOG 4 //讀模擬量
#define CAN_R_DIGITAL 5 //讀數字量
#define CAN_W_CONTROL 6 //寫控制量
unsigned char ComRxBuffer[COM_RX_SIZE];
WORD ComTxBuffer[COM_TX_SIZE];
unsigned int Cell[15],
Temp[8];
unsigned int MAX_VOL,
MIN_VOL,
C_K_VOL,
T_K_VO1,
T_K_VO2,
HI_TEMP,
LO_TEMP;
unsigned int Temperature0,
Temperature1,
Tempervoltage0,
Tempervoltage1,
EVTemperature;
/*********************************************************************
* Function: void CanSendAnalog(void)
*
* PreCondition:
*
* Input: none
*
* Output: none
*
* Side Effects:
*
* Overview: Send the collect data to the top computer.
*
* Note: Data include voltage and temperature.
********************************************************************/
void CanSendAnalog(void)
{
unsigned char i;
for(i=0;i<5;i++)
{
while(CANIsTxRdy() == 0);
//CANPutTxPRI(3); //Send Priority highest
//EXIDE is clr in TXB0SIDL.EXIDE //幀格式 =0標準幀; =1擴展幀;
//TXRTR is clr in CANPutTxCnt(8); //幀類型 =0數據幀; =1遠程幀;
//CANPutTxCnt(8); //數據長度 Data DLC
CANPutTxCID(BoardAddress,CAN_R_ANALOG); //CID 4
ComTxBuffer[0].bits.lbyte.L = i+1; //數據包號
ComTxBuffer[0].bits.hbyte.H = 7; //總包數
ComTxBuffer[1].W = Cell[i*3];
ComTxBuffer[2].W = Cell[i*3+1];
ComTxBuffer[3].W = Cell[i*3+2];
CANPutTxDataTyp0(ComTxBuffer);
CANSend(1);
}
while(CANIsTxRdy() == 0);
//CANPutTxPRI(3); //Send Priority highest
//EXIDE is clr in TXB0SIDL.EXIDE //幀格式 =0標準幀; =1擴展幀;
//TXRTR is clr in CANPutTxCnt(8); //幀類型 =0數據幀; =1遠程幀;
//CANPutTxCnt(8); //數據長度 Data DLC
CANPutTxCID(BoardAddress,CAN_R_ANALOG); //CID 4
ComTxBuffer[0].bits.lbyte.L = 6; //數據包號
ComTxBuffer[0].bits.hbyte.H = 7; //總包數
ComTxBuffer[1].W = EVTemperature; //平均溫度
ComTxBuffer[2].W = Temperature0; //溫度0
ComTxBuffer[3].W = Temperature1; //溫度1
CANPutTxDataTyp0(ComTxBuffer);
CANSend(1);
while(CANIsTxRdy() == 0);
//CANPutTxPRI(3); //Send Priority highest
//EXIDE is clr in TXB0SIDL.EXIDE //幀格式 =0標準幀; =1擴展幀;
//TXRTR is clr in CANPutTxCnt(8); //幀類型 =0數據幀; =1遠程幀;
//CANPutTxCnt(8); //數據長度 Data DLC
CANPutTxCID(BoardAddress,CAN_R_ANALOG); //CID
ComTxBuffer[0].bits.lbyte.L = 7; //數據包號
ComTxBuffer[0].bits.hbyte.H = 7; //總包數
ComTxBuffer[1].W = Tempervoltage0; //1點溫度對應電壓值
ComTxBuffer[2].W = Tempervoltage1; //2點溫度對應電壓值
ComTxBuffer[3].W = 0; //無數據
CANPutTxDataTyp0(ComTxBuffer);
CANSend(1);
}
/*********************************************************************
* Function: void CanReciveConfig(void)
*
* PreCondition: Data should have been received prior to calling
* this function; otherwise, it is likely the returned
* count is either not valid or associated to the
* previous message. Use CANIsRxRdy() to determine if
* data is available.
*
* Input: none
*
* Output: none
*
* Side Effects:
*
* Overview: Top computer configure the collect board address.
*
* Note:
********************************************************************/
void CanReciveConfig(void)
{
if(ComRxBuffer[0] != 0) //收到有校數據
{
if((confaddress == 0))
{ //55為默認地址
BoardAddress = ComRxBuffer[2]; //address
if(BoardAddress > 55 && BoardAddress < 61)
{
eeprom_write_byte(0x06,BoardAddress);
BoardAddress = eeprom_read_byte(0x06);
}
else //如果地址超出范圍且不是默認地址配置則地址不變
{
BoardAddress = eeprom_read_byte(0x06);
}
}
}
}
/*********************************************************************
* Function: void CanSendConfig(void)
*
* PreCondition: The configure message has received.
*
* Input: none
*
* Output: none
*
* Side Effects:
*
* Overview: Send the configure message to Top computer.
*
* Note:
********************************************************************/
void CanSendConfig(void)
{
while(CANIsTxRdy() == 0);
//CANPutTxPRI(3); //Send Priority highest
//EXIDE is clr in TXB0SIDL.EXIDE //幀格式 =0標準幀; =1擴展幀;
//TXRTR is clr in CANPutTxCnt(8); //幀類型 =0數據幀; =1遠程幀;
//CANPutTxCnt(8); //數據長度 Data DLC
CANPutTxCID(0x00,CAN_R_CONFIG); //CID
ComTxBuffer[0].bits.lbyte.L = 1; //數據包號
ComTxBuffer[0].bits.hbyte.H = 1; //總包數
ComTxBuffer[1].bits.lbyte.L = BoardAddress; //巡檢單元地址 55~60
ComTxBuffer[1].bits.hbyte.H = 0;
ComTxBuffer[2].W = 0;
ComTxBuffer[3].W = 0;
CANPutTxDataTyp0(ComTxBuffer);
CANSend(1);
}
///*********************************************************************
// * Function: void CanReceiveFixedValue()
// *
// * PreCondition: The configure message has received.
// *
// * Input: none
// *
// * Output: none
// *
// * Side Effects:
// *
// * Overview: Configure the Cell protect message.
// *
// * Note:
// ********************************************************************/
//void CanReceiveFixedValue(void)
//{
// if(ComRxBuffer[0] != 0) //收到有校數據
// {
// if(ComRxBuffer[0] == 1)
// {
// MAX_VOL = (ComRxBuffer[2]+((unsigned int)(ComRxBuffer[3])<<8));
// MIN_VOL = (ComRxBuffer[4]+((unsigned int)(ComRxBuffer[5])<<8));
// C_K_VOL = (ComRxBuffer[6]+((unsigned int)(ComRxBuffer[7])<<8));
// }
// if(ComRxBuffer[0] == 2)
// {
// HI_TEMP = (ComRxBuffer[2]+((unsigned int)(ComRxBuffer[3])<<8));
// LO_TEMP = (ComRxBuffer[4]+((unsigned int)(ComRxBuffer[5])<<8));
// }
// }
//}
/*********************************************************************
* Function: void CanReceiveFixedValue()
*
* PreCondition: The configure message has received.
*
* Input: none
*
* Output: none
*
* Side Effects:
*
* Overview: 單體電池電壓與兩路溫度系數
*
* Note:
********************************************************************/
void CanReceiveFixedValue(void)
{
if(ComRxBuffer[0] != 0) //收到有校數據
{
T_K_VO1 = (ComRxBuffer[2]+((unsigned int)(ComRxBuffer[3])<<8));//1點溫度系數
if(T_K_VO1 > 6000 && T_K_VO1 <15000)
{
eeprom_write_word(8,T_K_VO1);
T_K_VO1 = eeprom_read_word(8);
}
else
{
T_K_VO1 = eeprom_read_word(8);
}
T_K_VO2 = (ComRxBuffer[4]+((unsigned int)(ComRxBuffer[5])<<8));//2點溫度系數
if(T_K_VO2 > 6000 && T_K_VO2 <15000)
{
eeprom_write_word(10,T_K_VO2);
T_K_VO2 = eeprom_read_word(10);
}
else
{
T_K_VO2 = eeprom_read_word(10);
}
C_K_VOL = (ComRxBuffer[6]+((unsigned int)(ComRxBuffer[7])<<8));//單只電壓系數
if(C_K_VOL > 6000 && C_K_VOL <15000)
{
eeprom_write_word(12,C_K_VOL);
C_K_VOL = eeprom_read_word(12);
}
else
{
C_K_VOL = eeprom_read_word(12);
}
}
}
/*********************************************************************
* Function: CanSendFixedValue(void)
*
* PreCondition: The configure message has received.
*
* Input: none
*
* Output: none
*
* Side Effects:
*
* Overview: Send the configure Cell protect message to the top
* computer.
*
* Note:
********************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -