SlimLine Raspberry libreria eLLabS8CoreMng

  1. Home
  2. Knowledge Base
  3. Controllori SlimLine Raspberry
  4. Programmazione LogicLab
  5. SlimLine Raspberry libreria eLLabS8CoreMng

Questa libreria contiene tutti gli oggetti funzioni ed FBs per la gestione dei moduli di estensione di SlimLine, download libreria, il programma SimpleStartUp descritto in questo articolo si può trovare nel PTP162 (Download).

Utilizzo della libreria

Dopo la creazione di un nuovo progetto (Articolo) occorre aggiungere al progetto la libreria che utilizza oggetti pubblicati dal plug-in di gestione periferiche fornito con il run-time come libreria dinamica. Quindi per utilizzarla occorre importare LLXPlugin_eS8CoreMng.pll (Codice Sfr093, download) oltre al file di libreria eLLabS8CoreMng.plclib (Codice Sfr090, download).

Eseguito il download dei files è possibile importarli nel progetto, dal menù Progetto->Gestore librerie agire su Aggiungi e selezionandoli aggiungerli all'elenco. Una volta aggiunti consiglio di selezionarli e tramite il pulsante UnLink cancellare il riferimento al percorso di installazione. I files aggiunti ora sono parte integrante del progetto e saranno sempre disponibili anche spostando il progetto su altri PC di sviluppo.

Scrittura programma

Nella libreria sono disponibili tutti gli oggetti (Funzioni ed FB) utili per accedere ai vari moduli, consultare la documentazione di libreria per un elenco. Ora è possibile scrivere il programma, all'interno del POU "Test" dobbiamo istanziare ed eseguire il blocco funzione SysCoreManager (Gestore del sistema). Il modulo CPU gestisce i moduli di estensione con una connessione in I2C, quindi occorre passare la definizione del bus I2C utilizzato (Default "/dev/i2c-4"). Abilitando il FB viene attivato il segnale di ready sul bus di estensione ed il circuito di watch dog hardware e tutti i moduli connessi al bus di estensione sono inizializzati.

Per dare un esempio minimo delle funzionalità, ipotizzando di avere connesso al modulo CPU un modulo di espansione I/O Mixed signal, viene eseguita l'acquisizione degli ingressi sia logici che analogici e la gestione delle uscite sia logiche che analogiche.

PROGRAM Test
VAR
    S8Core : SysCoreManager;    (* System core manager *)
    i : UDINT;    (* Auxiliary variable *)
    DInp : DWORD;    (* Digital input value *)
    DOut : DWORD;    (* Digital output value *)
    LpTime : ARRAY[ 0..1 ] OF UDINT;    (* Loop time (uS) *)
    TimeBf : ARRAY[ 0..1 ] OF UDINT;    (* Time buffer (uS) *)
    AnInp : ARRAY[ 0..1 ] OF SysGetAnInp;    (* Analog input acquisition *)
    AnOut : ARRAY[ 0..1 ] OF SysSetAnOut;    (* Analog output management *)
END_VAR

    // -------------------------------------------------------------------------
    // CALCOLO LOOP TIME
    // -------------------------------------------------------------------------
    // Salvo tempo.

    LpTime[0]:=SysGetSysTime(TRUE); //Loop time (uS)

    // -------------------------------------------------------------------------
    // GESTIONE CORE
    // -------------------------------------------------------------------------

    S8Core(Enable:=TRUE, I2CDev:=ADR('/dev/i2c-4'), HWDogTm:=0); //System core manager
    IF NOT(S8Core.Ready) THEN RETURN; END_IF;

    IF (S8Core.Init) THEN
    END_IF;

    // -------------------------------------------------------------------------
    // GESTIONE MODULI I/O
    // -------------------------------------------------------------------------
    // Gestione moduli I/O.

     i:=SysDIOModule(0, ADR(DInp[0]), ADR(DOut[0])); //Modulo "0"

    // -------------------------------------------------------------------------
    // GESTIONE LAMPEGGIO USCITE
    // -------------------------------------------------------------------------
    // Gestione lampeggio uscite.

    IF ((SysGetSysTime(TRUE)-TimeBf[0]) > 100000) THEN TimeBf[0]:=SysGetSysTime(TRUE); DOut:=DOut+1; END_IF;

    // -------------------------------------------------------------------------
    // GESTIONE ANALOGICA
    // -------------------------------------------------------------------------
    // Gestione analogica.

    AnOut[0](Address:=0, Channel:=0, Mode:=AO_MODE#DA_VOLT_0_10);
    AnInp[0](Address:=0, Channel:=0, Mode:=AI_MODE#AD_VOLT_0_10_COMMON);

    AnOut[1](Address:=0, Channel:=1, Mode:=AO_MODE#DA_VOLT_0_10);
    AnInp[1](Address:=0, Channel:=1, Mode:=AI_MODE#AD_VOLT_0_10_COMMON);

    IF ((SysGetSysTime(TRUE)-TimeBf[1]) > 5000000) THEN
        TimeBf[1]:=SysGetSysTime(TRUE);
        AnOut[0].Value:=SysGetRandom(TRUE)*10.0;
        AnOut[1].Value:=SysGetRandom(TRUE)*10.0;
    END_IF;

    // -------------------------------------------------------------------------
    // CALCOLO LOOP TIME
    // -------------------------------------------------------------------------
    // Calcolo loop time.

    LpTime[1]:=SysGetSysTime(TRUE)-LpTime[0];

// [End of file]

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 29 Maggio 2019