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 15:20] – [5.2.1. Parametri per formattare il messaggio:] qem207 | software:devices:modbus [2015/09/15 16:53] – [5.7.2. Parametri - Modbus Master] qem207 |
---|
| |
1) Impostazioni modbus e apertura del canale di comunicazione di tipo seriale | 1) Impostazioni modbus e apertura del canale di comunicazione di tipo seriale |
modbus.mode = 0 | <code QCL> |
modbus.prot = 1 | modbus.mode = 0 ; modbus master |
modbus.brate = 57600 | modbus.prot = 1 ; RTU |
modbus.stopb = 1 | modbus.brate = 57600 ; baudrate |
modbus.par = 0 | modbus.stopb = 1 ; stop bits |
modbus.tout = 100 | modbus.par = 0 ; parity |
| modbus.tout = 100 ; timeout |
| tm_opencom = 2000 ; timeout for OPENCOM command |
modbus.OPENCOM | modbus.OPENCOM |
| WAIT modbus.st_opencom OR tm_opencom |
| IF NOT modbus.st_opencom |
| OpenComError = 1 ; com not opened |
| ENDIF |
| </code> |
| |
| 2) Impostazioni modbus e apertura del canale di comunicazione di tipo TCPIP |
| <code QCL> |
| modbus.mode = 0 ; modbus master |
| modbus.prot = 2 ; TCPIP |
| |
| tcpip_port= 502 ; number of tcpip port (default 502) |
| modbus.brate = &HFFFFFFFF |
| modbus.stopb = tcpip_port / &H00000100 |
| modbus.par = tcpip_port ANDB &H000000FF |
| |
| modbus.tout = 100 ; timeout |
| tm_opencom = 500 ; waiting time to have a correct response |
| modbus.OPENCOM |
| WAIT tm_opencom |
| IF NOT modbus.st_opencom |
| OpenComError = 1 ; com not opened |
| ENDIF |
| </code> |
| |
3) Lettura del registro input nr.7 dello slave id 67 | 3) Lettura del registro input nr.7 dello slave id 67 |
swTemp1 = modbus.iword15 | swTemp1 = modbus.iword15 |
</code> | </code> |
| |
=== - Schema a blocchi === | === - Schema a blocchi === |
{{:software:devices:modbus:modbus_01.png?nolink400|}} | {{:software:devices:modbus:modbus_01.png?nolink400|}} |
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 |
Esempio d'identificazione dello slave nr.12: | Esempio d'identificazione dello slave nr.12: |
<code QCL> | <code QCL> |
CONFIG: | modbus:idcard = 12 |
modbus:idcard = 12 | modbus.READSTYPE |
READSTYPE modbus | WAIT modbus.st_sended |
WAIT modbus:st_sended | IF (modbus.err) |
IF (modbus:err) | sbConfig = 3 ; error: slave 12 not connected |
sbConfig = 3 ; errore slave 12 non connesso | ELSE |
ELSE | IF (modbus.stype EQ 1) ; Board CAM-AG-98 |
IF (modbus:stype EQ 1) ;Scheda CAM-AG-98 | sbConfig = 1 ; configuration OK |
sbConfig = 1 ; configurazione OK | ELSE |
ELSE | sbConfig = 2 ; error in network configuration |
sbConfig = 2 ; errore nella configurazione rete | ENDIF |
ENDIF | |
ENDIF | ENDIF |
</code> | </code> |
| |
==== - Estensione del protocollo ==== | ==== - Estensione del protocollo ==== |
| |
| |
=== - Parametri - Modbus Master === | === - Parametri - Modbus Master === |
^Nome^D^R^A^Condizioni^Descrizione^ | ^ Nome ^ D ^ R ^ A ^ Condizioni ^ Descrizione ^ |
|mode|B|R|R/W|-|**Mode**\\ (0 ÷ 2)\\ Definisce se la scheda deve funzionare come master o come slave.\\ **0** = master;\\ **1** = slave con area di scambio dati fissa;\\ **2** = slave senza area di scambio dati fissa: ad ogni scrittura o lettura eseguita dal master viene messi a 1 il flag st_msgrx.\\ Contemporaneamente i parametri //type//, //addr// e //num// indicano le caratteristiche del messaggio ricevuto.\\ - **Type** indica il tipo di funzione che vuole fare ill master (lettura o scrittura),\\ - **addr** indica l'indirizzo dell'inizio del blocco di dati scritti o letti,\\ - **num*** indica il numero di dati letti o scritti (a bit o a byte a seconda del valore di type).\\ Il device controllerà, in ricezione, solamente num (size di messaggio) che non sia superiore a 32word ma non più l'indirizzo che può essere ora qualsiasi.\\ Se è una scrittura (lo si capisce dal valore di type se è 5,6,15,16) vengono riportati i dati nelle variabili di scambio input (sempre a partire dalla prima word) ed il device attende il comando RECEIVED.\\ Se è una lettura il device attende che il QLC depositi i dati nelle word variabili di scambio output ed attende il comando VALIDATE.| | | mode | B | R | R/W | - | **Mode**\\ (0 ÷ 2)\\ Definisce se la scheda deve funzionare come master o come slave.\\ **0** = master;\\ **1** = slave con area di scambio dati fissa;\\ **2** = slave senza area di scambio dati fissa: ad ogni scrittura o lettura eseguita dal master viene messi a 1 il flag st_msgrx.\\ Contemporaneamente i parametri //type//, //addr// e //num// indicano le caratteristiche del messaggio ricevuto.\\ - **Type** indica il tipo di funzione che vuole fare ill master (lettura o scrittura),\\ - **addr** indica l'indirizzo dell'inizio del blocco di dati scritti o letti,\\ - **num** indica il numero di dati letti o scritti (a bit o a byte a seconda del valore di type).\\ Il device controllerà, in ricezione, solamente num (size di messaggio) che non sia superiore a 32word ma non più l'indirizzo che può essere ora qualsiasi.\\ Se è una scrittura (lo si capisce dal valore di type se è 5,6,15,16) vengono riportati i dati nelle variabili di scambio input (sempre a partire dalla prima word) ed il device attende il comando RECEIVED.\\ Se è una lettura il device attende che il QCL depositi i dati nelle word variabili di scambio output ed attende il comando VALIDATE. | |
|prot|B|R|R/W|-|**Protocol**\\ (0 ÷ 1)\\ Definisce il tipo di protocollo Modbus da utilizzare.\\ **0** = ASCII,\\ **1** = RTU| | | prot | B | R | R/W | - | **Protocol**\\ (0 ÷ 1)\\ Definisce il tipo di protocollo Modbus da utilizzare.\\ **0** = ASCII,\\ **1** = RTU,\\ **2** = TCPIP | |
|wider|B|R|R/W|-|**Wide Registers**\\ (0 ÷ 1)\\ Indica se utilizzare l’estensione del protocollo per i registri a 32bit. Vedere capitolo “Estensione del protocollo” :\\ **0** = normale,\\ **1** = protocollo esteso.| | | wider | B | R | R/W | - | **Wide Registers**\\ (0 ÷ 1)\\ Indica se utilizzare l’estensione del protocollo per i registri a 32bit. Vedere capitolo “Estensione del protocollo” :\\ **0** = normale,\\ **1** = protocollo esteso. | |
|idcard|W|R|R/W|-|**Identification Card**\\ (0 ÷ 255)\\ Nel funzionamento come master è il numero del dispositivo al quale s'intende trasmettere. Nel modo master è valida anche l’impostazione zero per il funzionamento broadcast.| | | idcard | W | R | R/W | - | **Identification Card**\\ (0 ÷ 255)\\ Nel funzionamento come master è il numero del dispositivo al quale s'intende trasmettere. Nel modo master è valida anche l’impostazione zero per il funzionamento broadcast. | |
|type|B|1|R/W|-|**Type**\\ Definisce il tipo di richiesta che il master deve eseguire.\\ Valori ammessi: 1, 2, 3, 4, 5, 6, 15, 16| | | type | B | 1 | R/W | - | **Type**\\ Definisce il tipo di richiesta che il master deve eseguire.\\ Valori ammessi: 1, 2, 3, 4, 5, 6, 15, 16 | |
|addr|L|1|R/W|-|**Address**\\ (1 ÷ 65535)\\ Definisce l’indirizzo utilizzato dal master per definire quale sia il dato da leggere o scrivere.| | | addr | L | 1 | R/W | - | **Address**\\ (1 ÷ 65535)\\ Definisce l’indirizzo utilizzato dal master per definire quale sia il dato da leggere o scrivere. | |
|tabreg|W|1|R/W|-|**Destination**\\ (1 ÷ 512)\\ Definisce l’indirizzo nelle tabelle dei dati in cui scrivere il dato letto o in cui trovare il dato da scrivere.| | | tabreg | W | 1 | R/W | - | **Destination**\\ (1 ÷ 512)\\ Definisce l’indirizzo nelle tabelle dei dati in cui scrivere il dato letto o in cui trovare il dato da scrivere. | |
|num|W|1|R/W|-|**Number**\\ (1 ÷ 512)\\ È il numero d'elementi da scrivere o leggere nella richiesta che compone il master.| | | num | W | 1 | R/W | - | **Number**\\ (1 ÷ 512)\\ È il numero d'elementi da scrivere o leggere nella richiesta che compone il master. | |
|brate|L|R|R/W|-|**Baud rate**\\ Baud rate della seriale.\\ Valori validi: 4800, 9600, 19200, 38400, 57600.| | | brate | L | R | R/W | - | **Baud rate**\\ Baud rate della seriale.\\ Valori validi: 4800, 9600, 19200, 38400, 57600. | |
|stopb|B|R|R/W|-|**Stop bit**\\ Valori validi: 1, 2.| | | stopb | B | R | R/W | - | **Stop bit**\\ Valori validi: 1, 2. | |
|par|B|R|R/W|-|**Parity**\\ (0 ÷ 2)\\ **0** = none (nessuna),\\ **1** = odd (dispari),\\ **2** = even (pari).| | | par | B | R | R/W | - | **Parity**\\ (0 ÷ 2)\\ **0** = none (nessuna),\\ **1** = odd (dispari),\\ **2** = even (pari). | |
|tout|W|R|R/W|-|**Timeout**\\ (0 ÷ 9999 msec)\\ Per la modalitá master è il tempo massimo in cui lo slave deve rispondere.\\ Impostandolo a zero il Timeout è disabilitato.| | | tout | W | R | R/W | - | **Timeout**\\ (0 ÷ 9999 msec)\\ Per la modalitá master è il tempo massimo in cui lo slave deve rispondere.\\ Impostandolo a zero il Timeout è disabilitato. | |
|toutsyc|W|R|R/W|-|**Time out synchronize**\\ (0 ÷ 9999 msec)\\ Utilizzato solamente per la modalitá master è il tempo massimo che puó trascorrere tra l’invio del comando SENDSYC e l’esecuzione del comando RECEIVED nello slave QEM.| | | toutsyc | W | R | R/W | - | **Time out synchronize**\\ (0 ÷ 9999 msec)\\ Utilizzato solamente per la modalitá master è il tempo massimo che puó trascorrere tra l’invio del comando SENDSYC e l’esecuzione del comando RECEIVED nello slave QEM. | |
|iword1÷32|W|0|R|-|**Input Word nr.** (1Input Long nr. (1÷16)32)| | | iword1÷32 | W | 0 | R | - | **Input Word nr.** (1Input Long nr. (1÷16)32) | |
|st_ibit0÷15|F|0|R|-|**Input bit nel parametro iword1**| | | st_ibit0÷15 | F | 0 | R | - | **Input bit nel parametro iword1** | |
|ilong1÷16|L|0|R|-|**Input Long nr.** (1÷16)| | | ilong1÷16 | L | 0 | R | - | **Input Long nr.** (1÷16) | |
|oword1÷32|W|0|R/W|-|**Output Word nr.** (1÷32)| | | oword1÷32 | W | 0 | R/W | - | **Output Word nr.** (1÷32) | |
|st_obit0÷15|F|0|R/W|-|**Output bit nel parametro oword1**| | | st_obit0÷15 | F | 0 | R/W | - | **Output bit nel parametro oword1** | |
|olong1÷16|L|0|R/W|-|**Output Long nr.** (1÷16)| | | olong1÷16 | L | 0 | R/W | - | **Output Long nr.** (1÷16) | |
| |
| Per configurare il numero della porta TCPIP è necessario andare a scrivere sui parametri brate, stopb e par. Rispettivamente :\\ |
| brate = &HFFFFFFFF\\ |
| stopb = tcpip_port / &H00000100\\ |
| par = tcpip_port ANDB &H000000FF |
| |
| |
| |
| |
=== - Variabili - Modbus Master === | === - Variabili - Modbus Master === |