Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisione Revisione precedente Prossima revisione | Revisione precedente Prossima revisioneEntrambe le parti successive la revisione | ||
software:devices:modbus [2015/09/15 14:39] – [3.1.1. Esempio] documentazione | software:devices:modbus [2015/09/15 16:05] – [5.5.3. Identificazione degli Slave] qem207 | ||
---|---|---|---|
Linea 59: | Linea 59: | ||
INTDEVICE | INTDEVICE | ||
modbus | modbus | ||
- | ... | ||
</ | </ | ||
Linea 190: | Linea 189: | ||
**type** = tipo di richiesta che si vuole processare (lettura o scrittura di word o di bit).\\ | **type** = tipo di richiesta che si vuole processare (lettura o scrittura di word o di bit).\\ | ||
**idcard** = indirizzo dell’unità slave verso cui si vuole inviare la richiesta.\\ | **idcard** = indirizzo dell’unità slave verso cui si vuole inviare la richiesta.\\ | ||
- | **addr** = indice da cui iniziare a leggere o da cui iniziare a scrivere nello slave in questione. Sono previsti valori tra 1 e 512 per valori del parametro type = 1, 2, 5, 15 (scrittura e lettura di bit), mentre per valori type = 3, 4, 6, 16 (scrittura e lettura di word) i valori previsti sono tra 1 e 32.\\ | + | **addr** = indice da cui iniziare a leggere o da cui iniziare a scrivere nello slave in questione.\\ |
**tabreg** = per le operazioni di lettura (type = 1, 2, 3, 4), questo parametro indica la posizione nella “tabella dei dati letti” dove verrà memorizzato il dato letto sullo slave. Per le operazioni di scrittura (type = 5, 6, 15, 16), questo parametro indica da posizione nella “tabella dei dati da scrivere” dove si trova il dato da scrivere sullo slave. Sono previsti valori tra 1 e 512 per valori del parametro type = 1, 2, 5, 15 (scrittura e lettura di bit), mentre per valori type = 3, 4, 6, 16 (scrittura e lettura di word) i valori previsti sono tra 1 e 32.\\ | **tabreg** = per le operazioni di lettura (type = 1, 2, 3, 4), questo parametro indica la posizione nella “tabella dei dati letti” dove verrà memorizzato il dato letto sullo slave. Per le operazioni di scrittura (type = 5, 6, 15, 16), questo parametro indica da posizione nella “tabella dei dati da scrivere” dove si trova il dato da scrivere sullo slave. Sono previsti valori tra 1 e 512 per valori del parametro type = 1, 2, 5, 15 (scrittura e lettura di bit), mentre per valori type = 3, 4, 6, 16 (scrittura e lettura di word) i valori previsti sono tra 1 e 32.\\ | ||
- | **num** = numero di valori che si intendono leggere o scrivere (se il tipo richiesta type lo prevede). Sono previsti valori tra 1 e 512 per valori del parametro type = 1, 2, (lettura di bit), mentre per valori type = 3, 4, 16 (scrittura multipla e lettura di word) i valori previsti sono tra 1 e 32. | + | **num** = numero di valori che si intendono leggere o scrivere (se il tipo richiesta type lo prevede). Sono previsti valori tra 1 e 128 per valori del parametro type = 1, 2, (lettura di bit), mentre per valori type = 3, 4, 16 (scrittura multipla e lettura di word) i valori previsti sono tra 1 e 32. |
=== - Comandi per inviare il messaggio: === | === - Comandi per inviare il messaggio: === | ||
Linea 263: | Linea 262: | ||
==== - Esempi ==== | ==== - Esempi ==== | ||
- | 1) Lettura | + | 1) Impostazioni modbus e apertura |
<code QCL> | <code QCL> | ||
- | MAIN: | + | modbus.mode = 0 ; modbus master |
- | modbus: | + | modbus.prot = 1 ; RTU |
- | | + | modbus.brate |
- | | + | modbus.stopb |
- | | + | modbus.par = 0 ; parity |
- | | + | modbus.tout = 100 ; timeout |
- | SEND modbus | + | tm_opencom = 2000 ; timeout for OPENCOM command |
- | | + | modbus.OPENCOM |
- | | + | WAIT modbus.st_opencom OR tm_opencom |
- | CALL ErroreModbus | + | IF NOT modbus.st_opencom |
- | + | | |
- | | + | ENDIF |
- | | + | |
- | + | ||
- | | + | |
- | JUMP MAIN | + | |
</ | </ | ||
- | 2) Lettura dei holding register dal nr.600 al nr.606 dello slave id 8\\ | + | 2) Impostazioni modbus e apertura del canale |
- | Siccome l’area | + | |
<code QCL> | <code QCL> | ||
- | MAIN: | + | modbus.mode = 0 ; modbus master |
- | modbus: | + | modbus.prot = 2 ; TCPIP |
- | | + | |
- | modbus: | + | tcpip_port= 502 ; number of tcpip port (default 502) |
- | | + | modbus.brate |
- | | + | modbus.stopb |
- | SEND modbus | + | modbus.par = tcpip_port ANDB & |
- | WAIT modbus: | + | |
- | IF (modbus:err) | + | modbus.tout = 100 ; timeout |
- | CALL ErroreModbus | + | tm_opencom |
- | | + | modbus.OPENCOM |
- | + | WAIT tm_opencom | |
- | | + | IF NOT modbus.st_opencom |
- | slVelocita = modbus:ilong6 | + | |
- | slPosiz = modbus:ilong7 | + | ENDIF |
- | swTemp1 | + | |
- | + | ||
- | | + | |
- | JUMP MAIN | + | |
</ | </ | ||
+ | 3) Lettura del registro input nr.7 dello slave id 67 | ||
+ | <code QCL> | ||
+ | modbus.idcard = 67 | ||
+ | modbus.addr = 7 | ||
+ | modbus.tabreg = 7 | ||
+ | modbus.num = 1 | ||
+ | modbus.type = 4 | ||
+ | modbus.SEND | ||
+ | WAIT modbus.st_sended | ||
+ | IF (modbus.err) | ||
+ | CALL ErroreModbus | ||
+ | ENDIF | ||
+ | slVelocita = modbus.iword7 | ||
+ | </ | ||
+ | |||
+ | 4) Lettura dei holding register dal nr.600 al nr.606 dello slave id 8\\ | ||
+ | Siccome l’area di scambio dati QCL non supporta l’indirizzo 600, si utilizza il parametro tabreg per salvare i dati letti all’indirizzo 10 | ||
+ | <code QCL> | ||
+ | modbus.idcard = 8 | ||
+ | modbus.addr = 600 | ||
+ | modbus.num = 6 | ||
+ | modbus.tabreg = 10 | ||
+ | modbus.type = 3 | ||
+ | modbus.SEND | ||
+ | WAIT modbus.st_sended | ||
+ | IF (modbus.err) | ||
+ | CALL ErroreModbus | ||
+ | ENDIF | ||
+ | | ||
+ | swTemp1 = modbus.iword10 | ||
+ | slVelocita = modbus.ilong6 | ||
+ | slPosiz = modbus.ilong7 | ||
+ | swTemp1 = modbus.iword15 | ||
+ | </ | ||
=== - Schema a blocchi === | === - Schema a blocchi === | ||
{{: | {{: | ||
Linea 324: | Linea 348: | ||
Il comando READSTYPE eseguito dopo aver opportunamente selezionato lo slave (tramite parametro idcard) invia allo | Il comando READSTYPE eseguito dopo aver opportunamente selezionato lo slave (tramite parametro idcard) invia allo | ||
slave una richiesta modbus nr.17 per il riconoscimento. Lo slave risponderà con un suo valore predefinito e potrà essere | slave una richiesta modbus nr.17 per il riconoscimento. Lo slave risponderà con un suo valore predefinito e potrà essere | ||
- | letto nel parametro stype. Nel caso lo slave non sia prodotto da QEM srl, il parametro avrà valore –1 ad indicare che lo | + | letto nel parametro stype del master. Nel caso lo slave non sia prodotto da QEM srl, il parametro avrà valore –1 ad indicare che lo |
slave è connesso ma non è possibile identificarlo.\\ | slave è connesso ma non è possibile identificarlo.\\ | ||
Per il device MODBUS lo slave ID è diverso a seconda dello slave QEM utilizzato. Per una codifica degli slave in questo | Per il device MODBUS lo slave ID è diverso a seconda dello slave QEM utilizzato. Per una codifica degli slave in questo | ||
- | senso vedere il manuale Firmware dello slave utilizzato. | + | senso vedere il manuale Firmware dello slave utilizzato.\\ Se lo slave è implementato con un device MODBUS allora lo stype è impostato tramite il parametro omonimo. |
Esempio d' | Esempio d' | ||
<code QCL> | <code QCL> | ||
- | CONFIG: | + | modbus: |
- | modbus: | + | modbus.READSTYPE |
- | READSTYPE | + | WAIT modbus.st_sended |
- | | + | IF (modbus.err) |
- | | + | sbConfig = 3 ; |
- | | + | ELSE |
- | | + | IF (modbus.stype EQ 1) ; |
- | | + | sbConfig = 1 |
- | | + | ELSE |
- | | + | sbConfig = 2 |
- | | + | ENDIF |
- | | + | |
ENDIF | ENDIF | ||
</ | </ | ||
- | |||
==== - Estensione del protocollo ==== | ==== - Estensione del protocollo ==== | ||