123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- ///##############################################################################
- //
- // FILE: BMS_CAN1_Tools.c
- //
- // TITLE: CAN 1
- // CAN_Tx_NLG5_CTL_618
- // check_and_save_NLG5_ST
- //
- //
- //##############################################################################
- //
- //==============================================================================
- // Change History:
- //==============================================================================
- // Datum: | Name | Version:| Change / Cause: | No
- //------------------------------------------------------------------------------
- // | | | | 002
- //------------------------------------------------------------------------------
- // | | | | 001
- //------------------------------------------------------------------------------
- // 31.07.13 | VR | 1.0 | New Build | 000
- //==============================================================================
- //==============================================================================
- // Comment Change / Cause:
- //==============================================================================
- // Change: 003 // 003
- //----------------------
- //
- //
- //==============================================================================
- // Change: 002 // 002
- //----------------------
- //
- //
- //==============================================================================
- // Change: 001 // 001
- //----------------------
- //
- //
- //==============================================================================
- #include "BMS_Master.h"
- //quick and dirty loesung
- //extern CAN_MAILBOX CAN_Tx0_RCT_INVERTER;
- //extern CAN_MAILBOX CAN_Tx1_RCT_INVERTER;
- //extern CAN_MAILBOX CAN_Rx_RCT_INVERTER;
- // ***** CAN_Tx_NLG5_CTL ********************************************************
- uint16_t CAN_Tx_NLG5_CTL_618( void )
- {
- uint8_t Data[7];
- uint16_t ReturnResult = CAN_OK;
- Data[0] = (uint8_t)(0x80); // CAN enable
- Data[1] = (uint8_t)((NLG5_MAINS_CURRENT >> 8) & 0xFF); // Mains Current Maximum
- Data[2] = (uint8_t)(NLG5_MAINS_CURRENT & 0xFF);
- Data[3] = (uint8_t)((NLG5_OUTPUT_VOLTAGE >> 8) & 0xFF); // Output Voltage Command
- Data[4] = (uint8_t)(NLG5_OUTPUT_VOLTAGE & 0xFF);
- Data[5] = (uint8_t)((NLG5_OUTPUT_CURRENT >> 8) & 0xFF); // Output Current Command
- Data[6] = (uint8_t)(NLG5_OUTPUT_CURRENT & 0xFF);
-
- //ReturnResult = CAN_Write( &CAN_TxMB_NLG5_CTL_618, &Data[0] );
- return ReturnResult;
- }
- int16_t CAN1_tx_Data_to_Inverter(uint32_t timestamp,BMS_CAN1_INVERTER_TX* data) {
- int16_t ReturnResult = CAN_OK;
- //uint8_t test[8]= {0,0,0,0,0,0,0,0};
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.maxBatteryChargeCurrent),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.maxBatteryChargeVoltage),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.maxBatteryDischargeCurrent),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.minBatteryDischargeVoltage),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.batteryCurrent),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.batteryVoltage),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.batterySOCtarget),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.batterySOC),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.batteryCapacity),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.batteryTemperature),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.batterySOH),Global_1msCounter);
- ReturnResult +=CAN_Write_dataset(&CAN_Tx0_RCT_INVERTER, (uint8_t*)&(data->Values.batteryStatus),Global_1msCounter);
- //ReturnResult =CAN_Write(&CAN_Tx0_RCT_INVERTER,test);
- return ReturnResult;
- }
- uint32_t delay_CAN1_ms(uint32_t timestamp,uint32_t delay_ms) {
- while(timestamp + delay_ms >Global_1msCounter) {
- // do nothing
- }
- return Global_1msCounter;
- }
- int16_t CAN1_request_float_value(uint32_t timestamp,float* value,uint32_t requestId) {
- static BMS_CAN1_INVERTER_REQUEST request_telegram;
- static BMS_CAN1_INVERTER_FLOAT_t received_telegram;
- int16_t ReturnResult = CAN_OK;
- request_telegram.valueId=CAN1_TX_REQUESTED_VALUE_ID_ID ;
- request_telegram.requestId=requestId;
- ReturnResult =CAN_Write(&CAN_Tx1_RCT_INVERTER, (uint8_t*)&request_telegram);
- if(ReturnResult != CAN_OK) {
- return CAN_ERROR;
- }
- // wait 2ms for response
- while(timestamp + CAN1_TX_TIMEOUT >= Global_1msCounter) {
- if(CHECKBIT( CAN_1.IFRL.R, 2 )) {
- // answer received
- ReturnResult = CAN_Read(&CAN_Rx_RCT_INVERTER, (uint8_t*)&received_telegram);
- *value=received_telegram.value;
- return CAN_OK;
- }
- return CAN_ERROR;
- }
- }
- int16_t CAN1_send_request_telegram(uint32_t requestId) {
- static BMS_CAN1_INVERTER_REQUEST request_telegram;
- int16_t ReturnResult = CAN_OK;
- request_telegram.valueId=CAN1_TX_REQUESTED_VALUE_ID_ID ;
- request_telegram.requestId=requestId;
-
- shuffle_lsb_msb_can1((uint8_t*)&(request_telegram.valueId));
- shuffle_lsb_msb_can1((uint8_t*)&(request_telegram.requestId));
- ReturnResult =CAN_Write(&CAN_Tx1_RCT_INVERTER, (uint8_t*)&request_telegram);
- return ReturnResult;
- }
- uint16_t CAN1_wait_for_response(float* value) {
- static BMS_CAN1_INVERTER_FLOAT_t received_telegram;
- int16_t ReturnResult = CAN_OK;
- if(CHECKBIT( CAN_1.IFRL.R, 2 )) {
- // answer received
- ReturnResult = CAN_Read(&CAN_Rx_RCT_INVERTER, (uint8_t*)&received_telegram);
- shuffle_lsb_msb_can1((uint8_t*)&(received_telegram.value));
- *value=received_telegram.value;
- return TRUE;
- }
- return FALSE;
- }
- // ***** check_and_save_NLG5_ST ************************************************
- void check_and_save_NLG5_ST( CAN_MAILBOX *p_MBox )
- {
- uint8_t Data[8]; // Receive Dummy
- NLG5_ST_t gNLG5_ST;
-
-
- if( CAN_Read(p_MBox, &Data[0] ) != CAN_ERROR )
- {
- gNLG5_ST.NLG5_STB1.R = ( uint8_t )Data[0];
- gNLG5_ST.NLG5_STB2.R = ( uint8_t )Data[1];
- gNLG5_ST.NLG5_STB3.R = ( uint8_t )Data[2];
- gNLG5_ST.NLG5_STB4 = Data[3];
- }
- }
- // ***** End BMS_CAN1_Tools.c **************************************************
|