TIA PORTAL Configurazione dinamica - TIA CFG DIN - 4

 PASSO 2

Vista la parte di configurazione del rack della CPU ora rimane da esplorare la parte di configurazione della perifieria. Come abbiamo detto in precedenza per configurare la periferia basata sui moduli della famiglia "ET200SP" dobbiamo utilizzare delle strutture dati differenti. Focalizziamoci ora sulla configurazione di dispositivi di IO, vedi figura "Configurazione Hw PLC". I dispositivi di IO nel mio caso sono gli inverter G120C, G120, master IOLink ed encoder. In questo caso la libreria che andremo ad utilizzare è la "LCC_ReconfigSys". 

- b -

Presentiamo la FB con le sue interfacce ed i suoi tipi di dati

FB LCC_ReconfigSys 

 

 

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//search how many devices there are on the real configuration
#Cnt := 0;
#indexcfg := 0;
FOR #index := 0 TO 66 DO
    "ohDataset".ctrlRec.OptDevices[#index] := 0;
    IF "Configurator".Config.PLC_IO_Configuration.IOConfig[#index].Name <> "DEVICE_NOT_DEFINED" THEN
        IF "Configurator".Config.PLC_IO_Configuration.IOConfig[#index].Presence THEN
             #Cnt := #Cnt + 1;
             "ohDataset".ctrlRec.OptDevices[#indexcfg] := "Configurator".Config.PLC_IO_Configuration.IOConfig[#index].ValHwDevice;
             #indexcfg := #indexcfg + 1;
             IF #indexcfg >= 33 THEN
                  EXIT;
             END_IF;
        END_IF;
    END_IF;
END_FOR;

"NumIoDevice" := #Cnt;

//adjust data structure value according the configuration
"ohDataset".ctrlRec.numOptDevices := INT_TO_UINT(#Cnt);
"ohDataset".ctrlRec.version := 16#0100;
//reconfig the IO
//reset the variables
"LccReconfigErrInfo" := 0;
"LccReconfigStatus" := 0;
REPEAT

      "LCC_ReconfigSys_DB"(execute := TRUE,
                                       hwID := 64,
                                       ctrlRec := "ohDataset".ctrlRec,
                                       done => "LccReconfigDone",
                                       busy => "LccReconfigBusy",
                                       error => "LccReconfigError",
                                       status => "LccReconfigStatus",
                                       errorInfo => "LccReconfigErrInfo");

      UNTIL "LccReconfigDone" OR "LccReconfigError"
END_REPEAT;
"System".Sts.IOconfigOk := "LccReconfigDone" AND NOT "LccReconfigError";

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------