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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | VAR_INPUT nCount : DINT; VAR // connectors pChildChild : POINTER TO IoConfigConnector; pdwGPIONr : POINTER TO UINT; pszSysFsPrefix : POINTER TO STRING; pszGPIODirName : POINTER TO STRING; Result : RTS_IEC_RESULT; m_pConnector := IoMgrConfigGetConnector(pConnectorList, ADR(nCount), m_wModuleType, m_dwInstance); IF m_pConnector = 0 THEN IoDrvUpdateConfiguration := ERRORS.ERR_PARAMETER; //check if device is enabled in the device tree _bDeactivated := NOT IsConnectorEnabled(m_pConnector); IF m_pConnector^.hIoDrv = 0 THEN //always needed for reconfigure! m_pConnector^.hIoDrv := m_hInterface; m_pConnector^.pFather^.hIoDrv := m_hInterface; IF _bDeactivated THEN IoDrvUpdateConfiguration := CmpErrors.Errors.ERR_OK; IF m_pConnector^.hIoDrv = m_hInterface THEN {IF defined (pou:IoMgrConfigSetDiagnosis)} IoMgrConfigSetDiagnosis(m_pConnector, ConnectorFlags.CF_DRIVER_AVAILABLE OR ConnectorFlags.CF_CONNECTOR_FOUND OR ConnectorFlags.CF_CONNECTOR_CONFIGURED OR ConnectorFlags.CF_CONNECTOR_ACTIVE); {END_IF} IoMgrConfigSetDiagnosis(m_pConnector^.pFather, {IF defined (pou:IoMgrSetDriverProperties)} //Note: background diagnosis property flag is optional (supported with 3.5.1.0 runtime) {END_IF} //Go through all childs of the device pChildChild := IoMgrConfigGetFirstChild(pChild, ADR(nCount), m_pConnector); WHILE (pChildChild <> 0) DO IF IsConnectorEnabled(pChildChild) THEN pChildChild^.hIoDrv := m_hInterface; {IF defined (pou:IoMgrConfigSetDiagnosis)} IoMgrConfigSetDiagnosis(pChildChild, ConnectorFlags.CF_DRIVER_AVAILABLE OR ConnectorFlags.CF_CONNECTOR_FOUND); {END_IF} //Read magic boolean flag nr pParameter := IoMgrConfigGetParameter(pChildChild, 10000); IF pParameter <> 0 THEN IoDrvUpdateConfiguration := CmpErrors.Errors.ERR_EXCEPTION; strLogMessage := CONCAT(strLogMessage,' exceeds max possible nr of gpios: '); CmpLog.LogAdd2(CmpLog.LOG_STD_LOGGER, 0,CmpLog.LogClass.LOG_EXCEPTION, CmpErrors.Errors.ERR_EXCEPTION, 0,strLogMessage ); {IF defined (pou:IoMgrConfigSetDiagnosis)} IoMgrConfigSetDiagnosis(pChildChild, ConnectorFlags.CF_CONNECTOR_ERROR OR ConnectorFlags.CF_CONNECTOR_BUS_ERROR); {END_IF} RETURN; END_IF // pParameter := IoMgrConfigGetParameter(pChildChild, 5001); IF pParameter <> 0 THEN pszGPIODirName := IoMgrConfigGetParameterValuePointer(pParameter, ADR(Result)); //Input IoDrvUpdateConfiguration := CmpErrors.Errors.ERR_EXCEPTION; strLogMessage := CONCAT(strLogMessage,') is already assigned as input. Check and fix the configuration.'); strLogMessage := CONCAT(strLogMessage,') is already assigned as output. Check and fix the configuration.'); GPIOUsedIn := GPIOUsedIn OR SHL(1,pdwGPIONr^); ConnectorFlags.CF_CONNECTOR_CONFIGURED OR ConnectorFlags.CF_CONNECTOR_ACTIVE); pParameter := IoMgrConfigGetParameter(pChildChild, 2000); (* outputs *) GPIOUsedOut := GPIOUsedOut OR SHL(1,pdwGPIONr^); pChildChild := IoMgrConfigGetNextChild(pChildChild, ADR(nCount), pChild); END_WHILE END_IF |