Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision | ||
en:software:devices:modbus [2016/12/21 16:56] – [5.3. Richieste di lettura] qem103 | en:software:devices:modbus [2016/12/23 16:29] – [5.10.4. Stati] qem103 | ||
---|---|---|---|
Line 172: | Line 172: | ||
=== Read Coil === | === Read Coil === | ||
- | Funzione di lettura | + | |
- | impostare | + | Bit read function. You want to read the bits of a slave (// |
- | numero di bit che si intendono leggere. Bisogna impostare | + | (//addr// + //num// - 1) <= 512 e (//tabreg// + //num// - 1) <= 512 otherwise the request will fail (reporting by //wcmd//). |
- | master | + | |
- | soddisfare sempre le seguenti due condizioni:\\ | + | |
- | (//addr// + //num// - 1) <= 512 e (//tabreg// + //num// - 1) <= 512 altrimenti la richiesta non potrà essere eseguita | + | |
=== Read Input === | === Read Input === | ||
- | Funzione di lettura a bit. Si vogliono leggere i bit di un certo slave (// | + | |
+ | Bit read function. To read the bits of a slave (// | ||
=== Read Holding Register === | === Read Holding Register === | ||
- | Funzione di lettura a word. Si vogliono leggere le word di un certo slave (idcard). | + | |
- | Bisogna impostare | + | Word read function. For reading the word of the slave (idcard). |
- | indica il numero di word che si intendono leggere. Bisogna impostare | + | You must to set addr to indicate the address of the word in the slave from which to start reading. The num parameter indicates the number of word to be read. You must set tabreg |
- | dei dai letti” del master | + | (addr + num - 1) <= 32 e (tabreg + num - 1) <= 32 otherwise the request will fail (reporting by wcmd). |
- | Si raccomanda di soddisfare sempre le seguenti due condizioni:\\ | + | |
- | (addr + num - 1) <= 32 e (tabreg + num - 1) <= 32 altrimenti la richiesta non potrà essere eseguita | + | |
- | wcmd). | + | |
=== Read Input Register === | === Read Input Register === | ||
- | Funzione di lettura ingressi a word. Si vogliono leggere i bit di un certo slave (idcard). La funzione è identica alla “Read Holding Register”. Viene impostato il parametro type = 4.\\ Il significato delle due funzione si distingue a livello di protocollo MODBUS. Alcuni slave possono mettere a disposizione delle zone di memoria differenti a seconda se le word lette sono Holding o Input. Nel caso di slave Qmove le due richieste hanno lo stesso effetto. | ||
- | ==== - Richieste di scrittura | + | Word read function. For reading the bit of the slave (idcard). The function is equal to the “Read Holding Register”. sets the parameter type = 4.\\ The meaning of the two functions is distinguished at the level of MODBUS protocol. Some slave can make available different memory areas depending if the read word are Holding or Input. In the case of slave Qmove the two requests have the same effect. |
+ | |||
+ | ==== - Write request | ||
=== Force coil === | === Force coil === | ||
- | Funzione di scrittura bit. Si vogliono scrivere | + | |
- | 5.\\ Bisogna impostare | + | Bit write function. For writing |
- | per indicare l’indice del bit nella “tabella dei dati da scrivere” in cui è contenuto il valore da scrivere. | + | |
=== Force register === | === Force register === | ||
- | Funzione di scrittura singola word. Si vuole scrivere | + | |
- | //type// = 6.\\ Bisogna impostare | + | Word write function. For write (force) the word of a slave (// |
- | impostare | + | |
=== Force multiple coil === | === Force multiple coil === | ||
- | Funzione di scrittura | + | |
- | //type// = 15.\\ Bisogna impostare | + | Multiples |
- | num il numero di bit da scrivere. Bisogna impostare | + | (addr + num - 1) <= 512 e (tabreg + num - 1) <= 512 otherwise the request will fail (reporting by wcmd). |
- | da cui iniziano i valori da scrivere. Si raccomanda di soddisfare sempre le seguenti due condizioni:\\ | + | |
- | (addr + num - 1) <= 512 e (tabreg + num - 1) <= 512 altrimenti la richiesta non potrà essere eseguita | + | |
=== Force multiple register === | === Force multiple register === | ||
- | Funzione di scrittura word multiple. Si vogliono scrivere (forzare) le word di un certo slave (// | ||
- | //type// = 16.\\ Bisogna impostare addr per indicare l’indirizzo della word nello slave in cui si intende scrivere. Si deve | ||
- | impostare in num il numero di word da scrivere. Bisogna impostare tabreg per indicare l’indice della word nella “tabella | ||
- | dei dati da scrivere” da cui iniziano i valori da scrivere. Si raccomanda di soddisfare sempre le seguenti due condizioni: | ||
- | (addr + num - 1) <= 32 e (tabreg + num - 1) <= 32 altrimenti la richiesta non potrà essere eseguita (segnalazione mediante wcmd). | ||
- | ==== - Esempi ==== | + | Multiples word write function. For write (forzare) the word of a slave (// |
+ | (addr + num - 1) <= 32 e (tabreg + num - 1) <= 32 otherwise the request will fail (reporting by wcmd). | ||
- | 1) Impostazioni modbus e apertura del canale di comunicazione di tipo seriale | + | ==== - Examples ==== |
+ | |||
+ | 1) Modbus settings and opening of serial communication | ||
<code QCL> | <code QCL> | ||
modbus.mode = 0 ; modbus master | modbus.mode = 0 ; modbus master | ||
Line 257: | Line 247: | ||
</ | </ | ||
- | 3) Lettura del registro | + | 3) Reading the registry |
<code QCL> | <code QCL> | ||
modbus.idcard = 67 | modbus.idcard = 67 | ||
Line 267: | Line 257: | ||
WAIT modbus.st_sended | WAIT modbus.st_sended | ||
IF (modbus.err) | IF (modbus.err) | ||
- | CALL ErroreModbus | + | CALL ErrorModbus |
ENDIF | ENDIF | ||
- | slVelocita | + | slSpeed |
</ | </ | ||
- | 4) Lettura dei holding register | + | 4) Reading of the holding register |
- | Siccome l’area di scambio dati QCL non supporta l’indirizzo | + | The area of QCL data exchange does not support the address |
<code QCL> | <code QCL> | ||
modbus.idcard = 8 | modbus.idcard = 8 | ||
Line 283: | Line 273: | ||
WAIT modbus.st_sended | WAIT modbus.st_sended | ||
IF (modbus.err) | IF (modbus.err) | ||
- | CALL ErroreModbus | + | CALL ErrorModbus |
ENDIF | ENDIF | ||
| | ||
swTemp1 = modbus.iword10 | swTemp1 = modbus.iword10 | ||
- | slVelocita | + | slSpeed |
slPosiz = modbus.ilong7 | slPosiz = modbus.ilong7 | ||
swTemp1 = modbus.iword15 | swTemp1 = modbus.iword15 | ||
</ | </ | ||
- | ==== - Schema a blocchi | + | ==== - Block diagrams |
{{: | {{: | ||
==== - Broadcast ==== | ==== - Broadcast ==== | ||
- | Il Broadcast è un messaggio speciale che viene inviato dal Master e viene ricevuto contemporaneamente da tutti gli slave | ||
- | connessi. La funzionalitá broadcast (idcard = 0) è supportata solamente in modo master e se viene usato un messaggio | ||
- | con type = 5, 6, 15 e 16 (solo scrittura). In questa modalità lo stato st_sended viene attivato appena terminata la trasmissione | ||
- | e non alla ricezione della conferma dallo slave. Infatti non esiste nessuna risposta degli slave per questo tipo di | ||
- | messaggi. Non è possibile utilizzare il comando SENDSYC. | ||
- | ==== - Identificazione degli Slave ==== | + | The Broadcast is a special message that is sent by the Master and is received simultaneously from all connected slaves. The broadcast function (idcard |
- | La scheda quando funziona in modalità Master permette, con un speciale comando, di riconoscere se lo slave collegato è | + | |
- | di tipo QEM. In caso affermativo determina anche il modello di slave connesso. Questo permette di realizzare una diagnostica | + | |
- | sulla corretta configurazione della rete. Non è possibile estendere questo controllo a tutti i tipi di slave esistenti | + | |
- | perché il protocollo non prevede una modalità standard di riconoscimento slave.\\ | + | |
- | 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 | + | |
- | 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.\\ | + | |
- | 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. | + | |
- | Esempio d' | + | ==== - Slaves indentification ==== |
+ | |||
+ | When the card works in master mode allows, with specila command, tell if the slave connected is a QEM. If so also determines the pattern of slave connected. This allows a diagnostic on the correct network configuration. You cannot extend this control to all types of existing slaves because the protocol does not provide a standard way of slave recognition.\\ | ||
+ | The READSTYPE command executed after selecting the slave (through idcard parameter) send a nr.17 modbus request to the slave for recognition. The slave will responds with a default value and can be read in the stype parameter of the master. If the slave is not produced by QEM, the parameter will be –1 value to indicate that the slave is connected but you cannot identify it.\\ | ||
+ | For the MODBUS device the ID slave is different depending on the slave QEM used. For encoding of the slaves see the slave Firmware used. | ||
+ | |||
+ | Example of slave identification | ||
<code QCL> | <code QCL> | ||
modbus: | modbus: | ||
Line 328: | Line 310: | ||
ENDIF | ENDIF | ||
</ | </ | ||
- | ==== - Estensione del protocollo | + | ==== - Protocol extension |
- | Il protocollo di comunicazione | + | The modbus standard |
* INPUT STATUS, | * INPUT STATUS, | ||
* COIL STATUS, | * COIL STATUS, | ||
* INPUT REGISTER, | * INPUT REGISTER, | ||
* HOLDING REGISTER. | * HOLDING REGISTER. | ||
- | Questi | + | These 4 types treat signals as Digital Inputs, Digital Outputs, Analog Inputs, and Analog Outputs. |
- | (sia INPUT REGISTERS | + | To allow support for datatypes larger than 16 bit, has been designed an extension to the protocol to treat long 32 bit dimension values. Implementing this feature preserves the formatting of the message |
- | (esempio | + | |
- | Per permettere di suppportare tipi di dato di dimensione maggiore di 16 bit, è stata progettata una estensione al protocollo | + | |
- | per trattare valori di dimensione | + | |
- | messaggio | + | |
- | questa estensione è attiva | + | |
- | per ogni richiesta di registro. Se l’indirizzo è superiore a 5000 verrà risposto con valore | + | |
- | rimane invariato con risposta a 16 bit. | + | |
- | ==== - Comandi e parametri | + | ==== - Commands and parameters |
- | === - Simbologia adottata | + | === - Used symbols |
- | Il nome del parametro, stato o comando viene riportato alla sinistra della tabella. | + | |
+ | The parameter name, condition or command is taken back to the left side of the table. | ||
**R**\\ | **R**\\ | ||
- | Indica se il relativo parametro o stato è ritentivo | + | Indicates if the parameter or state is retentive |
- | Se il device | + | If the device |
- | R = Ritentivo\\ | + | R = Retentive\\ |
- | 0 = Al momento dell’inizializzazione del device | + | 0 = Upon initialization of the device |
- | 1 = Al momento dell’inizializzazione del device | + | 1 = Upon initialization of the device |
- | - = Al momento dell’inizializzazione del device | + | - = Upon initialization of the device |
**D**\\ | **D**\\ | ||
- | Indica la dimensione del parametro.\\ | + | Indicates the size of the parameter.\\ |
F = Flag\\ | F = Flag\\ | ||
B = Byte\\ | B = Byte\\ | ||
Line 366: | Line 342: | ||
S = Single Float | S = Single Float | ||
- | == Condizioni | + | == Conditions |
- | Vengono descritte tutte le condizioni necessarie affinché il parametro sia considerato corretto o perché il comando venga accettato.\\ | + | |
- | In alcuni casi vengono specificati dei valori limite per l’accettazione del parametro: se vengono introdotti dei valori esterni | + | Describes all the conditions necessary for the parameter so that the parameter is considered correct or because the command is accepted.\\ |
- | ai limiti impostati, il dato viene comunque accettato; pertanto devono essere previsti opportuni controlli dell’applicativo tali | + | In some cases, limit values are specified for the acceptance of the parameter: if any values outside the limits set are introduced, the data is however accepted; therefore appropriate controls of the application must be provided to ensure the proper functioning.\\ |
- | da garantire il corretto funzionamento.\\ | + | To execute a command, all conditions must be met; otherwise the command does not execute. |
- | Per l’esecuzione di un comando, tutte le relative condizioni devono necessariamente essere soddisfatte; in caso contrario | + | |
- | il comando non viene eseguito. | + | |
**A**\\ | **A**\\ | ||
- | Indica la modalità di accesso.\\ | + | Indicates the access mode.\\ |
- | R = Read (lettura).\\ | + | R = Read.\\ |
- | W = Write (scrittura).\\ | + | W = Write.\\ |
RW = Read / Write.\\ | RW = Read / Write.\\ | ||
- | === - Parametri | + | === - Parameters |
- | ^ Nome ^ D ^ R ^ A ^ Condizioni | + | |
- | | mode | B | R | R/W | - | **Mode**\\ (0 ÷ 2)\\ Definisce se la scheda deve funzionare come master | + | ^ Name ^ D ^ R ^ A ^ Conditions |
- | | prot | B | R | R/W | - | **Protocol**\\ (0 ÷ 1)\\ Definisce il tipo di protocollo Modbus da utilizzare.\\ **0** = ASCII,\\ **1** = RTU,\\ **2** = TCPIP | | + | | mode | B | R | R/W | - | **Mode**\\ (0 ÷ 2)\\ Defines if the board should function as a master |
- | | wider | B | R | R/W | - | **Wide Registers**\\ (0 ÷ 1)\\ Indica se utilizzare l’estensione del protocollo per i registri a 32bit. Vedere capitolo | + | | prot | B | R | R/W | - | **Protocol**\\ (0 ÷ 1)\\ Defines the type of modbus protocol to use.\\ **0** = ASCII,\\ **1** = RTU,\\ **2** = TCPIP | |
- | | idcard | + | | wider | B | R | R/W | - | **Wide Registers**\\ (0 ÷ 1)\\ Indicates if to use the 32-bit registers protocol extension. See the “Extension of the Protocol” section |
- | | type | B | 1 | R/W | - | **Type**\\ | + | | idcard |
- | | addr | L | 1 | R/W | - | **Address**\\ (1 ÷ 65535)\\ | + | | type | B | 1 | R/W | - | **Type**\\ |
- | | tabreg | + | | addr | L | 1 | R/W | - | **Address**\\ (1 ÷ 65535)\\ |
- | | num | W | 1 | R/W | - | **Number**\\ (1 ÷ 512)\\ | + | | tabreg |
- | | brate | L | R | R/W | - | **Baud rate**\\ Baud rate della seriale.\\ Valori validi: 4800, 9600, 19200, 38400, 57600, 115200. | + | | num | W | 1 | R/W | - | **Number**\\ (1 ÷ 512)\\ |
- | | stopb | B | R | R/W | - | **Stop bit**\\ | + | | brate | L | R | R/W | - | **Baud rate**\\ |
- | | par | B | R | R/W | - | **Parity**\\ (0 ÷ 2)\\ **0** = none (nessuna),\\ **1** = odd (dispari),\\ **2** = even (pari). | | + | | stopb | B | R | R/W | - | **Stop bit**\\ |
- | | tout | W | R | R/W | - | **Timeout**\\ (0 ÷ 9999 msec)\\ | + | | par | B | R | R/W | - | **Parity**\\ (0 ÷ 2)\\ **0** = none,\\ **1** = odd,\\ **2** = even. | |
- | | toutsyc | + | | tout | W | R | R/W | - | **Timeout**\\ (0 ÷ 9999 msec)\\ |
+ | | toutsyc | ||
| iword1÷32 | | iword1÷32 | ||
- | | st_ibit0÷15 | + | | st_ibit0÷15 |
| ilong1÷16 | | ilong1÷16 | ||
| oword1÷32 | | oword1÷32 | ||
- | | st_obit0÷15 | + | | st_obit0÷15 |
| olong1÷16 | | olong1÷16 | ||
- | La possibilità di comunicare con il protocollo | + | The ability to communicate with the TCPIP protocol It was developed at a later time than the birth of the MODBUS |
- | Per configurare il numero della porta TCPIP è necessario andare a scrivere sui parametri | + | To configure the TCPIP port number You must go and write about the // |
* **stopb** = tcpip_port / & | * **stopb** = tcpip_port / & | ||
* **par** = tcpip_port ANDB & | * **par** = tcpip_port ANDB & | ||
- | Per impostare lo slave TCPIP a cui si vuole eseguire la richiesta è necessario andare a scrivere sul parametro | + | To set the TCPIP slave to which you want to execute the request you must go to write on the// |
- | Un indirizzo | + | An IP address can be expressed as TcpAddr3.TcpAddr2.TcpAddr1.TcpAddr0 (for example |
* **brate** = (TcpAddr3 * & | * **brate** = (TcpAddr3 * & | ||
- | === - Variabili | + | === - Variables |
- | ^ Nome ^ D ^ R ^ A ^ Condizioni | + | |
- | | err | B | 0 | R | - | **Errors**\\ | + | ^ Name ^ D ^ R ^ A ^ Conditions |
- | | serr | B | 0 | R/W | - | **Serial Errors**\\ | + | | err | B | 0 | R | - | **Errors**\\ |
- | | stype | W | 0 | R | - | **Slave type**\\ | + | | serr | B | 0 | R/W | - | **Serial Errors**\\ |
+ | | stype | W | 0 | R | - | **Slave type**\\ | ||
+ | === - States === | ||
- | === - Stati === | + | ^Name^D^R^A^Conditions^Description^ |
- | ^Nome^D^R^A^Condizioni^Descrizione^ | + | |st_sended|F|0|R|-|**Sended**\\ |
- | |st_sended|F|0|R|-|**Sended**\\ | + | |st_opencom|F|0|R|-|**Open communication port**\\ |
- | |st_opencom|F|0|R|-|**Open communication port**\\ | + | |wdata|F|0|R|-|**Warning Data**\\ |
- | |wdata|F|0|R|-|**Warning Data**\\ | + | |wcmd|F|0|R|-|**Warning Command**\\ |
- | |wcmd|F|0|R|-|**Warning Command**\\ | + | |
=== - Comandi === | === - Comandi === |