software:qview:qview_6:qcl_library:dw14sermodsl

DW14SerModSl

D = Device(SERCOM)

W = Funzioni di Scrittura

La funzione DW14SerModSl simula il protocollo Modbus SLAVE attraverso l'utilizzo di un device SERCOM.
In particolare la funzione dispone di un array (denominato “Buffer” nell'esempio di implementazione sottostante) che deve essere dichiarato dall'utente e passato alla funzione. Questo array rispecchierà fedelmente la tabella di indirizzi dell'apparato in collegamento con il Qmove. Il numero di elementi di questo array dovrà essere almeno pari al numero dell'indirizzo più alto del dispositivo utilizzato (ad esempio, se l'indirizzo più alto tra le variabili che si vogliono scambiare è 600, la dimensione minima dell'array dovrà essere di 600 elementi).

Le funzioni Modbus supportate dalla funzione sono:

  • Funzione 3 - Read Holding Register (lettura a word)
  • Funzione 16 - Force Multiple Register (scrittura word multiple)

Se si desidera aumentare la velocità di scambio dati è possibile impostare il parametro “mode” del device SERCOM al valore “2” (solamente nei firmware che supportano questa funzione del device)

DW14SerModSl (Sercom1, Buffer, idcard, slrdelay, gfWrite, glError)

Parametri:

IN/OUTTIPO VARIABILENOME DI ESEMPIODIM
IN INTDEVICE sercom1 - Nome mnemonico del device SERCOM utilizzato
IN ARRSYS / ARRGBL Buffer W Buffer indirizzi
IN GLOBAL idcard W Identification card. È il numero che identifica l'apparecchio nella rete.
IN SYSTEM slrdelay L E' il tempo di attesa prima di trasmettere la risposta.
OUT GLOBAL gfWrite F Flag di segnalazione scrittura. Quando si trova nello stato 1 significa che il Master ha effettuato una scrittura.
OUT GLOBAL glError L Variabile contenente il codice di errore

Una volta richiamata la funzione se ci sono degli errori la variabile di errore assume i seguenti valori:
0: Nessun errore
1: Numero char in ricezione > dimensione Buffer (64 elementi). (Controllare su paragrafo “Limiti”)
2: Error Checksum
3: Address > dimensione max del Buffer utente
4: Numero di Byte necessari alla risposta > 64 (limite max del buffer device)
5: Function Type Modbus non gestita dalla funzione (diversa da 3 o 16)

Esempio

FILE.CNF

    INTDEVICE
       ;Nome	        Tipo dev.     Tcamp.   N°porta ser         N°elem.
       Sercom1          SERCOM	      0002     1                   64

TASK_00

    sercom1:mode = 0
    sercom1:brate = 38400
    sercom1:datab = 8
    sercom1:stopb = 1
    sercom1:par = 0
 
    slrdelay = 0
 
    OPENCOM sercom1
    WAIT sercom1:st_opencom
 
    gfIniz = 1

TASK_01

    Idcard = 1
 
MAIN:
    IF gfIniz
        Buffer [20] = cnCounter:posit	        ;Assegna il valore del conteggio all'indirizzo 20
         DW14SerModSl (Sercom1, Buffer, idcard, slrdelay, gfWrite, glError)
         IF gfWrite				         ;In caso di scrittura da parte del Master,
            gfWrite = 0
            cnCounter:posit = Buffer [20]              ;assegna il valore dell'indirizzo 20  al conteggio
         ENDIF
    ENDIF
END

Note

  • È consigliabile implementare la funzione in un task apposito considerando che la stessa contiene delle istruzioni di WAIT che potrebbero bloccare l'esecuzione del Task medesimo.
  • Se si desidera aumentare la velocità di scambio dati è possibile impostare il parametro “mode” del device SERCOM al valore “2” (solamente nei firmware che supportano questa funzione del device. Se il valore 2 del parametro non è supportato dal firmware, il flag “wdata” del device si attiva)

Limiti

Il numero limite di variabili che si possono scambiare è il seguente

  • Funzione 3 - Read Holding Register (lettura a word)
  • Funzione 16 - Force Multiple Register (scrittura word multiple)

Il numero limite di variabili che si possono scambiare sono i seguenti:

  • Funzione 3
massimo 30 word leggibili contemporaneamente
  • Funzione 16: massimo 28 word scrivibili contemporaneamente
  • Ultima modifica: 2019/08/29 17:01