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 | IoDrvWriteOutputs_Count := IoDrvWriteOutputs_Count + 1; IF pConnectorMapList = 0 OR nCount = 0 THEN IoDrvWriteOutputs := Errors.ERR_PARAMETER; RETURN; END_IF FOR i:=0 TO nCount - 1 DO IF (pConnectorMapList[i].dwNumOfChannels = 0) THEN CONTINUE; END_IF wSrcIndex := pConnectorMapList[i].pChannelMapList[j].wIecAddressBitOffset / 8; IF (pConnectorMapList[i].pChannelMapList[j].pParameter^.dwDriverSpecific = 0) THEN IF pConnectorMapList[i].pChannelMapList[j].wSize = 1 THEN bySrcValue := pbyIecAddress[wSrcIndex]; IF (pbyIecAddress[wSrcIndex] AND SHL(BYTE#1, pConnectorMapList[i].pChannelMapList[j].wIecAddressBitOffset MOD 8)) <> 0 THEN {IF defined (pou:SysCpuSetBit2)} SysCpuSetBit(pbyDO, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); {END_IF} ELSE {IF defined (pou:SysCpuResetBit2)} SysCpuResetBit(pbyDO, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); { END_IF} END_IF ELSIF pConnectorMapList[i].pChannelMapList[j].wSize = 8 THEN pbyDO := ADR(_TestFB.byDigitalOut) + wParameterByteOffset; pbyDO^ := pbyIecAddress[wSrcIndex]; END_IF END_IF //Analog Out dwChannel := pConnectorMapList[i].pChannelMapList[j].pParameter^.dwParameterId - 2100; _TestFB.awAnalogOut[dwChannel] := pbyIecAddress[wSrcIndex]; //Control Byte pbyCB := ADR(_TestFB.byControlByte) + wParameterByteOffset; SysCpuSetBit(pbyCB, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); SysCpuResetBit(pbyCB, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); pbyCB := ADR(_TestFB.byControlByte) + wParameterByteOffset; pbyCB^ := pbyIecAddress[wSrcIndex]; //HW Config SysCpuSetBit2(pbyHWC, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); SysCpuResetBit2(pbyHWC, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); IF (pConnectorMapList[i].pChannelMapList[j].pParameter^.dwDriverSpecific = 5) THEN pbyUL := ADR(_TestFB.byUserLeds) + wParameterByteOffset; SysCpuSetBit(pbyUL, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); SysCpuResetBit(pbyUL, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); pbyUL := ADR(_TestFB.byUserLeds) + wParameterByteOffset; pbyUL^ := pbyIecAddress[wSrcIndex]; //User Leds Mask pbyULM := ADR(_TestFB.byUserLedMask) + wParameterByteOffset; SysCpuSetBit(pbyULM, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); SysCpuResetBit(pbyULM, pConnectorMapList[i].pChannelMapList[j].wParameterBitOffset MOD 8); |