Vai al contenuto

Problema su acquisizione analogica

Home Forum Controllori SlimLine e Netsyst (LogicLab) Problema su acquisizione analogica

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #35622
    Anonimo
    Inattivo

    Devo acquisire un ingresso analogico dal modulo CPU SlimLine, ho definito una variabile AnInpVal del tipo FB SysGetAnInp, poi eseguo il seguente codice:

    AnInpVal.Address:=255; (* Module address *)
    AnInpVal.Channel:=1; (* Acquisition channel *)
    AnInpVal.Mode:=AD_VOLT_0_10_COMMON; (* Acquisistion mode *)
    AnInpVal();

    WHILE (AnInpVal.Done <> TRUE) DO END_WHILE;
    MyVal :=AnInpVal.Value;

    Eseguo il programma ma la variabile myVal rimane sempre zero, dove sbaglio ?

    #38421
    Sergio Bertana
    Amministratore del forum

    Il primo errore molto grave è il ciclo WHILE. In un programma PLC non bisogna mai fermarsi in cicli di attesa, perché se sono più lunghi del tempo di intervento del watch dog provocano il riavvio del sistema (Topic). Ma in più è formalmente errata la gestione, perchè ammesso di essere certi che il ritardo della acquisizione analogica è pochi mS e si volesse attenderne il Done occorrebbe eseguire la FB nel ciclo WHILE scrivendo qualcosa del tipo:
     
    AnInpVal(); (* Eseguo prima del WHILE per azzerare Done *)
    WHILE (AnInpVal.Done <> TRUE) DO AnInpVal(); END_WHILE; (* Eseguo nel WHILE fino a Done attivo *)
     
    Ho riportato questo esempio solo per chiarificare il funzionamento, ma la corretta gestione è quella di testare il Done per trasferire il valore nella variabile.
     
    IF (AnInpVal.Done) THEN MyVal:=AnInpVal.Value; END_IF;

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