|
@@ -1,8 +1,9 @@
|
|
|
#include "secc_port.h"
|
|
#include "secc_port.h"
|
|
|
#include "GBT27930.h"
|
|
#include "GBT27930.h"
|
|
|
int can_GBT27930_wait_n(GBT27930_t* dev,int pgn);
|
|
int can_GBT27930_wait_n(GBT27930_t* dev,int pgn);
|
|
|
-
|
|
|
|
|
static _27930_recvFlag_t _27930_recvFlag;
|
|
static _27930_recvFlag_t _27930_recvFlag;
|
|
|
|
|
+
|
|
|
|
|
+uint8_t Global_flaut = 0;
|
|
|
static int can_GBT27930_send_stop(GBT27930_t* dev, int REASON)
|
|
static int can_GBT27930_send_stop(GBT27930_t* dev, int REASON)
|
|
|
{
|
|
{
|
|
|
ccu_port_t *ccu = (ccu_port_t*)dev->ccu;
|
|
ccu_port_t *ccu = (ccu_port_t*)dev->ccu;
|
|
@@ -27,6 +28,16 @@ static int can_GBT27930_send_stop(GBT27930_t* dev, int REASON)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+//接收补充设置
|
|
|
|
|
+void pgn_run(GBT27930_t* dev)
|
|
|
|
|
+{
|
|
|
|
|
+ if(_27930_recvFlag.GBT_27930_2015_BSD_recv == 1){
|
|
|
|
|
+ can_APP_clear(GBT_27930_2015_CST);
|
|
|
|
|
+ can_GBT27930_send_CSD(dev, &dev->csd);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
static int can_GBT27930_send_timeout(GBT27930_t* dev, int STATE)
|
|
static int can_GBT27930_send_timeout(GBT27930_t* dev, int STATE)
|
|
|
{
|
|
{
|
|
|
ccu_port_t *ccu = (ccu_port_t*)dev->ccu;
|
|
ccu_port_t *ccu = (ccu_port_t*)dev->ccu;
|
|
@@ -40,8 +51,8 @@ static int can_GBT27930_send_timeout(GBT27930_t* dev, int STATE)
|
|
|
case GBT_27930_2015_BRO:{dev->cem.bro_timeout=1;}break;
|
|
case GBT_27930_2015_BRO:{dev->cem.bro_timeout=1;}break;
|
|
|
case GBT_27930_2015_BCS:{dev->cem.bcs_timeout=1;}break;
|
|
case GBT_27930_2015_BCS:{dev->cem.bcs_timeout=1;}break;
|
|
|
case GBT_27930_2015_BCL:{dev->cem.bcl_timeout=1;}break;
|
|
case GBT_27930_2015_BCL:{dev->cem.bcl_timeout=1;}break;
|
|
|
- case GBT_27930_TIMEOUT_BST:{dev->cem.bst_timeout=1;}break;
|
|
|
|
|
- case GBT_27930_TIMEOUT_BSD:{dev->cem.bsd_timeout=1;}break;
|
|
|
|
|
|
|
+ case GBT_27930_2015_BST:{dev->cem.bst_timeout=1;}break;
|
|
|
|
|
+ case GBT_27930_2015_BSD:{dev->cem.bsd_timeout=1;}break;
|
|
|
default: {dev->cem.others=1;} break;
|
|
default: {dev->cem.others=1;} break;
|
|
|
}
|
|
}
|
|
|
can_APP_clear(0);
|
|
can_APP_clear(0);
|
|
@@ -107,13 +118,28 @@ static int can_GBT27930_Handshake(GBT27930_t* dev)
|
|
|
ccu_port_t *ccu = (ccu_port_t*)dev->ccu;
|
|
ccu_port_t *ccu = (ccu_port_t*)dev->ccu;
|
|
|
pcu_port_t *pcu = (pcu_port_t*)dev->pcu;
|
|
pcu_port_t *pcu = (pcu_port_t*)dev->pcu;
|
|
|
|
|
|
|
|
|
|
+ _27930_recvFlag.data = 0;
|
|
|
|
|
+
|
|
|
printi("SECC(%d) Handshake...\n", secc->config->connectorId);
|
|
printi("SECC(%d) Handshake...\n", secc->config->connectorId);
|
|
|
secc->set_Aux12V_state(secc, 1);
|
|
secc->set_Aux12V_state(secc, 1);
|
|
|
can_GBT27930_send_CHM(dev);
|
|
can_GBT27930_send_CHM(dev);
|
|
|
int ret = can_GBT27930_wait(dev, GBT_27930_2015_BHM, BHM_TIMEOUT);
|
|
int ret = can_GBT27930_wait(dev, GBT_27930_2015_BHM, BHM_TIMEOUT);
|
|
|
if (ret == GBT_27930_2015_BHM)
|
|
if (ret == GBT_27930_2015_BHM)
|
|
|
{
|
|
{
|
|
|
- printv("BMS->bhm.bmsMaxVoltage:%f\n", (float)(dev->bhm.bmsMaxVoltage)/10);
|
|
|
|
|
|
|
+ printccui("BMS->bhm.bmsMaxVoltage:%f,secc->SECC_minV=%f\n", (float)(dev->bhm.bmsMaxVoltage)/10,secc->SECC_minV);
|
|
|
|
|
+ if(dev->bhm.bmsMaxVoltage < secc->SECC_minV*10){
|
|
|
|
|
+ can_APP_clear(0);
|
|
|
|
|
+ secc->set_Aux12V_state(secc, 0);
|
|
|
|
|
+ printccui("step\n");
|
|
|
|
|
+ if (secc->set_ELock_state(secc, 0, 1000)==1)
|
|
|
|
|
+ {
|
|
|
|
|
+ pcu->update_ElecLock_state(pcu, 0);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ secc_set_error(secc, GUN_ELECLOCK_STALL);
|
|
|
|
|
+ }
|
|
|
|
|
+ while(1){sleep(1);} //停在这里 等待拔枪以后自己删除线程
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
secc_set_state(secc, GUN_INSULATION);
|
|
secc_set_state(secc, GUN_INSULATION);
|
|
|
return 1;
|
|
return 1;
|
|
|
}
|
|
}
|
|
@@ -170,8 +196,8 @@ static int can_GBT27930_Insulation(GBT27930_t* dev)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
float Vimd = ((float)dev->bhm.bmsMaxVoltage)/10;
|
|
float Vimd = ((float)dev->bhm.bmsMaxVoltage)/10;
|
|
|
- Vimd = fminf(Vimd, 1000.0f);
|
|
|
|
|
- Vimd = fmaxf(Vimd, 500.0f);
|
|
|
|
|
|
|
+ Vimd = fminf(Vimd, 500.0f);//取2者的小值
|
|
|
|
|
+ // Vimd = fmaxf(Vimd, 500.0f);
|
|
|
|
|
|
|
|
secc->set_IMD_state(secc, 1);
|
|
secc->set_IMD_state(secc, 1);
|
|
|
secc_request_power(secc, POWER_REQUEST_INSULATION, Vimd, 0);
|
|
secc_request_power(secc, POWER_REQUEST_INSULATION, Vimd, 0);
|
|
@@ -220,6 +246,19 @@ static int can_GBT27930_Insulation(GBT27930_t* dev)
|
|
|
XFlag = XFlag+1-systime_ms();\
|
|
XFlag = XFlag+1-systime_ms();\
|
|
|
}while(0)
|
|
}while(0)
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+void exit_handle(GBT27930_t* dev,int pgn)
|
|
|
|
|
+{
|
|
|
|
|
+ if(pgn == GBT_27930_2015_BRO){
|
|
|
|
|
+ secc_port_t *secc = (secc_port_t*)dev->secc;
|
|
|
|
|
+ can_GBT27930_send_timeout(dev, GBT_27930_2015_BRO);
|
|
|
|
|
+ secc_set_state(secc, GUN_COMFALUT);
|
|
|
|
|
+ secc_set_error(secc, GUN_PRECHARGE_FAULT);
|
|
|
|
|
+ //printd("SECC(%d) BMS Insulation timeout or fault.\n", secc->config->connectorId);
|
|
|
|
|
+ printccui("SECC(%d) BMS Insulation timeout or fault.\n", secc->config->connectorId);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
static int can_GBT27930_PreCharge(GBT27930_t* dev)
|
|
static int can_GBT27930_PreCharge(GBT27930_t* dev)
|
|
|
{
|
|
{
|
|
|
int ret;
|
|
int ret;
|
|
@@ -250,7 +289,7 @@ static int can_GBT27930_PreCharge(GBT27930_t* dev)
|
|
|
secc_set_state(secc, GUN_COMFALUT);
|
|
secc_set_state(secc, GUN_COMFALUT);
|
|
|
return GBT_27930_2015_ERROR;
|
|
return GBT_27930_2015_ERROR;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+ can_APP_clear(GBT_27930_2015_CRM);
|
|
|
printi("SECC(%d).bcp.bmsPermitttedMaxVoltage:%d, bmsPermitttedMaxCurrent:%d, bmsNominalTotalkWH:%d, bmsVoltage:%d \n", secc->config->connectorId, dev->bcp.bmsPermitttedMaxVoltage, dev->bcp.bmsPermitttedMaxCurrent, dev->bcp.bmsNominalTotalkWH, dev->bcp.bmsVoltage);
|
|
printi("SECC(%d).bcp.bmsPermitttedMaxVoltage:%d, bmsPermitttedMaxCurrent:%d, bmsNominalTotalkWH:%d, bmsVoltage:%d \n", secc->config->connectorId, dev->bcp.bmsPermitttedMaxVoltage, dev->bcp.bmsPermitttedMaxCurrent, dev->bcp.bmsNominalTotalkWH, dev->bcp.bmsVoltage);
|
|
|
printd("SECC(%d) PreCharging.maxVoltage:%f,minVoltage:%f, maxCurrent:%f, minCurrent:%f\n", secc->config->connectorId, secc->SECC_maxV, secc->SECC_minV, secc->SECC_maxI, secc->SECC_minI);
|
|
printd("SECC(%d) PreCharging.maxVoltage:%f,minVoltage:%f, maxCurrent:%f, minCurrent:%f\n", secc->config->connectorId, secc->SECC_maxV, secc->SECC_minV, secc->SECC_maxI, secc->SECC_minI);
|
|
|
if (dev->bcp.bmsPermitttedMaxVoltage < secc->SECC_minV)
|
|
if (dev->bcp.bmsPermitttedMaxVoltage < secc->SECC_minV)
|
|
@@ -266,26 +305,22 @@ static int can_GBT27930_PreCharge(GBT27930_t* dev)
|
|
|
dev->cml.chgMaxOutputCurrent = (uint16_t)(secc->SECC_maxI*10 + 0.5);
|
|
dev->cml.chgMaxOutputCurrent = (uint16_t)(secc->SECC_maxI*10 + 0.5);
|
|
|
dev->cml.chgMinOutputCurrent = (uint16_t)(secc->SECC_minI*10 + 0.5);
|
|
dev->cml.chgMinOutputCurrent = (uint16_t)(secc->SECC_minI*10 + 0.5);
|
|
|
can_GBT27930_send_CML(dev, &dev->cml);
|
|
can_GBT27930_send_CML(dev, &dev->cml);
|
|
|
|
|
+ can_GBT27930_send_CTS(dev, NULL);
|
|
|
long int wait_time ;
|
|
long int wait_time ;
|
|
|
|
|
+ APPLY(GBT_27930_2015_BRO);
|
|
|
|
|
+ int recv_pgn_flag = 0;
|
|
|
WAIT_CONDI(
|
|
WAIT_CONDI(
|
|
|
wait_time,60000,
|
|
wait_time,60000,
|
|
|
- SPILTE(
|
|
|
|
|
- can_GBT27930_send_timeout(dev, GBT_27930_2015_BRO);
|
|
|
|
|
- secc_set_state(secc, GUN_COMFALUT);
|
|
|
|
|
- secc_set_error(secc, GUN_PRECHARGE_FAULT);
|
|
|
|
|
- //printd("SECC(%d) BMS Insulation timeout or fault.\n", secc->config->connectorId);
|
|
|
|
|
- printccui("SECC(%d) BMS Insulation timeout or fault.\n", secc->config->connectorId);
|
|
|
|
|
- return GBT_27930_2015_ERROR;
|
|
|
|
|
- ),
|
|
|
|
|
- can_GBT27930_send_CTS(dev, NULL);
|
|
|
|
|
- ret = can_GBT27930_wait_n(dev, GBT_27930_2015_BRO);
|
|
|
|
|
- if(ret == GBT_27930_2015_BRO)break;
|
|
|
|
|
|
|
+ ,
|
|
|
|
|
+ RECV_BMS_1(dev,GBT_27930_2015_BRO);
|
|
|
|
|
+ TIME_OUT(dev,recv_pgn_flag);
|
|
|
|
|
+ if(_27930_recvFlag.GBT_27930_2015_BRO_recv == 1)break;
|
|
|
);
|
|
);
|
|
|
//----------等待车端绝缘检测完成----------
|
|
//----------等待车端绝缘检测完成----------
|
|
|
can_GBT27930_send_CML(dev, &dev->cml);
|
|
can_GBT27930_send_CML(dev, &dev->cml);
|
|
|
dev->bro.status = 0x00;//清零
|
|
dev->bro.status = 0x00;//清零
|
|
|
WAIT_CONDI(
|
|
WAIT_CONDI(
|
|
|
- wait_time,60000,
|
|
|
|
|
|
|
+ wait_time,wait_time,
|
|
|
SPILTE(
|
|
SPILTE(
|
|
|
can_GBT27930_send_timeout(dev, GBT_27930_2015_BRO);
|
|
can_GBT27930_send_timeout(dev, GBT_27930_2015_BRO);
|
|
|
secc_set_state(secc, GUN_COMFALUT);
|
|
secc_set_state(secc, GUN_COMFALUT);
|
|
@@ -295,11 +330,8 @@ static int can_GBT27930_PreCharge(GBT27930_t* dev)
|
|
|
return GBT_27930_2015_ERROR;
|
|
return GBT_27930_2015_ERROR;
|
|
|
),
|
|
),
|
|
|
can_GBT27930_send_CTS(dev, NULL);
|
|
can_GBT27930_send_CTS(dev, NULL);
|
|
|
- if( dev->bro.status == 0xaa)
|
|
|
|
|
- {
|
|
|
|
|
- printf(",ambdnabdn");
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if( dev->bro.status == 0xaa)break;
|
|
|
|
|
+
|
|
|
);
|
|
);
|
|
|
can_APP_clear(GBT_27930_2015_CML); ////GB2015-27930-tab.d1
|
|
can_APP_clear(GBT_27930_2015_CML); ////GB2015-27930-tab.d1
|
|
|
can_APP_clear(GBT_27930_2015_CTS);
|
|
can_APP_clear(GBT_27930_2015_CTS);
|
|
@@ -328,6 +360,12 @@ static int can_GBT27930_PreCharge(GBT27930_t* dev)
|
|
|
printd("SECC(%d).VMeters:%f, VGround:%f, VBattery:%f\n", secc->config->connectorId, secc->VMeters, secc->VGround, VBattery);
|
|
printd("SECC(%d).VMeters:%f, VGround:%f, VBattery:%f\n", secc->config->connectorId, secc->VMeters, secc->VGround, VBattery);
|
|
|
secc_request_power(secc, POWER_REQUEST_CONST_VOLTAGE, VBattery, 0.0f);
|
|
secc_request_power(secc, POWER_REQUEST_CONST_VOLTAGE, VBattery, 0.0f);
|
|
|
}
|
|
}
|
|
|
|
|
+ if(dev->bro.status == 0x00){
|
|
|
|
|
+ printf("is fall\n");
|
|
|
|
|
+ Global_flaut = 'b';
|
|
|
|
|
+ secc_set_state(secc, GUN_EMERGRNCY_STOP);
|
|
|
|
|
+ return GBT_27930_2015_ERROR;
|
|
|
|
|
+ }
|
|
|
msleep(200);
|
|
msleep(200);
|
|
|
);
|
|
);
|
|
|
secc_set_error(secc, GUN_PRECHARGE_FAULT);
|
|
secc_set_error(secc, GUN_PRECHARGE_FAULT);
|
|
@@ -371,19 +409,26 @@ static int can_GBT27930_Charging(GBT27930_t* dev)
|
|
|
printi("step\n");
|
|
printi("step\n");
|
|
|
can_GBT27930_send_CRO(dev, 0xAA);
|
|
can_GBT27930_send_CRO(dev, 0xAA);
|
|
|
printccui("step\n");
|
|
printccui("step\n");
|
|
|
- ret = can_GBT27930_wait(dev, GBT_27930_2015_BCL, BCL_TIMEOUT);
|
|
|
|
|
|
|
+ //ret = can_GBT27930_wait(dev, GBT_27930_2015_BCL, BCL_TIMEOUT);
|
|
|
printccui("step\n");
|
|
printccui("step\n");
|
|
|
- long int bcs_time = systime_ms();
|
|
|
|
|
- long int bcl_time = systime_ms();
|
|
|
|
|
|
|
+ APPLY(GBT_27930_2015_BCS);
|
|
|
|
|
+ APPLY(GBT_27930_2015_BCL);
|
|
|
|
|
+ APPLY(GBT_27930_2015_BSM);
|
|
|
int start_sendCCS = 0;
|
|
int start_sendCCS = 0;
|
|
|
|
|
+ int recv_pgn_flag = 0; //接收超时标准
|
|
|
while(secc_should_stop(secc) != 1)
|
|
while(secc_should_stop(secc) != 1)
|
|
|
{
|
|
{
|
|
|
//int ret = can_GBT27930_wait(dev, 3<<24, 1000,GBT_27930_2015_BCS,GBT_27930_2015_BCL,GBT_27930_2015_BSM);
|
|
//int ret = can_GBT27930_wait(dev, 3<<24, 1000,GBT_27930_2015_BCS,GBT_27930_2015_BCL,GBT_27930_2015_BSM);
|
|
|
- RECV_BMS(dev,GBT_27930_2015_BCL,bcl_time);
|
|
|
|
|
- RECV_BMS(dev,GBT_27930_2015_BCS,bcs_time);
|
|
|
|
|
- if(can_GBT27930_wait_n(dev,GBT_27930_2015_BSM)==GBT_27930_2015_BSM){
|
|
|
|
|
- _27930_recvFlag.GBT_27930_2015_BSM_recv = 1;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ RECV_BMS_3(dev,GBT_27930_2015_BCS,GBT_27930_2015_BCL,GBT_27930_2015_BSM);
|
|
|
|
|
+ TIME_OUT(dev,recv_pgn_flag)
|
|
|
|
|
+ if(_27930_recvFlag.GBT_27930_2015_BST_recv ==1){
|
|
|
|
|
+ can_APP_clear(GBT_27930_2015_CCS);
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
|
|
+ // if(can_GBT27930_wait_n(dev,GBT_27930_2015_BSM)==GBT_27930_2015_BSM){
|
|
|
|
|
+ // _27930_recvFlag.GBT_27930_2015_BSM_recv = 1;
|
|
|
|
|
+ // }
|
|
|
|
|
|
|
|
if(_27930_recvFlag.GBT_27930_2015_BCL_recv==1){
|
|
if(_27930_recvFlag.GBT_27930_2015_BCL_recv==1){
|
|
|
_27930_recvFlag.GBT_27930_2015_BCL_recv = 0 ;
|
|
_27930_recvFlag.GBT_27930_2015_BCL_recv = 0 ;
|
|
@@ -394,8 +439,8 @@ static int can_GBT27930_Charging(GBT27930_t* dev)
|
|
|
float voltage = (((float)dev->bcl.bmsVoltage_request) / 10);
|
|
float voltage = (((float)dev->bcl.bmsVoltage_request) / 10);
|
|
|
float current = (((float)dev->bcl.bmsCurrent_request) / 10);
|
|
float current = (((float)dev->bcl.bmsCurrent_request) / 10);
|
|
|
//printi("SECC(%d) BCL voltage:%f, current:%f, mode:%d\n", secc->config->connectorId, voltage, current, dev->bcl.bmsChargeMode);
|
|
//printi("SECC(%d) BCL voltage:%f, current:%f, mode:%d\n", secc->config->connectorId, voltage, current, dev->bcl.bmsChargeMode);
|
|
|
- printccui("SBCL secc->VMeters:%f, secc->VGround:%f,secc->I=IMeters:%f\n",secc->VMeters, secc->VGround,secc->IMeters);
|
|
|
|
|
- //printccui("SECC(%d) BCL voltage:%f, current:%f, mode:%d\n", secc->config->connectorId, voltage, current, dev->bcl.bmsChargeMode);
|
|
|
|
|
|
|
+ //printccui("SBCL secc->VMeters:%f, secc->VGround:%f,secc->I=IMeters:%f\n",secc->VMeters, secc->VGround,secc->IMeters);
|
|
|
|
|
+ printccui("SECC(%d) BCL voltage:%f, current:%f, mode:%d\n", secc->config->connectorId, voltage, current, dev->bcl.bmsChargeMode);
|
|
|
if (dev->bcl.bmsChargeMode == 1) { secc_request_power(secc, POWER_REQUEST_CONST_VOLTAGE, voltage, current); }
|
|
if (dev->bcl.bmsChargeMode == 1) { secc_request_power(secc, POWER_REQUEST_CONST_VOLTAGE, voltage, current); }
|
|
|
if (dev->bcl.bmsChargeMode == 2) { secc_request_power(secc, POWER_REQUEST_CONST_CURRENT, voltage, current); }
|
|
if (dev->bcl.bmsChargeMode == 2) { secc_request_power(secc, POWER_REQUEST_CONST_CURRENT, voltage, current); }
|
|
|
}
|
|
}
|
|
@@ -410,13 +455,12 @@ static int can_GBT27930_Charging(GBT27930_t* dev)
|
|
|
secc->EV_Estimate_Minutes = dev->bcs.bmsChargingNeedMinutes;
|
|
secc->EV_Estimate_Minutes = dev->bcs.bmsChargingNeedMinutes;
|
|
|
secc->SOC = dev->bcs.bmsSOC;
|
|
secc->SOC = dev->bcs.bmsSOC;
|
|
|
//printi("SECC(%d) BCS(%fV, %fA, %dM, %dP)\n", secc->config->connectorId, secc->EV_Charging_voltage, secc->EV_Charging_current, secc->EV_Estimate_Minutes, secc->SOC);
|
|
//printi("SECC(%d) BCS(%fV, %fA, %dM, %dP)\n", secc->config->connectorId, secc->EV_Charging_voltage, secc->EV_Charging_current, secc->EV_Estimate_Minutes, secc->SOC);
|
|
|
- printccui("SECC(%d) BCS(%fV, %fA, %dM, %dP)\n", secc->config->connectorId, secc->EV_Charging_voltage, secc->EV_Charging_current, secc->EV_Estimate_Minutes, secc->SOC);
|
|
|
|
|
|
|
+ //printccui("SECC(%d) BCS(%fV, %fA, %dM, %dP)\n", secc->config->connectorId, secc->EV_Charging_voltage, secc->EV_Charging_current, secc->EV_Estimate_Minutes, secc->SOC);
|
|
|
secc_report_MeterValues(secc);
|
|
secc_report_MeterValues(secc);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if(_27930_recvFlag.GBT_27930_2015_BSM_recv == 1){
|
|
if(_27930_recvFlag.GBT_27930_2015_BSM_recv == 1){
|
|
|
_27930_recvFlag.GBT_27930_2015_BSM_recv = 0;
|
|
_27930_recvFlag.GBT_27930_2015_BSM_recv = 0;
|
|
|
- bsm_ms = systime_ms();
|
|
|
|
|
float voltage = (((float)dev->bcl.bmsVoltage_request) / 10);
|
|
float voltage = (((float)dev->bcl.bmsVoltage_request) / 10);
|
|
|
float current = (((float)dev->bcl.bmsCurrent_request) / 10);
|
|
float current = (((float)dev->bcl.bmsCurrent_request) / 10);
|
|
|
if(dev->bsm.bmsBatteryOverTemp != 0){
|
|
if(dev->bsm.bmsBatteryOverTemp != 0){
|
|
@@ -440,17 +484,16 @@ static int can_GBT27930_Charging(GBT27930_t* dev)
|
|
|
}
|
|
}
|
|
|
if (dev->bsm.bmsPowerPermitted == 0x0 && dev->bsm_last.bmsPowerPermitted == 1)
|
|
if (dev->bsm.bmsPowerPermitted == 0x0 && dev->bsm_last.bmsPowerPermitted == 1)
|
|
|
{ //暂停
|
|
{ //暂停
|
|
|
- printi("SECC(%d) BSM(%d).%s\n", secc->config->connectorId, dev->bsm.bmsPowerPermitted, "suspend");
|
|
|
|
|
|
|
+ printccui("SECC(%d) BSM(%d).%s\n", secc->config->connectorId, dev->bsm.bmsPowerPermitted, "suspend");
|
|
|
secc_request_power(secc, POWER_REQUEST_SHUTDOWN, voltage, current);
|
|
secc_request_power(secc, POWER_REQUEST_SHUTDOWN, voltage, current);
|
|
|
}
|
|
}
|
|
|
if (dev->bsm.bmsPowerPermitted == 0x1 && dev->bsm_last.bmsPowerPermitted == 0)
|
|
if (dev->bsm.bmsPowerPermitted == 0x1 && dev->bsm_last.bmsPowerPermitted == 0)
|
|
|
{ //继续
|
|
{ //继续
|
|
|
- printi("SECC(%d) BSM(%d).%s\n", secc->config->connectorId, dev->bsm.bmsPowerPermitted, "continue");
|
|
|
|
|
|
|
+ printccui("SECC(%d) BSM(%d).%s\n", secc->config->connectorId, dev->bsm.bmsPowerPermitted, "continue");
|
|
|
if (dev->bcl.bmsChargeMode = 0x01) { secc_request_power(secc, POWER_REQUEST_CONST_VOLTAGE, voltage, current); }
|
|
if (dev->bcl.bmsChargeMode = 0x01) { secc_request_power(secc, POWER_REQUEST_CONST_VOLTAGE, voltage, current); }
|
|
|
if (dev->bcl.bmsChargeMode = 0x02) { secc_request_power(secc, POWER_REQUEST_CONST_CURRENT, voltage, current); }
|
|
if (dev->bcl.bmsChargeMode = 0x02) { secc_request_power(secc, POWER_REQUEST_CONST_CURRENT, voltage, current); }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- now_ms = systime_ms();
|
|
|
|
|
// if ((now_ms - bcl_ms) > BCL_TIMEOUT) { printi("SECC(%d) timeout(bcl:%lld, bcs:%lld, bsm:%lld)\n", secc->config->connectorId, (now_ms - bcl_ms), (now_ms - bcs_ms), (now_ms - bsm_ms)); break;}
|
|
// if ((now_ms - bcl_ms) > BCL_TIMEOUT) { printi("SECC(%d) timeout(bcl:%lld, bcs:%lld, bsm:%lld)\n", secc->config->connectorId, (now_ms - bcl_ms), (now_ms - bcs_ms), (now_ms - bsm_ms)); break;}
|
|
|
// if ((now_ms - bcs_ms) > BCS_TIMEOUT) { printi("SECC(%d) timeout(bcl:%lld, bcs:%lld, bsm:%lld)\n", secc->config->connectorId, (now_ms - bcl_ms), (now_ms - bcs_ms), (now_ms - bsm_ms)); break;}
|
|
// if ((now_ms - bcs_ms) > BCS_TIMEOUT) { printi("SECC(%d) timeout(bcl:%lld, bcs:%lld, bsm:%lld)\n", secc->config->connectorId, (now_ms - bcl_ms), (now_ms - bcs_ms), (now_ms - bsm_ms)); break;}
|
|
|
// if ((now_ms - bsm_ms) > BSM_TIMEOUT) { printi("SECC(%d) timeout(bcl:%lld, bcs:%lld, bsm:%lld)\n", secc->config->connectorId, (now_ms - bcl_ms), (now_ms - bcs_ms), (now_ms - bsm_ms)); goto endhandl;}
|
|
// if ((now_ms - bsm_ms) > BSM_TIMEOUT) { printi("SECC(%d) timeout(bcl:%lld, bcs:%lld, bsm:%lld)\n", secc->config->connectorId, (now_ms - bcl_ms), (now_ms - bcs_ms), (now_ms - bsm_ms)); goto endhandl;}
|
|
@@ -464,11 +507,10 @@ static int can_GBT27930_Charging(GBT27930_t* dev)
|
|
|
dev->ccs.chgOutputVoltage = (uint16_t)(secc->VMeters*10 + 0.5);
|
|
dev->ccs.chgOutputVoltage = (uint16_t)(secc->VMeters*10 + 0.5);
|
|
|
dev->ccs.chgOutputCurrent = (uint16_t)(secc->IMeters*10 + 0.5);
|
|
dev->ccs.chgOutputCurrent = (uint16_t)(secc->IMeters*10 + 0.5);
|
|
|
if(start_sendCCS == 3)can_GBT27930_send_CCS(dev, &dev->ccs);
|
|
if(start_sendCCS == 3)can_GBT27930_send_CCS(dev, &dev->ccs);
|
|
|
- ccs_ms = systime_ms();
|
|
|
|
|
// }
|
|
// }
|
|
|
usleep(2000);
|
|
usleep(2000);
|
|
|
}
|
|
}
|
|
|
- endhandl:
|
|
|
|
|
|
|
+ endhandl:
|
|
|
printccui("step\n");
|
|
printccui("step\n");
|
|
|
secc_set_state(secc, GUN_STOPPING);
|
|
secc_set_state(secc, GUN_STOPPING);
|
|
|
return GBT_27930_2015_NORMAL;
|
|
return GBT_27930_2015_NORMAL;
|
|
@@ -484,6 +526,63 @@ static int can_GBT27930_ReComm(GBT27930_t* dev)
|
|
|
printccui("step\n");
|
|
printccui("step\n");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * @brief 紧急停机
|
|
|
|
|
+ * @see /GB2015-27930-tab.A5
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+static int can_GBT27930_EMERGRNCY_STOP(GBT27930_t* dev)
|
|
|
|
|
+{
|
|
|
|
|
+ secc_port_t* secc = (secc_port_t*)dev->secc;
|
|
|
|
|
+ ccu_port_t *ccu = (ccu_port_t*)dev->ccu;
|
|
|
|
|
+ pcu_port_t *pcu = (pcu_port_t*)dev->pcu;
|
|
|
|
|
+
|
|
|
|
|
+ can_APP_clear(0);
|
|
|
|
|
+ printccui("step\n");
|
|
|
|
|
+ secc_request_power(secc, POWER_REQUEST_PLACE_FREE, 0, 0);
|
|
|
|
|
+ can_GBT27930_send_CST(dev,&dev->cst);
|
|
|
|
|
+ usleep(100000);//
|
|
|
|
|
+
|
|
|
|
|
+ if (secc->set_K1K2_state(secc, 0, 1000) == 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ pcu->update_K1K2_state(pcu, 0, 0);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ secc_set_error(secc, GUN_CONTACTOR_FAULT);
|
|
|
|
|
+ }
|
|
|
|
|
+ can_APP_clear(0);
|
|
|
|
|
+ secc->set_Aux12V_state(secc, 0);
|
|
|
|
|
+
|
|
|
|
|
+ if (secc->set_ELock_state(secc, 0, 1000)==1)
|
|
|
|
|
+ {
|
|
|
|
|
+ pcu->update_ElecLock_state(pcu, 0);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ secc_set_error(secc, GUN_ELECLOCK_STALL);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ secc->request_Minutes = 0;
|
|
|
|
|
+ secc->request_SOC = 0;
|
|
|
|
|
+ secc->request_KWh = 0;
|
|
|
|
|
+ secc->reserve_on = 0;
|
|
|
|
|
+ secc->reservationId = 0;
|
|
|
|
|
+ secc->started_KWh = 0;
|
|
|
|
|
+ secc->started_UTC = 0;
|
|
|
|
|
+ secc->SOC = 0;
|
|
|
|
|
+ secc->EV_Charging_current = 0;
|
|
|
|
|
+ secc->EV_Charging_voltage = 0;
|
|
|
|
|
+ secc->EV_Estimate_Minutes = 0;
|
|
|
|
|
+ secc->transactionId = 0;
|
|
|
|
|
+
|
|
|
|
|
+ printd("step\n");
|
|
|
|
|
+
|
|
|
|
|
+ can_GBT27930_close_pipe(dev);
|
|
|
|
|
+
|
|
|
|
|
+ printd("GUN_Error:%08x, GUN_State:%08x\n", secc->GUN_Error, secc->GUN_State);
|
|
|
|
|
+ secc_set_state(secc, GUN_PLUGIN);
|
|
|
|
|
+ printd("step\n");
|
|
|
|
|
+ return GBT_27930_2015_NORMAL;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
static int can_GBT27930_Finishing(GBT27930_t* dev)
|
|
static int can_GBT27930_Finishing(GBT27930_t* dev)
|
|
|
{
|
|
{
|
|
|
secc_port_t* secc = (secc_port_t*)dev->secc;
|
|
secc_port_t* secc = (secc_port_t*)dev->secc;
|
|
@@ -493,40 +592,50 @@ static int can_GBT27930_Finishing(GBT27930_t* dev)
|
|
|
//printi("SECC(%d) Finishing...\n", secc->config->connectorId);
|
|
//printi("SECC(%d) Finishing...\n", secc->config->connectorId);
|
|
|
printccui("SECC(%d) Finishing...\n", secc->config->connectorId);
|
|
printccui("SECC(%d) Finishing...\n", secc->config->connectorId);
|
|
|
can_GBT27930_send_stop(dev,GBT_27930_STOP_CMD);//还没区分命令
|
|
can_GBT27930_send_stop(dev,GBT_27930_STOP_CMD);//还没区分命令
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/************GB2015-27930-tab.A6**************/
|
|
/************GB2015-27930-tab.A6**************/
|
|
|
long int wait_time;
|
|
long int wait_time;
|
|
|
|
|
+ APPLY(GBT_27930_2015_BSD);
|
|
|
|
|
+ APPLY(GBT_27930_2015_BST);
|
|
|
|
|
+ int recv_pgn_flag = 0; //接收超时标准
|
|
|
|
|
+ long wait_BSD_time = systime_ms();
|
|
|
|
|
+ printccui("step\n");
|
|
|
WAIT_CONDI(
|
|
WAIT_CONDI(
|
|
|
- wait_time,5000,
|
|
|
|
|
|
|
+ wait_time,1000000,
|
|
|
,
|
|
,
|
|
|
- if(can_GBT27930_wait_n(dev,GBT_27930_2015_BST)==GBT_27930_2015_BST)
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ RECV_BMS_2(dev,GBT_27930_2015_BSD,GBT_27930_2015_BST);
|
|
|
|
|
+ TIME_OUT(dev,recv_pgn_flag)
|
|
|
);
|
|
);
|
|
|
|
|
+ printccui("step\n");
|
|
|
secc_request_power(secc, POWER_REQUEST_PLACE_FREE, 0, 0);
|
|
secc_request_power(secc, POWER_REQUEST_PLACE_FREE, 0, 0);
|
|
|
secc_stop_Transaction(secc);
|
|
secc_stop_Transaction(secc);
|
|
|
{
|
|
{
|
|
|
dev->csd.chgCode = 0x81828385;
|
|
dev->csd.chgCode = 0x81828385;
|
|
|
dev->csd.chgCumulativeKWH = (uint16_t)((secc->EMeters - secc->started_KWh) * 10);
|
|
dev->csd.chgCumulativeKWH = (uint16_t)((secc->EMeters - secc->started_KWh) * 10);
|
|
|
dev->csd.chgCumulativeMintues = (time(NULL) - secc->started_UTC + 30)/60;
|
|
dev->csd.chgCumulativeMintues = (time(NULL) - secc->started_UTC + 30)/60;
|
|
|
- can_GBT27930_send_CSD(dev, &dev->csd);
|
|
|
|
|
- can_GBT27930_wait(dev, GBT_27930_2015_BSD, 1000);
|
|
|
|
|
|
|
+ //can_GBT27930_send_CSD(dev, &dev->csd);
|
|
|
|
|
+ //can_GBT27930_wait(dev, GBT_27930_2015_BSD, 1000);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
printccui("step\n");
|
|
printccui("step\n");
|
|
|
-
|
|
|
|
|
|
|
+ recv_pgn_flag = 0 ;
|
|
|
if (secc->GUN_Error == 0)
|
|
if (secc->GUN_Error == 0)
|
|
|
{
|
|
{
|
|
|
int64_t now_ms = systime_ms();
|
|
int64_t now_ms = systime_ms();
|
|
|
int64_t end_ms = systime_ms() + 5000;
|
|
int64_t end_ms = systime_ms() + 5000;
|
|
|
for (now_ms = systime_ms(); now_ms <= end_ms; now_ms = systime_ms())
|
|
for (now_ms = systime_ms(); now_ms <= end_ms; now_ms = systime_ms())
|
|
|
{
|
|
{
|
|
|
|
|
+
|
|
|
float bmsA = secc->IMeters;
|
|
float bmsA = secc->IMeters;
|
|
|
|
|
+ printf("bmsA =%f\n",bmsA);
|
|
|
|
|
+ RECV_BMS_1(dev,GBT_27930_2015_BSD);
|
|
|
|
|
+ TIME_OUT(dev,recv_pgn_flag);
|
|
|
if (bmsA < 5.0f) { break; }
|
|
if (bmsA < 5.0f) { break; }
|
|
|
msleep(100);
|
|
msleep(100);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- printd("step\n");
|
|
|
|
|
|
|
+ printccui("step\n");
|
|
|
|
|
|
|
|
if (secc->set_K1K2_state(secc, 0, 1000) == 1)
|
|
if (secc->set_K1K2_state(secc, 0, 1000) == 1)
|
|
|
{
|
|
{
|
|
@@ -535,14 +644,23 @@ static int can_GBT27930_Finishing(GBT27930_t* dev)
|
|
|
secc_set_error(secc, GUN_CONTACTOR_FAULT);
|
|
secc_set_error(secc, GUN_CONTACTOR_FAULT);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- printd("step\n");
|
|
|
|
|
|
|
+ printccui("step\n");
|
|
|
|
|
|
|
|
- msleep(100); //临时措施,保证CEM发送
|
|
|
|
|
-
|
|
|
|
|
|
|
+ if((wait_BSD_time +10000) > systime_ms() ){
|
|
|
|
|
+ wait_BSD_time = wait_BSD_time +10001 -systime_ms();
|
|
|
|
|
+ }
|
|
|
|
|
+ WAIT_CONDI(
|
|
|
|
|
+ wait_time,wait_BSD_time,
|
|
|
|
|
+ TIME_OUT(dev,GBT_27930_2015_BSD);
|
|
|
|
|
+ ,
|
|
|
|
|
+ int ret = can_GBT27930_waits(dev,1,GBT_27930_2015_BSD);
|
|
|
|
|
+ if((ret == GBT_27930_2015_BSD)||(_27930_recvFlag.GBT_27930_2015_BSD_recv==1))break;
|
|
|
|
|
+ );
|
|
|
|
|
+ usleep(500000); //临时措施,保证CEM/CSD发送
|
|
|
can_APP_clear(0);
|
|
can_APP_clear(0);
|
|
|
secc->set_Aux12V_state(secc, 0);
|
|
secc->set_Aux12V_state(secc, 0);
|
|
|
|
|
|
|
|
- printd("step\n");
|
|
|
|
|
|
|
+ printccui("step\n");
|
|
|
|
|
|
|
|
if (secc->set_ELock_state(secc, 0, 1000)==1)
|
|
if (secc->set_ELock_state(secc, 0, 1000)==1)
|
|
|
{
|
|
{
|
|
@@ -602,6 +720,7 @@ void* can_GBT27930_loop(void* argv)
|
|
|
case GUN_CHARGING: { can_GBT27930_Charging(dev); } break;
|
|
case GUN_CHARGING: { can_GBT27930_Charging(dev); } break;
|
|
|
case GUN_SUSPEND: break;
|
|
case GUN_SUSPEND: break;
|
|
|
case GUN_STOPPING: { can_GBT27930_Finishing(dev); } break;
|
|
case GUN_STOPPING: { can_GBT27930_Finishing(dev); } break;
|
|
|
|
|
+ case GUN_EMERGRNCY_STOP:{ can_GBT27930_EMERGRNCY_STOP(dev); break;}
|
|
|
case GUN_COMFALUT: { }break;
|
|
case GUN_COMFALUT: { }break;
|
|
|
default: { }break;
|
|
default: { }break;
|
|
|
}
|
|
}
|