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 17:06] – [Table] qem207 | software:devices:modbus [2015/09/16 09:56] – [6.1.1. Aggiornamento dei parametri tipo owordNN] qem207 |
---|
| |
=== - Variabili - Modbus Master === | === - Variabili - Modbus Master === |
^Nome^D^R^A^Condizioni^Descrizione^ | ^ Nome ^ D ^ R ^ A ^ Condizioni ^ Descrizione ^ |
|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 //st_sended//. I valori da 1 a 49 sono quelli inviati dallo slave. I valori superiori a 50 sono generati internamente dal master. I primi 8 valori sono normalizzati nel protocollo e sono:\\ **0** = comunicazione avvenuta senza errori,\\ **1** = ILLEGAL FUNCTION,\\ **2** = ILLEGAL DATA ADDRESS,\\ **3** = ILLEGAL DATA VALUE,\\ **4** = SLAVE DEVICE FAILURE,\\ **5** = ACKNOWLEDGE,\\ **6** = SLAVE DEVICE BUSY,\\ **7** = NEGATIVE ACKNOWLEDGE,\\ **8** = MEMORY PARITY ERROR,\\ **5**0 = UNKNOWN RECEIVED ERROR lo slave ha risposto con un codice superiore a 49,\\ **5**1 = TIMEOUT lo slave non ha risposto entro il tempo programmato nel parametro tout,\\ **52** = INVALID ANSWER,\\ **52** = INVALID FUNCTION ANSWER - Tipo funzione non supportata,\\ **53** = CHECKSUM ANSWER - Il checksum ricavato non corrisponde,\\ **54** = TRUNCATED ANSWER - Messaggio troppo corto,\\ **55** = INVALID ID ANSWER - Id slave non corrispondente,\\ **70** = TIMEOUT SYNCHRONIZED lo slave QEM non hanno eseguito il comando RECEIVED entro il tempo programmato nel parametro toutsyc.\\ In modalità slave il parametro non viene mai aggiornato.| | | 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 //st_sended//. I valori da 1 a 49 sono quelli inviati dallo slave. I valori superiori a 50 sono generati internamente dal master. I primi 8 valori sono normalizzati nel protocollo e sono:\\ **0** = comunicazione avvenuta senza errori,\\ **1** = ILLEGAL FUNCTION,\\ **2** = ILLEGAL DATA ADDRESS,\\ **3** = ILLEGAL DATA VALUE,\\ **4** = SLAVE DEVICE FAILURE,\\ **5** = ACKNOWLEDGE,\\ **6** = SLAVE DEVICE BUSY,\\ **7** = NEGATIVE ACKNOWLEDGE,\\ **8** = MEMORY PARITY ERROR,\\ **5**0 = UNKNOWN RECEIVED ERROR lo slave ha risposto con un codice superiore a 49,\\ **5**1 = TIMEOUT lo slave non ha risposto entro il tempo programmato nel parametro tout,\\ **52** = INVALID ANSWER,\\ **52** = INVALID FUNCTION ANSWER - Tipo funzione non supportata,\\ **53** = CHECKSUM ANSWER - Il checksum ricavato non corrisponde,\\ **54** = TRUNCATED ANSWER - Messaggio troppo corto,\\ **55** = INVALID ID ANSWER - Id slave non corrispondente,\\ **56** = INVALID_MBAP_TRANSACTION_ID - modbus TCPIP, //transaction ID// non corretto,\\ **57** = INVALID_MBAP_PROTOCOL_ID - modbus TCPIP, //protocol ID// diverso da zero,\\ **70** = TIMEOUT SYNCHRONIZED lo slave QEM non hanno eseguito il comando RECEIVED entro il tempo programmato nel parametro toutsyc.\\ In modalità slave il parametro non viene mai aggiornato. | |
|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.| | | 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 //st_sended// diventa 1 e se era stato eseguito un comando READSTYPE| | | stype | W | 0 | R | - | **Slave type**\\ Indica il tipo di slave connesso. Il parametro viene aggiornato quando il parametro //st_sended// diventa 1 e se era stato eseguito un comando READSTYPE | |
| |
=== - Stati - Modbus Master === | === - Stati - Modbus Master === |
==== - Modo di funzionamento SLAVE ==== | ==== - Modo di funzionamento SLAVE ==== |
| |
La modalità slave viene impostata con il parametro mode = 1. Bisogna introdurre nei parametri il codice dell’ID slave tramite il parametro idcard. Le operazioni che spettano all’applicativo QCL sono essenzialmente due: | La modalità slave viene impostata con il parametro mode = 1 o mode = 2. Bisogna introdurre nei parametri il codice dell’ID slave tramite il parametro idcard. Le operazioni che spettano all’applicativo QCL sono essenzialmente due: |
* aggiornare i parametri tipo owordNN, olongNN (che verranno poi letti dal master) | * aggiornare i parametri tipo owordNN, olongNN (che verranno poi letti dal master) |
* processare i parametri tipo iwordNN, ilongNN (che sono stati scritti dal master) | * processare i parametri tipo iwordNN, ilongNN (che sono stati scritti dal master) |
| |
| === - Ciao === |
| |
=== - Aggiornamento dei parametri tipo owordNN === | === - Aggiornamento dei parametri tipo owordNN === |
== Esempio: == | == Esempio: == |
<code QCL> | <code QCL> |
MAIN: | modbus.olong1 = anpos.speed |
modbus:olong1 = anpos:speed | modbus.oword1 = npezzi |
modbus:oword1 = npezzi | modbus.oword2 = npezzitot |
modbus:oword2 = switch | modbus.oword3 = anpos.dir |
modbus:oword3 = anpos:dir | modbus.olong2 = anpos.posit |
modbus:olong2 = anpos:posit | modbus.VALIDATE |
VALIDATE modbus | |
WAIT 1 | |
JUMP MAIN | |
</code> | </code> |
| |
Esempio: | Esempio: |
<code QCL> | <code QCL> |
MAIN: | WAIT modbus.st_msgrx |
WAIT modbus:st_msgrx | anpos.speed = modbus.ilong1 |
anpos:speed = modbus:ilong1 | anpos:posit = modbus.ilong2 |
anpos:posit = modbus:ilong2 | npezzi = modbus.iword1 |
switch = modbus:iword1 | RECEIVED modbus |
RECEIVED modbus | |
WAIT 1 | |
JUMP MAIN | |
</code> | </code> |
Naturalmente non esiste nessun controllo per evitare che durante la lettura dei parametri //iwordNN// il master erroneamente | Naturalmente non esiste nessun controllo per evitare che durante la lettura dei parametri //iwordNN// il master erroneamente |