no way to compare when less than two revisions
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| — | software:qview:qview_6:qcl_library:dw11sermodma [2019/08/29 17:01] (versione attuale) – creata - modifica esterna 127.0.0.1 | ||
|---|---|---|---|
| Linea 1: | Linea 1: | ||
| + | ====== DW11SerModMa ====== | ||
| + | |||
| + | **D = **// | ||
| + | |||
| + | **W = **// | ||
| + | |||
| + | La funzione DW11SerModMa simula il protocollo Modbus MASTER attraverso l' | ||
| + | In particolare la funzione dispone di un array (denominato " | ||
| + | La scelta se eseguire una scrittura o una lettura sul dispositivo Slave, deve essere fatta dall' | ||
| + | La variabile " | ||
| + | La variabile " | ||
| + | |||
| + | Le funzioni Modbus supportate dalla funzione sono: | ||
| + | * Funzione 3 - Read Holding Register | ||
| + | * Funzione 16 - Force Multiple Register (scrittura word multiple) | ||
| + | |||
| + | ===== IMPLEMENTAZIONE ===== | ||
| + | |||
| + | **DW11SerModMa (sercom1, Buffer, idcard, modWrite, address, points, error)** | ||
| + | |||
| + | Parametri: | ||
| + | |||
| + | ^IN/ | ||
| + | | IN | INTDEVICE | ||
| + | | IN | ARRSYS / ARRGBL | ||
| + | | IN | GLOBAL | ||
| + | | IN | GLOBAL | ||
| + | | IN | GLOBAL | ||
| + | | IN | GLOBAL | ||
| + | | OUT | GLOBAL | ||
| + | |||
| + | ==== Errore ==== | ||
| + | |||
| + | Una volta richiamata la funzione se ci sono degli errori la variabile di errore assume i seguenti valori:\\ | ||
| + | 0 - Nessun errore\\ | ||
| + | 1 - Numero char in ricezione > dimensione Buffer (64 elementi). (Controllare su paragrafo " | ||
| + | 2 - Error Checksum\\ | ||
| + | 3 - Address > dimensione max del Buffer utente\\ | ||
| + | 4 - Numero di Byte necessari alla risposta > 64 (limite max del buffer device)\\ | ||
| + | 5 - Time Out: Lo slave non risponde entro 200ms\\ | ||
| + | 6 - Function Type di risposta non corrispondente\\ | ||
| + | 7 - Numero caratteri in risposta non corrispondente al numero atteso | ||
| + | |||
| + | === Esempio === | ||
| + | |||
| + | // | ||
| + | <code QCL> | ||
| + | INTDEVICE | ||
| + | ; | ||
| + | Sercom1 | ||
| + | </ | ||
| + | |||
| + | //TASK_00// | ||
| + | <code QCL> | ||
| + | sercom1: | ||
| + | sercom1: | ||
| + | sercom1: | ||
| + | sercom1: | ||
| + | sercom1: | ||
| + | |||
| + | OPENCOM sercom1 | ||
| + | WAIT sercom1: | ||
| + | |||
| + | gfIniz = 1 | ||
| + | </ | ||
| + | |||
| + | //TASK_01// | ||
| + | <code QCL> | ||
| + | |||
| + | | ||
| + | MAIN: | ||
| + | IF gfIniz | ||
| + | ;----- LETTURA -------- | ||
| + | modWrite = 0 ; | ||
| + | address = 20 ; | ||
| + | points = 5 ; | ||
| + | DW11SerModMa (sercom1, Buffer, idcard, modWrite, address, points, error) | ||
| + | |||
| + | IF NOT error | ||
| + | glVariabile1 = Buffer [20] ; | ||
| + | glVariabile2 = Buffer [21] ; | ||
| + | glVariabile3 = Buffer [22] ; | ||
| + | glVariabile4 = Buffer [23] ; | ||
| + | glVariabile5 = Buffer [24] ; | ||
| + | ENDIF | ||
| + | |||
| + | ;----- SCRITTURA -------- | ||
| + | Buffer [50] = cnCounter: | ||
| + | |||
| + | modWrite = 1 ; | ||
| + | address = 50 ; | ||
| + | points = 1 ; | ||
| + | DW11SerModMa (sercom1, Buffer, idcard, modWrite, address, points, error) | ||
| + | ENDIF | ||
| + | |||
| + | WAIT 1 | ||
| + | JUMP MAIN | ||
| + | END | ||
| + | </ | ||
| + | |||
| + | === Note === | ||
| + | |||
| + | * È consigliabile implementare la funzione in un task apposito considerando che la stessa contiene delle istruzioni di WAIT che potrebbero bloccare l' | ||
| + | |||
| + | === Limiti === | ||
| + | |||
| + | Le funzioni Modbus supportate dalla funzione sono: | ||
| + | * Funzione 3 - Read Holding Register | ||
| + | * Funzione 16 - Force Multiple Register (scrittura word multiple) | ||
| + | |||
| + | Il numero limite di variabili che si possono scambiare è il seguente | ||
| + | * Funzione 3 : massimo 30 word leggibili contemporaneamente | ||
| + | * Funzione 16: massimo 28 word scrivibili contemporaneamente | ||