GVL_CONFIG.rMaxAbsDiffVoltageModulesInString THEN _xBalanceOk := FALSE; END_IF // Test module 1 with module 3 IF ABS(_fbModule1.rCurrentVoltage - _fbModule3.rCurrentVoltage) > GVL_CONFIG.rMaxAbsDiffVoltageModulesInString THEN _xBalanceOk := FALSE; END_IF // Test module 2 with module 3 IF ABS(_fbModule2.rCurrentVoltage - _fbModule3.rCurrentVoltage) > GVL_CONFIG.rMaxAbsDiffVoltageModulesInString THEN _xBalanceOk := FALSE; END_IF // Signal an error if all units are ready and module is out of balance IF _xAllModulesReady AND (NOT _xBalanceOk) THEN xError := TRUE; END_IF // Raise error IF (NOT _xBalanceOk) AND (NOT _fbModulesOutOfBalanceAlarm.bRaised) THEN _fbModulesOutOfBalanceAlarm.Raise(0); END_IF // Clear error IF _xBalanceOk AND _fbModulesOutOfBalanceAlarm.bRaised THEN _fbModulesOutOfBalanceAlarm.Clear(0, FALSE); END_IF // Confirm error IF _fbModulesOutOfBalanceAlarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xConfirmAlarms THEN _fbModulesOutOfBalanceAlarm.Confirm(0); END_IF // =============================== // String ready validation check // =============================== IF _xAllModulesReady AND _xBalanceOk THEN xReady := TRUE; ELSE xReady := FALSE; END_IF // =============================== // String status sum // =============================== IF xOff THEN eStatus := E_COMPONENT_STATUS.OFF; END_IF IF xReady THEN eStatus := E_COMPONENT_STATUS.ON; END_IF IF xError THEN eStatus := E_COMPONENT_STATUS.ERROR; END_IF]]>