wer180m Inserito: 10 febbraio 2009 Segnala Share Inserito: 10 febbraio 2009 Salve a tutti, sto realizzando una periferica Modbus Master qui http://www.plcforum.it/forums2/index.php?showtopic=50687vi scrivo perchè ci sono delle cose sul protocollo che non riesco a trovare:- il tempo tra una comunicazione e l'altra deve essere di 3,5 volte superiore a quello di un carattere, e quello tra un carattere e un altro di 1,5 inferiore al tempo del carattere.quindi per una comunicazione a 9600 bps, come converto i tempi? (inoltre nel datasheet delle periferiche che uso, mi dice che tra una comunicazione e l'altra devono passare 25ms) però tra un carattere ed un altro non saprei.- Se non ricevo risposta, dopo quanto tempo rimando il comando?Spero qualcuno di voi possa darmi un'indicazione Massimo Link al commento Condividi su altri siti More sharing options...
mf2hd Inserita: 10 febbraio 2009 Segnala Share Inserita: 10 febbraio 2009 quindi per una comunicazione a 9600 bps, come converto i tempi?Sperando di scrivere qualche cavolata... Ipotesi con il classico formato delle trasmissioni che si utilizzano solitamente come 9600,8,n,1.Ogni bit prende:1/9600= circa 104 usec Ogni carattere e' composto da 8bit + 1 di parita'+ 1 di stop = 10 bitQuindi, ogni carattere impiega:104usec x 10 = 1.04 msecla temporizzazione (minima) dei 3.5 caratteri sara quindi di:1.04msec x 3.5 = 3.64msec Stai sopra a questo tempo (es. 10msec o piu') e non dovresti avere problemi.P.S. ho scritto anche nell' altra sezione. Link al commento Condividi su altri siti More sharing options...
wer180m Inserita: 11 febbraio 2009 Autore Segnala Share Inserita: 11 febbraio 2009 Grazie mf2hd Leggendoti ho capito meglio come funziona la cosa, dal datasheet vedo che:- Le due periferiche che devo collegare possono andare a 19200 bps, ma la pausa tra un messaggio e l'altro la devo fare comunque di 25ms- Ogni byte è composto da 1 bit di start, 8 bit di dati (trasmessi dal meno significativo), 1 bit di parità + 1 bit di stop, nel caso non vi sia il bitdi parità si utilizzano 2 bit di stop-Il campo dati è formato da word=2bit, e la word viene trasmessa sempre dal byte più significativo.CALCOLIAMO:• indirizzo dispositivo (8 bit)• codice funzione (8 bit)• dati (N x 16 bit)• CRC (16 bit)carattere = 1 start + 8 di dati + 1 parità + 1 stop =11quindi in 1 secondo manda 19200 bit, in un millisecondo ne manda 19,2, per mandarne 11 ci vuole 11/19,2= 0,57ms. La distanza tra un carattere e un alto deve essere inferiore a esattamente 0,859375.Se ho capito bene, un comando va mandato nel seguente modo:Esempio comando:1h 03h 1000h 0003h CRC1 start+8dati+ 1 parità+1 di stop o se parità ok (no bit) 2 di stop (Giusto?)1h___________indirizzo di Slave--------------------------> 1 00000001 1103h__________comando di lettura------------------------> 1 00000011 0 111000h________primo registro di lettura----------->è 1 word---> 10 00------->1 00010001 0 11 + 1 00000000 0 110003h________lettura dei 3 registri contigui------>è 1 word---> 00 03------->1 00000000 0 11 + 1 00000011 0 11CRC_________controllo erroria questo punto se ho detto bene il messaggio sarebbe:10000000111 100000011011 100010001011 100000000011 crcMi sono incasinato del tutto perchè a questo punto servirebbe anche il tempo tra un byte e l'altro :ph34r: forse conviene usare in esadecimale e appoggiarsi alle libreriePS: grazie ancora mf2hd Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora