Technical FAQs

Ask a Question

IMC implicit exchanges (DRIVE_PIx/POx) do not start when an Extended IO option board is present

When an Extended IO card is present in ATV71 and when IMC card (v4.0ie13 and below) is supplied separately by its +24V connector, implicit exchanges (DRIVE_PIx/POx) do not start when the following sequence is applied:
- switch off ATV71 AC power
- wait for the communication between the drive and the card to be lost
- switch on ATV71 AC power -> implicit exchanges between ATV and IMC do not start (DRIVE_PIx = 0)

A workaround is to copy-paste in Drive_Start POU the following code to configure implicit exchanges:
In declaration part :
wRetry: WORD:=0 ;

In code part :
CASE wStateInitialization OF
        1:
         (* Initializing Cyclic data exchange Read*)
        DriveParameterCyclicReadSet(
                addrDRIVE_PI1:= 3207,        (* for example to read line voltage (ULN) *)
                addrDRIVE_PI2:= xxx,        (*Uncomment the line to map a Drive parameter to DRIVE_PI2*)
                addrDRIVE_PI3:= xxx,        (*Uncomment the line to map a Drive parameter to DRIVE_PI3*)
                addrDRIVE_PI4:= xxx,        (*Uncomment the line to map a Drive parameter to DRIVE_PI4*)
                addrDRIVE_PI5:= xxx,    (*Uncomment the line to map a Drive parameter to DRIVE_PI5*)
                addrDRIVE_PI6:= xxx,    (*Uncomment the line to map a Drive parameter to DRIVE_PI6*)
                addrDRIVE_PI7:= xxx,        (*Uncomment the line to map a Drive parameter to DRIVE_PI7*)
                addrDRIVE_PI8:= xxx,        (*Uncomment the line to map a Drive parameter to DRIVE_PI8*)
            bExecute:= TRUE);
        (* on some configuration, the request is taken into account by the drive after more than 1 second,
            for example with an IoExtended board. So we need to manage 500 retry *)        
        IF DriveParameterCyclicReadSet.bError AND wRetry < 500 THEN
            wRetry := wRetry + 1;
        ELSIF DriveParameterCyclicReadSet.bDone THEN

            wStateInitialization:=2;
            wRetry := 0;
        END_IF

    2:
         (* Initializing Cyclic data exchange Write*)
        DriveParameterCyclicWriteSet(
                addrDRIVE_PO1:= xxx,         (*Uncomment the line to map a Drive parameter to DRIVE_PO1*)
                addrDRIVE_PO2:= xxx,        (*Uncomment the line to map a Drive parameter to DRIVE_PO2*)
                addrDRIVE_PO3:= xxx,        (*Uncomment the line to map a Drive parameter to DRIVE_PO3*)
                addrDRIVE_PO4:= xxx,        (*Uncomment the line to map a Drive parameter to DRIVE_PO4*)
                (*addrDRIVE_PO5:= ,*)        (*Uncomment the line to map a Drive parameter to DRIVE_PO5*)
                (*addrDRIVE_PO6:= ,*)        (*Uncomment the line to map a Drive parameter to DRIVE_PO6*)
                (*addrDRIVE_PO7:= ,*)        (*Uncomment the line to map a Drive parameter to DRIVE_PO7*)
                (*addrDRIVE_PO8:= ,*)        (*Uncomment the line to map a Drive parameter to DRIVE_PO8*)
        bExecute:=TRUE );
        IF DriveParameterCyclicWriteSet.bError AND wRetry < 500 THEN
            wRetry := wRetry + 1;
        ELSIF DriveParameterCyclicWriteSet.bDone THEN

            wStateInitialization:=3;
            wRetry := 0;
        END_IF

    3:    Display_RestoreSavedParameters();


 
Was this helpful?
What can we do to improve the information ?