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 | ||