Vai al contenuto

Conteggio veloce su ingresso digitale

Home Forum Programmazione IEC 61131 (LogicLab) Conteggio veloce su ingresso digitale

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

    Devo fare un conteggio veloce e ho messo il programma con il FB in esecuzione nela task Fast. L’ingresso che controllo è quello a bordo modulo CPU 255.0.

    L’aggioramento di questo ingresso va bene o meglio usare un ingresso dell’espansione ?

    Chiedo perchè faccio fatica a misurare bene.

    #75442
    Sergio Bertana
    Amministratore del forum

    Cominciamo con il dire che per il conteggio consiglio di utilizzare l’operando somma al posto del FB CTU. Questo ti permette di utilizzare per il conteggio una variabile della dimensione che desideri 8/16/32/64 bits, inoltre puoi definirla come RETAIN o allocarla nella DB100 ad indirizzo da 2048 per avere il valore mantenuto allo spegnimento. E con semplici operazioni di MOVE puoi variarne il valore per il reset od il preset.

    Come ingresso digitale è consigliato utilizzare quelli del modulo CPU come correttamente hai fatto, ma non devi utilizzare l’immagine di processo bensì devi acquisirne lo stato con il FB SysGetPhrDI. Ecco un programma di esempio.

    // *****************************************************************************
    // PROGRAM "CounterOnDI"
    // *****************************************************************************
    // Manage counter on CPU module Di00.
    // -----------------------------------------------------------------------------
    
        // -------------------------------------------------------------------------
        // INITIALIZATION
        // -------------------------------------------------------------------------
        // Initialize variables.
    
        IF (SysFirstLoop) THEN
            i:=SysSetTaskLpTime(ID_TASK_FAST, 500); //Task Fast is executed every 500uS
    
            // Set digital input module.
    
            DInp.Address:=255; //Module address
            DInp.Mode:=DI_MODE#DI_8_LL; //Acquisition mode
        END_IF;
    
        // -------------------------------------------------------------------------
        // COUNTER MANAGEMENT
        // -------------------------------------------------------------------------
        // Check digital input rising pulse.
    
        DInp(); //Digital input acquisition
        IF (DInp.Value.0 = Pulse) THEN RETURN; END_IF;
        Pulse:=DInp.Value.0; //Digital input pulse
    
        // Increase the counter.
    
        IF (DInp.Value.0) THEN Counter:=Counter+1; END_IF;
    
    // [End of file]

    Il programma và eseguito in task Fast di cui puoi cambiare il tempo di esecuzione, lo standard è 1mS ma puoi scendere fino a 100uS. Se vuoi modificare l’ingresso digitale cambia DInp.Value.x dove x è l’ingresso da utilizzare.

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