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 18:04] – [5.5. Esempi] qem103 | en:software:devices:modbus [2016/12/23 17:05] – [6.3. Comandi e parametri] qem103 | ||
---|---|---|---|
Line 212: | Line 212: | ||
==== - Examples ==== | ==== - Examples ==== | ||
- | 1) FIXME Impostazioni modbus e apertura del canale di comunicazione di tipo seriale | + | 1) Modbus settings and opening of serial communication |
<code QCL> | <code QCL> | ||
modbus.mode = 0 ; modbus master | modbus.mode = 0 ; modbus master | ||
Line 247: | Line 247: | ||
</ | </ | ||
- | 3) Lettura del registro | + | 3) Reading the registry |
<code QCL> | <code QCL> | ||
modbus.idcard = 67 | modbus.idcard = 67 | ||
Line 257: | 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 273: | 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 = 0) is supported only in master mode and if you use a message with type = 5, 6, 15 and 16 (write only). In this mode the st_sended state is activated once ended the transmission and not on receipt of confirmation by the slave. There isn't answer on the slaves to such messages. You cannot use the SENDSYC command. |
- | La scheda quando funziona | + | |
- | di tipo QEM. In caso affermativo determina anche il modello di slave connesso. Questo permette di realizzare una diagnostica | + | ==== - Slaves indentification |
- | sulla corretta configurazione della rete. Non è possibile estendere questo controllo | + | |
- | perché il protocollo non prevede una modalità | + | 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 |
- | Il comando | + | The READSTYPE |
- | slave una richiesta modbus | + | For the MODBUS |
- | letto nel parametro | + | |
- | slave è connesso ma non è possibile identificarlo.\\ | + | |
- | Per il device | + | |
- | senso vedere il manuale | + | |
- | Esempio d' | + | Example of slave identification |
<code QCL> | <code QCL> | ||
modbus: | modbus: | ||
Line 318: | 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 356: | 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**\\ Indica se sono stati riscontrati errori nel protocollo.\\ In modalità master il parametro viene aggiornato in coincidenza dell’attivazione dello stato // | + | |
- | | serr | B | 0 | R/W | - | **Serial Errors**\\ Indica se sono stati riscontrati errori nella comunicazione seriale. Il parametro viene aggiornato ad ogni errore rilevato. Il valore permane fino:\\ - ad un successivo errore;\\ - alla scrittura di uno dei seguenti parametri: mode, prot, wider, brate, stopb, par;\\ - ad una scrittura sullo stesso (qualsiasi valore lo azzera).\\ **0** = nessun errore,\\ **1** = parity error,\\ **2** = framing error,\\ **3** = overrun error. | + | |
- | | stype | W | 0 | R | - | **Slave type**\\ Indica il tipo di slave connesso. Il parametro viene aggiornato quando il parametro // | + | |
+ | ^ Name ^ D ^ R ^ A ^ Conditions | ||
+ | | err | B | 0 | R | - | **Errors**\\ Indicates if errors occurred in the protocol.\\ In master mode the parameter is updated to coincide the activation of the // | ||
+ | | serr | B | 0 | R/W | - | **Serial Errors**\\ Indicates if errors occurred in serial communication. The parameter is updated for each error encountered. The value persists until:\\ - under a subsequent error;\\ - the writing of one of the following parameters: mode, prot, wider, brate, stopb, par;\\ - writing about himself (any value will reset).\\ **0** = no errors,\\ **1** = parity error,\\ **2** = framing error,\\ **3** = overrun error. | ||
+ | | stype | W | 0 | R | - | **Slave type**\\ Indicates the type of slave connected. The parameter is updated when the // | ||
- | === - Stati === | ||
- | ^Nome^D^R^A^Condizioni^Descrizione^ | ||
- | |st_sended|F|0|R|-|**Sended**\\ Stato utilizzato solo in modalità master. L’attivazione indica il completamento della trasmissione di un messaggio. Lo stato viene resettato con i comandi SEND o SENDSYC.| | ||
- | |st_opencom|F|0|R|-|**Open communication port**\\ L' | ||
- | |wdata|F|0|R|-|**Warning Data**\\ Questo bit segnala che è stato tentato un inserimento di un valore non valido in un parametro.| | ||
- | |wcmd|F|0|R|-|**Warning Command**\\ Questo bit segnala che è non è stato eseguito un comando perché mancano le condizioni necessarie.| | ||
- | === - Comandi | + | === - States |
- | I comandi a disposizione per gestire il device sono elencati sotto in ordine di priorità decrescente.\\ | + | |
- | Il device esegue tutti i comandi ricevuti entro lo stesso tempo di campionamento iniziando da quello con la priorità maggiore.\\ | + | |
- | Per esempio se il device riceve nello stesso tempo di campionamento i comandi CLOSECOM e OPENCOM, per primo esegue il comando OPENCOM e poi quello di CLOSECOM lasciando perciò la porta di comunicazione chiusa. | + | |
- | ^Nome^D^R^A^Condizioni^Descrizione^ | + | ^Name^D^R^A^Conditions^Description^ |
- | |SEND|-|-|-|mode = 0\\ 0 < num <= 128\\ st_sended = 1\\ st_opencom = 1|**Sended**\\ Determina la trasmissione del messaggio verso lo slave selezionato.| | + | |st_sended|F|0|R|-|**Sended**\\ State only been used in master |
- | |SENDSYC|-|-|-|mode = 0\\ 0 < num <= 128\\ st_sended = 1\\ st_opencom = 1|**Send synchronize**\\ Utilizzabile solo in modo master | + | |st_opencom|F|0|R|-|**Open communication port**\\ Activation indicates that the device is working the serial communications port. To set this state use the OPENCOM command, to reset CLOSECOM.| |
- | |READSTYPE|-|-|-|mode = 0\\ st_sended = 1\\ st_opencom = 1|**Read slave type**\\ Richiesta lettura informazione type sullo slave specificato in idcard. La risposta verrá segnalata sul parametro stype quando lo stato st_sended diventa 1.| | + | |wdata|F|0|R|-|**Warning Data**\\ |
- | |CLRWDATA|-|-|-|-|**Clear Warning Data**\\ | + | |wcmd|F|0|R|-|**Warning Command**\\ |
- | |CLRWCMD|-|-|-|-|**Clear Warning Command**\\ | + | |
- | |OPENCOM|-|-|-|st_opencom = 0|**Open Serial communication**\ Apre la comunicazione seriale (il device quindi impegna la porta di comunicazione ). Lo stato st_opencom diventa 1.| | + | |
- | |CLOSECOM|-|-|-|-|**Close Serial communication**\\ Chiude la comunicazione seriale (il device quindi non impegna piú la porta di comunicazione ). Lo stato st_opencom diventa 0.| | + | |
+ | === - Commands === | ||
- | ===== - Descrizione funzionamento come slave ===== | + | The available commands to manage the device are listed below in descending order of priority.\\ |
- | ==== - Modo di funzionamento SLAVE ==== | + | The device executes all commands received within the same sampling time starting from the one with the highest priority.\\ |
+ | For example if the device receives the same sampling time CLOSECOM and OPENCOM commands, first run the OPENCOM command and then to CLOSECOM leaving therefore the communication port closed. | ||
- | La modalità slave viene impostata con il parametro | + | ^Name^D^R^A^Conditions^Description^ |
+ | |SEND|-|-|-|mode = 0\\ 0 < num <= 128\\ st_sended | ||
+ | |SENDSYC|-|-|-|mode = 0\\ 0 < num <= 128\\ st_sended = 1\\ st_opencom = 1|**Send synchronize**\\ Usable only in master mode determines the message transmission towards a slave QEM with synchronisation.| | ||
+ | |READSTYPE|-|-|-|mode = 0\\ st_sended = 1\\ st_opencom = 1|**Read | ||
+ | |CLRWDATA|-|-|-|-|**Clear Warning Data**\\ Reset the wdata parameter reporting.| | ||
+ | |CLRWCMD|-|-|-|-|**Clear Warning Command**\\ Reset the wcmd parameter reporting.| | ||
+ | |OPENCOM|-|-|-|st_opencom = 0|**Open Serial communication**\ Open the serial communication (the device then committed the communications port ). The st_opencom status becomes 1.| | ||
+ | |CLOSECOM|-|-|-|-|**Close Serial communication**\\ Close the serial communication (the device then does not committted the communications port ). The st_opencom status becomes 0.| | ||
- | **Impostazioni modbus e apertura del canale di comunicazione di tipo seriale** | + | |
+ | ===== - Slave operation description ===== | ||
+ | ==== - Slave mode operation ==== | ||
+ | |||
+ | Slave mode is set with the mode = 1 or mode = 2 parameter. You must to introduce in the parameters the slave ID code through the idcard parameter. | ||
+ | |||
+ | **Modbus settings and opening channel of serial communication** | ||
<code QCL> | <code QCL> | ||
modbus.mode = 1 ; modbus slave | modbus.mode = 1 ; modbus slave | ||
Line 452: | Line 440: | ||
ENDIF | ENDIF | ||
</ | </ | ||
- | **Impostazioni modbus e apertura del canale di comunicazione di tipo TCPIP** | + | **Modbus settings and open of the communication channel of TCPIP type** |
<code QCL> | <code QCL> | ||
modbus.mode = 1 ; modbus slave | modbus.mode = 1 ; modbus slave | ||
Line 469: | Line 457: | ||
</ | </ | ||
- | Le operazioni che spettano all’applicativo | + | The operations that should execute the QCL are essentially two: |
- | * aggiornare i parametri tipo owordNN, olongNN (che verranno poi letti dal master) | + | * update the parameters |
- | * processare i parametri tipo iwordNN, ilongNN (che sono stati scritti dal master) | + | * process the parameters |
- | === - Aggiornamento dei parametri tipo owordNN === | + | === - Updating |
- | Per aggiornare i parametri tipo owordNN il QCL deve scrivere i valori nei parametri quindi inviare il comando VALIDATE. | + | |
- | L’utilizzo del comando si rende necessario per rendere disponibili alle letture del master i nuovi dati nello stesso istante, | + | |
- | evitando così che possano venire letti solamente parte dei parametri aggiornati. Quindi l’assegnazione di un valore ad un | + | |
- | parametro device NON SIGNIFICA che esso sia immediatamente disponibile per le letture del master. Sarà disponibile | + | |
- | solamente dopo il comando VALIDATE. | + | |
- | **Esempio** | + | To update the owordNN parameters type the QCL must write values in the parameters then send the VALIDATE command. The use of the command is necessary to make available on the readings of the master the new data at the same time, so that they can be read only part of updated parameters. So assigning a value to a device parameter DOES NOT MEAN that it is immediately available for the master readings. Will only be available after the VALIDATE command. |
+ | |||
+ | **Example** | ||
<code QCL> | <code QCL> | ||
modbus.olong1 = anpos.speed | modbus.olong1 = anpos.speed | ||
Line 489: | Line 474: | ||
</ | </ | ||
- | === - Processo dei parametri tipo iwordNN === | + | === - Process |
- | Per processare i parametri tipo iwordNN, invece, il QCL deve attendere che lo stato st_msgrx venga attivato. Questo significa | + | |
- | che un messaggio di scrittura è stato inviato dal master. Per i messaggi di lettura nessun segnale viene riferito ai | + | |
- | parametri QCL. Il QCL poi deve prelevare i valori dall’area scambio dati e al termine deve inviare il comando RECEIVED, | + | |
- | solo allora lo stato st_msgrx viene disattivato. | + | |
- | **Esempio** | + | To process the iwordNN parameters type, instead,the QCL must wait for the st_msgrx state is activated. This means that a write message was sent by the master. For the read message no signal reportedly to QCL parameters. The QCL then must take the values from the data exchange and at the end needs to send the RECEIVED command, only then the st_msgrx state is disabled. |
+ | |||
+ | **Example** | ||
<code QCL> | <code QCL> | ||
WAIT modbus.st_msgrx | WAIT modbus.st_msgrx | ||
Line 503: | Line 486: | ||
RECEIVED modbus | RECEIVED modbus | ||
</ | </ | ||
- | Naturalmente non esiste nessun controllo per evitare che durante la lettura dei parametri //iwordNN// il master erroneamente | ||
- | esegua un’altra scrittura, prima che il codice del progetto presente nello slave finisca il processo.\\ | ||
- | Inoltre il codice per la manipolazione del device modbus nell’applicativo è consigliato che sia raccolto in un unico task in | ||
- | modo da non creare accessi contemporanei ai device che potrebbero generare delle condizioni non valide in ogni singolo | ||
- | contesto. | ||
- | Tutte le richieste di lettura che arrivano dal master MODBUS | + | There is no control to prevent when reading //iwordNN// parameters the master incorrectly execute another writing, before the project code present in the slave to finish the process.\\ |
- | alla stessa | + | Also the code for handling the modbus device in the application it is recommended that it is collected in a single task in order not to create simultaneous accesses to the device that could generate invalid conditions. |
- | Tutte le richieste di scrittura che arrivano dal master | + | |
- | alla stessa | + | All read requests that arrive from the master MODBUS |
- | ==== - Schema a blocchi | + | All write requests arriving from the MODBUS |
+ | ==== - Block diagram | ||
{{: | {{: | ||
- | ==== - Comandi e parametri | + | ==== - Commands and parameters |
=== - Simbologia adottata === | === - Simbologia adottata === |