Browse Source

2021-10-04 / Alston Lin
Actions
1. Create a function that controls only one psu output.

Files
1. As follow commit history.

alston 3 years ago
parent
commit
c015b72e8a
2 changed files with 111 additions and 1 deletions
  1. 104 0
      EVSE/Modularization/Infypwr_PsuCommObj.c
  2. 7 1
      EVSE/Modularization/Infypwr_PsuCommObj.h

+ 104 - 0
EVSE/Modularization/Infypwr_PsuCommObj.c

@@ -492,6 +492,25 @@ void ReceiveDataFromCanBus()
                         //PRINTF_LIB_FUNC("address = %d, abVol = %d, bcVol = %d, caVol = %d \n", address, abVol, bcVol, caVol);
                     }
                         break;
+                    case PSU_RCmd_ModuleOutputVolCur_F:
+                    {
+                    	if (!colFinished)
+							break;
+
+						byte vol[4], cur[4];
+
+						memcpy(vol, frame.data, 4);
+						memcpy(cur, frame.data + 4, 4);
+
+						if (!GetRealIndexByGroup(&address))
+							break;
+
+						float _Vol = IEEE_754_to_float(vol);
+						float _Cur = IEEE_754_to_float(cur);
+
+                    	return_get_output(address, _Vol, _Cur);
+                    }
+                    	break;
                     default:
                         break;
                 }
@@ -833,6 +852,91 @@ void SetDipSwitchMode()
 
     SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
 }
+
+void PresentSingleOutput(byte moduleIndex, int voltage, int current)
+{
+	byte data[8];
+    PwrFrame PwrFrameMsg;
+    PwrFrameMsg.PwrMessage = 0;
+    PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_ModuleSetOutput;
+
+	int Vol = voltage * 100;
+	int Cur = current * 100;
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+
+	// 輸出電壓
+	data[0] = (Vol >> 24) & 0xFF;
+	data[1] = (Vol >> 16) & 0xFF;
+	data[2] = (Vol >> 8) & 0xFF;
+	data[3] = Vol & 0xFF;
+	// 輸出電流
+	data[4] = (Cur >> 24) & 0xFF;
+	data[5] = (Cur >> 16) & 0xFF;
+	data[6] = (Cur >> 8) & 0xFF;
+	data[7] = Cur & 0xFF;
+
+	PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
+    PwrFrameMsg.InfyBits.DestinationAddress = moduleIndex;
+    PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
+
+	SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
+}
+
+void SwitchSinglePower(byte moduleIndex, byte value)
+{
+	byte data[8];
+    PwrFrame PwrFrameMsg;
+    PwrFrameMsg.PwrMessage = 0;
+    PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_ModulePowerOnOff;
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+	// 1 : 關機
+	// 0 : 開機
+	data[0] = value;
+
+	PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
+    PwrFrameMsg.InfyBits.DestinationAddress = moduleIndex;
+    PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
+
+	SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
+}
+
+void FlashSingleLed(byte moduleIndex, byte value)
+{
+	byte data[8];
+    PwrFrame PwrFrameMsg;
+    PwrFrameMsg.PwrMessage = 0;
+    PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_ModuleFlashLed;
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+	// 1 : 閃爍
+	// 0 : 正常
+	data[0] = value;
+
+	PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
+    PwrFrameMsg.InfyBits.DestinationAddress = moduleIndex;
+    PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
+
+	SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
+}
+
+void GetSingleModuleOutputF(byte moduleIndex)
+{
+	byte data[8];
+	PwrFrame PwrFrameMsg;
+	PwrFrameMsg.PwrMessage = 0;
+	PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleOutputVolCur_F;
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+
+	PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
+	PwrFrameMsg.InfyBits.DestinationAddress = moduleIndex;
+	PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
+
+	SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
+}
+
 /**********************************************************************************/
 /***                                                                            ***/
 /***                                   Get                                      ***/

+ 7 - 1
EVSE/Modularization/Infypwr_PsuCommObj.h

@@ -236,6 +236,12 @@ void FanNoiseInfo(byte group, byte value);
 void SetWalkInConfig(byte group, byte enable, byte sec);
 void SetDipSwitchMode();
 
+// set only one powermodule to output
+void PresentSingleOutput(byte moduleIndex, int voltage, int current);
+void SwitchSinglePower(byte moduleIndex, byte value);
+void FlashSingleLed(byte moduleIndex, byte value);
+void GetSingleModuleOutputF(byte moduleIndex);
+
 /*Ver : 9.06 used*/
 void SetDirModulePresentOutput(byte group, int voltage, int current, byte _switch, byte _interRelay);
 /*Get Cmd*/
@@ -273,7 +279,7 @@ void RefreshInputVol(void *func);
 void (*return_input_vol)(byte address, unsigned short vol1, unsigned short vol2, unsigned short vol3);
 
 void RefreshGetOutput(void *func);
-void (*return_get_output)(byte address, unsigned short outVol, unsigned short outCur);
+void (*return_get_output)(byte address, float outVol, float outCur);
 
 void RefreshGetOutputF(void *func);
 void (*return_get_output_float)(byte group, float outVol, float outCur);