FUNCTION "EXPT_UINT" : Void { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT iBaseValue : UInt; iExponentiate : UInt; END_VAR VAR_OUTPUT diResult : UDInt; xError_ExceedLimit : Bool; END_VAR VAR_TEMP _ivar_i : UInt; END_VAR VAR CONSTANT udiMaxValueUdint : UDInt := 4_294_967_295; END_VAR BEGIN #xError_ExceedLimit := FALSE; IF #iBaseValue > 0 THEN IF #iExponentiate > 0 THEN #diResult := 1; FOR #_ivar_i := 1 TO #iExponentiate DO IF #diResult > #udiMaxValueUdint / UINT_TO_UDINT(#iBaseValue) THEN #xError_ExceedLimit := true; EXIT; END_IF; #diResult := #diResult * #iBaseValue; END_FOR; ELSIF #iExponentiate = 0 THEN #diResult := 1; ELSE #diResult := 0;//abnormal END_IF; ELSE #diResult := 0; END_IF; END_FUNCTION