Indice

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/OUTTIPO VARIABILENOME DI ESEMPIODIM
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

	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

Esempio 2

(Con l'utilizzo del flag “gbWriteRead”)

TASK_00

	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

Note

Limiti

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