software:qview:qview_6:qcl_library:dw13modbus

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:dw13modbus [2019/08/29 17:01] (versione attuale) – creata - modifica esterna 127.0.0.1
Linea 1: Linea 1:
 +====== DW13Modbus ======
 +
 +**D = **//Device(MODBUS)//
 +
 +**W = **//Funzioni di Scrittura//
 +
 +La funzione DW13Modbus gestisce l'interscambio attraverso il protocollo MODBUS tra un qualsiasi apparato che funge da Master e il Qmove (Slave).\\
 +In particolare la funzione dispone di un array (denominato "aswBuffer" nell'esempio di implementazione sottostante) che deve essere dichiarato dall'utente e passato alla funzione. Questo array rispecchierà fedelmente la tabella di indirizzi del Modbus. 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).\\
 +Per l'utilizzo della funzione è __obbligatorio__ impostare il valore 2 sul parametro "mode" del device Modbus passato alla funzione.
 +
 +===== IMPLEMENTAZIONE =====
 +
 +**DW13Modbus (Modbus, aswBuffer, slrdelay, gbWriteRead, sbError)**
 +
 +Parametri:
 +
 +^IN/OUT^TIPO VARIABILE^NOME DI ESEMPIO^DIM^^
 +|  IN  |  INTDEVICE  |  Modbus  |  -  |Nome mnemonico del device MODBUS utilizzato|
 +|  IN  |  ARRSYS / ARRGBL  |  aswBuffer  |  W  |Buffer indirizzi|
 +|  IN  |  SYSTEM  |  slrdelay  |  L  |E' il tempo di attesa prima di trasmettere la risposta.|
 +|  OUT  |  GLOBAL  |  gbWriteRead  |  B  |Variabile che segnala l'avvenuta richiesta di lettura o scrittura da parte del Master.\\ 0= nessuna richiesta\\ 1= lettura\\ 2= scrittura|
 +|  OUT  |  SYSTEM  |  sbError  |  B  |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 - Parametro "Mode" non impostato correttamente (<> 2)\\
 +2 - Indirizzo eccede la dimensione del Buffer\\
 +3 - Il numero di word da scrivere eccede la dimensione del Buffer\\
 +4 - Indirizzo <= 0\\
 +5 - Numero di word in scrittura <= 0
 +
 +=== Esempio 1 ===
 +
 +(Senza l'utilizzo del flag "gbWriteRead")
 +
 +//TASK_00//
 +<code QCL>
 + Modbus:idcard = 1
 + Modbus:mode=2
 + Modbus:prot=1
 + Modbus:wider=0
 + Modbus:brate=38400
 + Modbus:stopb=1
 + Modbus:par=0
 + Modbus:toutsyc=100
 + OPENCOM Modbus
 +   WAIT Modbus:st_opencom
 +
 + slrdelay = 0
 +MAIN:
 +   
 +        DW13Modbus (Modbus, aswBuffer, slrdelay, gbWriteRead, sbError)
 +        IF NOT sbError
 +               aswBuffer[20]  = swPippo
 +               aswBuffer[21]  = swPluto
 +               
 +               swMinnie = aswBuffer[30]
 +        ELSE
 +               gbMessaggio = sbError ;Variabile per visualizzazione messaggio di errore
 +        ENDIF
 +END
 +</code>
 +
 +=== Esempio 2 ===
 +
 +(Con l'utilizzo del flag "gbWriteRead")
 +
 +//TASK_00//
 +<code QCL>
 + Modbus:idcard = 1
 + Modbus:mode=2
 + Modbus:prot=1
 + Modbus:wider=0
 + Modbus:brate=38400
 + Modbus:stopb=1
 + Modbus:par=0
 + Modbus:toutsyc=100
 + OPENCOM Modbus
 +   WAIT Modbus:st_opencom
 +
 + slrdelay = 0
 +
 +MAIN:
 +
 +   DW13Modbus (Modbus, aswBuffer, slrdelay, gbWriteRead, sbError)
 +   
 +   IF NOT sbError
 +           IF (gbWriteRead EQ 1)
 +                   ;-- Lettura da parte del Master ---------
 +                   aswBuffer[20]  = swPippo
 +                   aswBuffer[21]  = swPluto
 +           ENDIF
 +           IF (gbWriteRead EQ 2)
 +                   ;-- Scrittura da parte del Master ---------
 +                   swPippo  = aswBuffer[20] 
 +                   swPluto  = aswBuffer[21]
 +           ENDIF
 +   ELSE
 +           gbMessaggio = sbError ;Variabile per visualizzazione messaggio di errore
 +   ENDIF
 +END
 +</code>
 +
 +=== Note ===
 +
 +  *La variabile " gbWriteRead" consente di ottimizzare i tempi per lo scambio dati tra Master e Slave. Questa variabile, infatti,  assume valore 1 quando il Master ha richiesto una lettura e assume valore 2 quando il Master ha richiesto una scrittura. Questo consente di eseguire l'aggiornamento degli array solo quando tale variabile ha un valore diverso da zero evitando di farlo continuamente.  Vedere l'ESEMPIO 2  per capirne il funzionamento.    Alla prima accensione tale variabile viene impostata a 1 (lettura) anche se il master non ha fatto alcuna richiesta,  per fare in modo che ci sia almeno un aggiornamento del buffer.   L'esempio 1 non utilizza la variabile gbWriteRead in quanto la stessa è opzionale.
 +
 +=== Limiti ===
 +
 +Il numero limite di variabili che si possono scambiare è il seguente
 +  * Massimo 29 word leggibili/scrivibili contemporaneamente
  
  • Ultima modifica: 2019/08/29 17:01