software:qview:qview_6:qcl_library:dw11sermodma

no way to compare when less than two revisions

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.


software:qview:qview_6:qcl_library:dw11sermodma [2019/08/29 17:01] (versione attuale) – creata - modifica esterna 127.0.0.1
Linea 1: Linea 1:
 +====== DW11SerModMa ======
 +
 +**D = **//Device(SERCOM)//
 +
 +**W = **//Funzioni di Scrittura//
 +
 +La funzione DW11SerModMa simula il protocollo Modbus MASTER 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, più uno (ad esempio, se l'indirizzo più alto tra le variabili che si vogliono scambiare è 600, la dimensione minima dell'array dovrà essere di 601 elementi).\\
 +La scelta se eseguire una scrittura o una lettura sul dispositivo Slave, deve essere fatta dall'utilizzatore della funzione attraverso l'impostazione della variabile "modWrite".\\
 +La variabile "address" deve contenere l'indirizzo della prima variabile del gruppo da leggere o scrivere.\\
 +La variabile "points" deve contenere in numero di variabili che si vogliono leggere o scrivere a partire dall'indirizzo "address".
 +
 +Le funzioni Modbus supportate dalla funzione sono:
 +  * Funzione 3   - Read Holding Register   (lettura a word)
 +  * Funzione 16 - Force Multiple Register (scrittura word multiple)
 +
 +===== IMPLEMENTAZIONE =====
 +
 +**DW11SerModMa (sercom1, Buffer, idcard, modWrite, address, points, error)**
 +
 +Parametri:
 +
 +^IN/OUT^TIPO VARIABILE^NOME DI ESEMPIO^DIM^^
 +|  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  |  GLOBAL  |  modWrite  |  F  |Modalità Scrittura / Lettura. \\ Discrimina se eseguire una scrittura o una lettura sull'apparecchio Slave.\\ 0= Lettura\\ 1= Scrittura|
 +|  IN  |  GLOBAL  |  address  |  W  |Indirizzo della prima variabile del gruppo da leggere o scrivere.|
 +|  IN  |  GLOBAL  |  points  |  L  |Numero di punti (word) che si vogliono leggere o scrivere a partire dall'indirizzo "address".|
 +|  OUT  |  GLOBAL  |  error  |  L  |Variabile contenente il codice di errore|
 +
 +==== 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 - Time Out: Lo slave non risponde entro 200ms\\
 +6 - Function Type di risposta non corrispondente\\
 +7 - Numero caratteri in risposta non corrispondente al numero atteso
 +
 +=== Esempio ===
 +
 +//FILE.CNF//
 +<code QCL>
 +        INTDEVICE
 + ;Nome         Tipo dev.     Tcamp.   N°porta ser         N°elem.
 + Sercom1       SERCOM    0002                                  150
 +</code>
 +
 +//TASK_00//
 +<code QCL>
 + sercom1:mode = 0
 + sercom1:brate = 38400
 + sercom1:datab = 8
 + sercom1:stopb = 1
 + sercom1:par = 0
 +
 + OPENCOM sercom1
 + WAIT sercom1:st_opencom
 +
 +      gfIniz = 1
 +</code>
 +
 +//TASK_01//
 +<code QCL>
 +
 +   idcard = 1
 +   MAIN:
 +        IF gfIniz
 +              ;----- LETTURA --------
 +              modWrite = 0 ;Impostata LETTURA
 +              address = 20 ;Indirizzo variabile da leggere
 +              points = 5 ;numero word da leggere
 +              DW11SerModMa (sercom1, Buffer, idcard, modWrite, address, points, error)
 +
 +         IF NOT error
 +                    glVariabile1 = Buffer [20] ;Assegna il Valore letto da Slave alla Variabile 1
 +                    glVariabile2 = Buffer [21] ;Assegna il Valore letto da Slave alla Variabile 2
 +                    glVariabile3 = Buffer [22] ;Assegna il Valore letto da Slave alla Variabile 3
 +                    glVariabile4 = Buffer [23] ;Assegna il Valore letto da Slave alla Variabile 4
 +                    glVariabile5 = Buffer [24] ;Assegna il Valore letto da Slave alla Variabile 5
 +                ENDIF
 +
 +                ;----- SCRITTURA --------
 +                Buffer [50] = cnCounter:posit ;Assegna il valore del conteggio all'indirizzo 50
 + 
 +                modWrite = 1 ;Impostata SCRITTURA
 +                address = 50 ;Indirizzo variabile da scrivere
 +                points = 1 ;numero word da scrivere
 +                DW11SerModMa (sercom1, Buffer, idcard, modWrite, address, points, error)
 +        ENDIF
 +
 +        WAIT 1
 +        JUMP MAIN
 +        END
 +</code>
 +
 +=== 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.
 +
 +=== Limiti ===
 +
 +Le funzioni Modbus supportate dalla funzione sono:
 +  * 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 è il seguente
 +  * Funzione 3  : massimo 30 word leggibili contemporaneamente
 +  * Funzione 16: massimo 28 word scrivibili contemporaneamente
  
  • Ultima modifica: 2019/08/29 17:01