MODULE MainModule VAR num num1; VAR num num2;PROC main() num2 := -3.14; SetGO go1, SetData(\FLOAT,num2); WaitTime 0.5; num1 := GetData(\FLOAT,gi1); WaitTime 0.5; num2 := 3.14; SetGO go1, SetData(\FLOAT,num2); WaitTime 0.5; num1 := GetData(\FLOAT,gi1);ENDPROC FUNC num GetData(\switch INT | switch DINT | switch SINT | switch FLOAT,VAR signalgi INPUT_GI) VAR num result; VAR rawbytes rawbyte1; ClearRawBytes rawbyte1; PackRawBytes GInputDnum(INPUT_GI), rawbyte1,1\IntX:=UDINT; IF Present(INT) THEN UnpackRawBytes rawbyte1,1,result\IntX:=-2; ENDIF IF Present(DINT) THEN UnpackRawBytes rawbyte1,1,result\IntX:=-4; ENDIF IF Present(SINT) THEN UnpackRawBytes rawbyte1,1,result\IntX:=-1; ENDIF IF Present(FLOAT) THEN UnpackRawBytes rawbyte1,1,result\Float4; ENDIF RETURN result;ENDFUNC FUNC dnum SetData(\switch INT | switch DINT | switch SINT | switch FLOAT,num data) VAR dnum result; VAR rawbytes rawbyte2; ClearRawBytes rawbyte2; IF Present(INT) THEN PackRawBytes data,rawbyte2,1\IntX:=-2; UnpackRawBytes rawbyte2,1,result\IntX:=UDINT; ENDIF IF Present(DINT) THEN PackRawBytes data,rawbyte2,1\IntX:=-4; UnpackRawBytes rawbyte2,1,result\IntX:=UDINT; ENDIF IF Present(SINT) THEN PackRawBytes data,rawbyte2,1\IntX:=-1; UnpackRawBytes rawbyte2,1,result\IntX:=UDINT; ENDIF IF Present(FLOAT) THEN PackRawBytes data,rawbyte2,1\Float4; UnpackRawBytes rawbyte2,1,result\IntX:=UDINT; ENDIF RETURN result;ENDFUNCENDMODULE