METHOD BeforeWriteOutputs : INT
VAR
i: USINT;
inVal:UINT;
inSVal:USINT;
buff: ARRAY[0..2] OF USINT;
wStat: BOOL;
SUPER^.BeforeWriteOutputs();
IF _iState = 10 THEN
inVal:= REAL_TO_UINT(udtOutput.dacVoltage * 4096 / 3.3);
IF inVal > 4095 THEN
inVal := 4095;
END_IF
IF inVal <> dacRawValue THEN
buff[0] := MEGAIO_DAC_ADD;
buff[1] := UINT_TO_USINT(inVal / 256);
buff[2] := UINT_TO_USINT(inVal - (inVal / 256));
i := DINT_TO_USINT(write(ADR(buff), 3));
IF i = 3 THEN
dacRawValue := inVal;
END_IF
inSVal:= 0;
FOR i:= 0 TO 7 DO
inSVal:= inSVal + SHL(BOOL_TO_USINT(udtOutput.gpioDir[i]), i);
IF inSVal <> gpioDirRaw THEN
IF write8(GPIO_DIR_ADD, inSVal) THEN
gpioDirRaw:=inSVal;
IF gpioOutLastState[i] <> udtOutput.gpioOut[i] THEN
IF udtOutput.gpioOut[i] THEN
wStat:= write8(GPIO_SET_ADD, i+1);
wStat:= write8(GPIO_CLR_ADD, i+1);
gpioOutLastState[i] := udtOutput.gpioOut[i];
END_IF
_BeforeWriteOutputs := _BeforeWriteOutputs + 1;