Vai al contenuto

Riconoscere da programma utente i moduli di espansione

Home Forum Controllori SlimLine e Netsyst (LogicLab) Riconoscere da programma utente i moduli di espansione

Stai visualizzando 4 post - dal 1 a 4 (di 4 totali)
  • Autore
    Post
  • #35422
    Maurizio Conti
    Partecipante

    E’ possibile conoscere da programma utente (Magari con un program in ST) se allo SlimLine sono collegati dei moduli di espansione e, se si, quali ?

    #37800
    Sergio Bertana
    Amministratore del forum

    Si certo, la variabile di sistema SysModulesReady di tipo UINT indica quali moduli di estensione sono connessi al sistema. Ogni bit indica la presenza del rispettivo modulo, quindi bit 0: Modulo con indirizzo 0, bit 1: Modulo con indirizzo 1 e così via fino a bit 15 Modulo con indirizzo 15.

    Esiste poi la funzione SysPhrInfos che ritorna il codice del modulo e l’eventuale versione del software installato sul modulo, sono due stringhe da 10 caratteri. Quindi un programma del tipo

    FOR i:=0 TO 15 DO
      IF (VBitTest(SysModulesReady, i)) THEN
        ABf:=SysPhrInfos(i, 0, MInfos[i].Code); (* Codice modulo *)
        ABf:=SysPhrInfos(i, 1, MInfos[i].SVersion); (* Software version *)
      END_IF;
    END_FOR;

    Permette di valorizzare un array di strutture dati con i codici prodotto e le versioni software. Allego programma di esempio (Stampa e Download sorgente).

    #37899
    Maurizio Conti
    Partecipante

    E’ da diverso tempo che sto sbattendo la testa su una applicazione SlimLine che ha cessato ‘improvvisamente’ di funzionare in alcune sue parti. Dopo vari tentativi ho visto che il problema si presenta semplicemente collegando allo SlimLine il modulo di espansione 16IN/8OUT sul bus I2C.

    Mi spiego: tra le varie attività, la mia applicazione riceve in modo serrato uno stream di dati sulla RS485 a 115200 bps (Task BACK), cui deve saltuariamente rispondere con un certo ‘pacchetto’ inserito anch’esso nella task Back. Tutto ha sempre funzionato fintanto che, per necessità, ho dovuto aggiungere il modulo di espansione di cui sopra: a quel punto le trasmissioni in uscita ‘probabilmente’ non sono riuscite più a rispettare le attese tempistiche e tutto ha smesso di funzionare (preciso: anche senza di fatto fare chiamate al blocco SysSetPhrDO, solo col bus collegato!).

    Che modo ho di imbrigliare le tempistiche di gestione dell’I2C (che non conosco) a vantaggio delle mie comunicazioni seriali ?

    #37900
    Sergio Bertana
    Amministratore del forum

    SlimLine come tutti i PLC lavora in immagine di processo, il sistema riconosce i moduli di I/O logici connessi al bus di estensione che vengono gestiti automaticamente sulla esecuzione della task Slow. La funzione SysSetPhrDO si utilizza solo nel caso si desideri acquisire ingressi o gestire uscite immediatamente senza attendere la gestione automatica in immagine di processo.

    Naturalmente la gestione del bus I2C utilizza tempo processore e quello che succede è che il tempo di esecuzione della task Slow ha subito un aumento solo per il fatto di avere collegato il modulo al sistema. La task Slow interrompe l’esecuzione della task Back.

    Però ti voglio ricordare che la gestione seriale è eseguita in interrupt sul processore e quindi i dati seriali sono sicuramente ricevuti e caricati nel buffer di ricezione a qualsiasi velocità essi arrivino. Sarà poi il tuo programma con la chiamata alla funzione SysGetIChars a verificare se sono stati ricevuti dati tra una esecuzione e l’altra e potrà leggerli con le funzioni Sysfgetc e Sysfread fino a svuotare il buffer.

    Lo stesso vale per la trasmissione, il programma utente con la funzione SysGetOSpace può controllare quanto spazio c’è nel buffer di trasmissione seriale e con le funzioni Sysfputc e Sysfwrite, potrà trasferire i caratteri da trasmettere nel buffer di trasmissione. Il sistema operativo autonomamente provvederà ad inviarli sulla seriale indipendentemente dalla esecuzione del programma utente.

Stai visualizzando 4 post - dal 1 a 4 (di 4 totali)
  • Devi essere connesso per rispondere a questo topic.