1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 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(stIn.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(stIn.relayState[i]), i); END_FOR IF inSVal <> relayRaw THEN IF write8(0, inSVal) THEN relayRaw:=inSVal; END_IF FOR i:= 0 TO 3 DO //inSVal:= inSVal + SHL(BOOL_TO_USINT(openDrainState[i]), i); IF stIn.openDrainState[i] <> odLastState[i] THEN IF stIn.openDrainState[i] THEN wStat:= write8(OC_SET_ADD, i+1); ELSE wStat:= write8(OC_CLR_ADD, i+1); END_IF IF wStat THEN odLastState[i]:= stIn.openDrainState[i]; FOR i:= 0 TO 5 DO inSVal:= inSVal + SHL(BOOL_TO_USINT(stIn.gpioDir[i]), i); IF inSVal <> gpioDirRaw THEN IF write8(GPIO_DIR_ADD, inSVal) THEN gpioDirRaw:=inSVal; IF gpioOutLastState[i] <> stIn.gpioOut[i] THEN IF stIn.gpioOut[i] THEN wStat:= write8(GPIO_SET_ADD, i+1); wStat:= write8(GPIO_CLR_ADD, i+1); gpioOutLastState[i] := stIn.gpioOut[i]; END_IF |