|
@@ -17,12 +17,12 @@
|
|
|
|
|
|
#include <unistd.h>
|
|
|
#include <stdarg.h>
|
|
|
-#include <stdio.h> /*標準輸入輸出定義*/
|
|
|
-#include <stdlib.h> /*標準函數庫定義*/
|
|
|
-#include <unistd.h> /*Unix 標準函數定義*/
|
|
|
-#include <fcntl.h> /*檔控制定義*/
|
|
|
-#include <termios.h> /*PPSIX 終端控制定義*/
|
|
|
-#include <errno.h> /*錯誤號定義*/
|
|
|
+#include <stdio.h> /*璅蹱�頛詨�頛詨枂摰𡁶儔*/
|
|
|
+#include <stdlib.h> /*璅蹱��賣彍摨怠�蝢�*/
|
|
|
+#include <unistd.h> /*Unix 璅蹱��賣彍摰𡁶儔*/
|
|
|
+#include <fcntl.h> /*瑼娍綉�嗅�蝢�*/
|
|
|
+#include <termios.h> /*PPSIX 蝯�垢�批�摰𡁶儔*/
|
|
|
+#include <errno.h> /*�航炊�笔�蝢�*/
|
|
|
#include <errno.h>
|
|
|
#include <string.h>
|
|
|
#include <time.h>
|
|
@@ -61,16 +61,16 @@ float _outCur_1 = 0;
|
|
|
float _outVol_2 = 0;
|
|
|
float _outCur_2 = 0;
|
|
|
|
|
|
-// 限制最大充電電壓,因應不同 type 槍線來限制
|
|
|
+// �𣂼���憭批��駁𤓖憯橒��䭾�銝滚� type 瑽滨�靘����
|
|
|
// Chademo : 500V, 125A,
|
|
|
// GB : 750, 120A
|
|
|
// CCS : 950V, 120A
|
|
|
-float maxChargingVol[2] = { 5000, 9500 }; // 限制最大充電電壓,如依照模塊則填上 0
|
|
|
-// 限制最大充電電流與能量透過 Web
|
|
|
-float maxChargingCur[2] = { 5000, 1200 }; // 限制最大充電電流,如依照模塊則填上 0
|
|
|
-float maxChargingPow = 0; // 限制最大充電能量,如依照模塊則填上 0
|
|
|
+float maxChargingVol[2] = { 5000, 9500 }; // �𣂼���憭批��駁𤓖憯橒�憒���扳芋憛𠰴�憛思� 0
|
|
|
+// �𣂼���憭批��駁𤓖瘚���賡��誯� Web
|
|
|
+float maxChargingCur[2] = { 5000, 1200 }; // �𣂼���憭批��駁𤓖瘚��憒���扳芋憛𠰴�憛思� 0
|
|
|
+float maxChargingPow = 0; // �𣂼���憭批��餉��𧶏�憒���扳芋憛𠰴�憛思� 0
|
|
|
|
|
|
-// 槍資訊
|
|
|
+// 瑽滩�閮�
|
|
|
struct ChargingInfoData *_chargingData[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
|
|
|
struct Ev_Board_Cmd Ev_Cmd = {
|
|
@@ -2142,7 +2142,7 @@ void CANReceiver()
|
|
|
struct can_frame frame;
|
|
|
int intCmd;
|
|
|
|
|
|
- // 槍資訊
|
|
|
+ // 瑽滩�閮�
|
|
|
struct ChargingInfoData *_chargingData[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
struct timeval _cmd_ack_timeout[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
|
|
@@ -2355,7 +2355,7 @@ void CANReceiver()
|
|
|
}
|
|
|
break;
|
|
|
case NOTIFICATION_EV_STOP: {
|
|
|
- // 車端要求停止
|
|
|
+ // 頠羓垢閬���𨀣迫
|
|
|
// frame.data[0] : 0x01 => normal stop, 0x02 => ev emergency stop
|
|
|
PRINTF_FUNC("(%d) NOTIFICATION_EV_STOP err level = %d-----------------------------\n", targetGun, frame.data[0]);
|
|
|
//if (frame.data[0] == 0x02)
|
|
@@ -2378,9 +2378,9 @@ void CANReceiver()
|
|
|
//================================================
|
|
|
// Main process
|
|
|
//================================================
|
|
|
-// 檢查 Byte 中某個 Bit 的值
|
|
|
-// _byte : 欲改變的 byte
|
|
|
-// _bit : 該 byte 的第幾個 bit
|
|
|
+// 瑼X䰻 Byte 銝剜��� Bit ����
|
|
|
+// _byte : 甈脫㺿霈羓� byte
|
|
|
+// _bit : 閰� byte ��洵撟曉�� bit
|
|
|
unsigned char EvDetectionStatus(unsigned char _byte, unsigned char _bit)
|
|
|
{
|
|
|
return ( _byte & mask_table[_bit] ) != 0x00;
|
|
@@ -2645,7 +2645,7 @@ int main(int argc, char *argv[])
|
|
|
while (CanFd) {
|
|
|
for (byte _index = 0; _index < gun_count; _index++) {
|
|
|
if (priorityLow == 1) {
|
|
|
- // 優先權較低 - 只要有回應即不會再詢問
|
|
|
+ // �芸�甈𡃏�雿� - �芾��匧��匧朖銝齿��滩岷��
|
|
|
if (_chargingData[_index]->Type == _Type_Chademo &&
|
|
|
ShmCHAdeMOData->evse[_chargingData[_index]->type_index].SelfTest_Comp != PASS) {
|
|
|
SyncRtcInfo(_index, _chargingData[_index]->Evboard_id, (int)rtc);
|
|
@@ -2662,7 +2662,7 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 固定要取得的資訊 : 1.槍鎖狀態, 2."Connector 1" 溫度, 3."Connector 2" 溫度, 4.Pilot Voltage
|
|
|
+ // �箏�閬��敺㛖�鞈�� : 1.瑽漤�����, 2."Connector 1" 皞怠漲, 3."Connector 2" 皞怠漲, 4.Pilot Voltage
|
|
|
//PRINTF_FUNC("GetMiscellaneousInfo. index = %d, Eid = %d \n", _index, _chargingData[_index]->Evboard_id);
|
|
|
GetMiscellaneousInfo(_index,
|
|
|
_chargingData[_index]->RelayK1K2Status,
|
|
@@ -2701,7 +2701,7 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
break;
|
|
|
case S_PREPARNING: {
|
|
|
- // 設定當前輸出
|
|
|
+ // 閮剖��嗅�頛詨枂
|
|
|
if (gun_count == 1) {
|
|
|
SetPresentChargingOutputPower(_chargingData[0], _chargingData[0]);
|
|
|
} else if (gun_count == 2) {
|
|
@@ -2712,7 +2712,7 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
break;
|
|
|
case S_PREPARING_FOR_EV: {
|
|
|
- // 開始確認車端是否同意開始充電 : 1.SOC, 2.Target Vol, 3.Target Cur, 4.Charging remaining time
|
|
|
+ // �见�蝣箄�頠羓垢�臬炏�峕��见���𤓖 : 1.SOC, 2.Target Vol, 3.Target Cur, 4.Charging remaining time
|
|
|
GetOutputReq(_index, _chargingData[_index]->Evboard_id);
|
|
|
|
|
|
// PRINTF_FUNC("PresentChargingVoltage = %f \n", _chargingData[_index]->PresentChargingVoltage);
|
|
@@ -2721,7 +2721,7 @@ int main(int argc, char *argv[])
|
|
|
// PRINTF_FUNC("AvailableChargingCurrent = %f \n", _chargingData[_index]->AvailableChargingCurrent);
|
|
|
// PRINTF_FUNC("MaximumChargingVoltage = %f \n", _chargingData[_index]->MaximumChargingVoltage);
|
|
|
|
|
|
- // 設定當前輸出
|
|
|
+ // 閮剖��嗅�頛詨枂
|
|
|
if (gun_count == 1) {
|
|
|
SetPresentChargingOutputPower(_chargingData[0], _chargingData[0]);
|
|
|
} else if (gun_count == 2) {
|
|
@@ -2730,7 +2730,7 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
if (priorityLow == 1) {
|
|
|
float maxVol, maxCur;
|
|
|
- // 樁端輸出能力
|
|
|
+ // 璅�垢頛詨枂�賢�
|
|
|
maxVol = _chargingData[_index]->MaximumChargingVoltage;
|
|
|
maxCur = _chargingData[_index]->AvailableChargingCurrent;
|
|
|
|
|
@@ -2746,7 +2746,7 @@ int main(int argc, char *argv[])
|
|
|
maxVol,
|
|
|
_chargingData[_index]->Evboard_id);
|
|
|
|
|
|
- // 取得車端電池資訊 : 1.AC or DC ? 2.Total battery cap, 3.Max battery vol, 4.Max battery cur
|
|
|
+ // �硋�頠羓垢�餅�鞈�� : 1.AC or DC ? 2.Total battery cap, 3.Max battery vol, 4.Max battery cur
|
|
|
GetEvBatteryInfo(_index, _chargingData[_index]->Evboard_id);
|
|
|
}
|
|
|
gettimeofday(&_chk_ratingPower_timeout[_index], NULL);
|
|
@@ -2755,10 +2755,10 @@ int main(int argc, char *argv[])
|
|
|
case S_PREPARING_FOR_EVSE:
|
|
|
case S_CCS_PRECHARGE_ST0:
|
|
|
case S_CCS_PRECHARGE_ST1: {
|
|
|
- // 開始確認車端是否同意開始充電
|
|
|
+ // �见�蝣箄�頠羓垢�臬炏�峕��见���𤓖
|
|
|
GetOutputReq(_index, _chargingData[_index]->Evboard_id);
|
|
|
|
|
|
- // 設定當前輸出
|
|
|
+ // 閮剖��嗅�頛詨枂
|
|
|
if (gun_count == 1) {
|
|
|
SetPresentChargingOutputPower(_chargingData[0], _chargingData[0]);
|
|
|
} else if (gun_count == 2) {
|
|
@@ -2766,16 +2766,16 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
|
|
|
if (priorityLow % 5 == 1) {
|
|
|
- // 樁端輸出能力改變
|
|
|
+ // 璅�垢頛詨枂�賢��寡�
|
|
|
if (gun_count == 1) {
|
|
|
SetPresentChargingOutputCap(_chargingData[0], _chargingData[0]);
|
|
|
} else if (gun_count == 2) {
|
|
|
SetPresentChargingOutputCap(_chargingData[0], _chargingData[1]);
|
|
|
}
|
|
|
}
|
|
|
- // 持續通知 Isolation 測試狀態
|
|
|
+ // ����𡁶䰻 Isolation 皜祈岫����
|
|
|
if (priorityLow == 1) {
|
|
|
- // 拉 500 V 如果在一秒鐘內 GFD 都符合則 PASS
|
|
|
+ // �� 500 V 憒���其�蝘㘾��� GFD �賜泵��� PASS
|
|
|
// if (_chargingData[_index]->FireChargingVoltage >= 3500)
|
|
|
// _chargingData[_index]->GroundFaultStatus = GFD_PASS;
|
|
|
|
|
@@ -2785,7 +2785,7 @@ int main(int argc, char *argv[])
|
|
|
//if ((GetTimeoutValue(_derating_time) / 1000) > 1000)
|
|
|
unsigned char _result = _chargingData[_index]->GroundFaultStatus;
|
|
|
|
|
|
- // GB & Chademo ~ Warning 也先算 Pass,因為 CCS 認證會驗 Warning 故不可更動
|
|
|
+ // GB & Chademo ~ Warning 銋笔�蝞� Pass嚗���� CCS 隤滩���� Warning ����舀凒��
|
|
|
if (_chargingData[_index]->Type == _Type_Chademo ||
|
|
|
_chargingData[_index]->Type == _Type_GB) {
|
|
|
if (_result == GFD_WARNING) {
|
|
@@ -2816,7 +2816,7 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
break;
|
|
|
case S_CHARGING: {
|
|
|
- // 計算 Power
|
|
|
+ // 閮�� Power
|
|
|
_chargingData[_index]->PresentChargingPower = ((float)((_chargingData[_index]->PresentChargingVoltage) * (_chargingData[_index]->PresentChargingCurrent)) / 1000);
|
|
|
|
|
|
if (chargingTime[_index] == 0 ||
|
|
@@ -2837,10 +2837,10 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 開始確認車端是否同意開始充電
|
|
|
+ // �见�蝣箄�頠羓垢�臬炏�峕��见���𤓖
|
|
|
GetOutputReq(_index, _chargingData[_index]->Evboard_id);
|
|
|
|
|
|
- // 設定當前輸出
|
|
|
+ // 閮剖��嗅�頛詨枂
|
|
|
if (gun_count == 1) {
|
|
|
SetPresentChargingOutputPower(_chargingData[0], _chargingData[0]);
|
|
|
} else if (gun_count == 2) {
|
|
@@ -2849,7 +2849,7 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
// for test end
|
|
|
if (priorityLow % 5 == 0) {
|
|
|
- // 樁端輸出能力改變
|
|
|
+ // 璅�垢頛詨枂�賢��寡�
|
|
|
if (gun_count == 1) {
|
|
|
SetPresentChargingOutputCap(_chargingData[0], _chargingData[0]);
|
|
|
} else if (gun_count == 2) {
|
|
@@ -2863,7 +2863,7 @@ int main(int argc, char *argv[])
|
|
|
SetIsolationStatus(_index, _chargingData[_index]->GroundFaultStatus, _chargingData[_index]->Evboard_id);
|
|
|
}
|
|
|
|
|
|
- // GFD 失敗再通知
|
|
|
+ // GFD 憭望��漤�𡁶䰻
|
|
|
if (priorityLow == 1) {
|
|
|
if (_chargingData[_index]->Type == _Type_CCS_2 &&
|
|
|
_chargingData[_index]->PrechargeStatus == PRECHARGE_READY) {
|
|
@@ -2873,14 +2873,14 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
break;
|
|
|
case S_TERMINATING: {
|
|
|
- // 設定當前輸出
|
|
|
+ // 閮剖��嗅�頛詨枂
|
|
|
if (gun_count == 1) {
|
|
|
SetPresentChargingOutputPower(_chargingData[0], _chargingData[0]);
|
|
|
} else if (gun_count == 2) {
|
|
|
SetPresentChargingOutputPower(_chargingData[0], _chargingData[1]);
|
|
|
}
|
|
|
|
|
|
- // 槍鎖還在,則代表是樁端要求的停止
|
|
|
+ // 瑽漤���銁嚗��隞�”�舀�蝡航�瘙���𨀣迫
|
|
|
if (_chargingData[_index]->GunLocked == START ||
|
|
|
_chargingData[_index]->Type == _Type_CCS_2) {
|
|
|
byte normalStop = 0x01;
|
|
@@ -2901,7 +2901,7 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
break;
|
|
|
case S_COMPLETE: {
|
|
|
- // 設定當前輸出
|
|
|
+ // 閮剖��嗅�頛詨枂
|
|
|
if (gun_count == 1) {
|
|
|
SetPresentChargingOutputPower(_chargingData[0], _chargingData[0]);
|
|
|
} else if (gun_count == 2) {
|
|
@@ -2911,7 +2911,7 @@ int main(int argc, char *argv[])
|
|
|
if (priorityLow == 1) {
|
|
|
float maxVol, maxCur;
|
|
|
|
|
|
- // 樁端輸出能力
|
|
|
+ // 璅�垢頛詨枂�賢�
|
|
|
maxVol = _chargingData[_index]->MaximumChargingVoltage;
|
|
|
maxCur = _chargingData[_index]->AvailableChargingCurrent;
|
|
|
|
|
@@ -2927,7 +2927,7 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
}
|
|
|
priorityLow >= 20 ? priorityLow = 1 : priorityLow++;
|
|
|
- usleep(45000); //EV 小板通訊 (50 ms)
|
|
|
+ usleep(45000); //EV 撠𤩺踎�朞� (50 ms)
|
|
|
}
|
|
|
DEBUG_INFO("Module_EvComm : Can-bus port = %d \n", CanFd);
|
|
|
return FAIL;
|