Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Problemi di trasmissione dati su porta COM2 in RS485
- Questo topic ha 1 risposta, 2 partecipanti ed รจ stato aggiornato l'ultima volta 13 anni, 3 mesi fa da
Sergio Bertana.
-
AutorePost
-
Luglio 8, 2013 alle 8:52 am #35382
Emiliano
PartecipanteIn un mio progetto avrei la necessità di utilizzare la porta RS485 dello SlimLine quindi utilizzo le tre parti di codice sottostanti;
IF (SysFirstLoop) THEN
PortPC:=Sysfopen(‘COM2’, ‘rw’); (* porta 485 *)
lRet:=SysGetSerialMode(ADR(Sm), PortPC);
Sm.Baudrate:=9600; (*Valore di baud rate *)
Sm.Parity:=’N’; (*Tipo di parità *)
Sm.DataBits:=8;(* Numero di bit frame dato *)
Sm.StopBits:=1; (* Numero di bit di stop *)
Sm.EchoFlush:=FALSE; (*Echo flush *)
Sm.DTRManagement:=DTR_OFF; (* DTR signal off *)
lRet:=SysSetSerialMode(ADR(Sm), PortPC);
END_IF;IF (SysClock1000 <> Pulse) THEN
Txstring:=’CIAO’;
Dummy:=SysVarfprintf(PortPC, ‘%s’, STRING_TYPE, Txstring);
Pulse:=SysClock1000;
END_IF;WHILE TO_BOOL(SysGetIChars(PortPC)) DO
charead:=TO_USINT(Sysfgetc(PortPC)); (* Rx carico la stringa *)
LETTO:=TRUE;
END_WHILE;Il tutto funziona correttamente utilizzando la COM0 e la COM1 mentre per quanto riguarda la COM2 riesco a ricevere ma non riesco a trasmettere, ovvero lato PC non vedo arrivare niente, come convertitore seriale 232/485 utilizzo un Moxa con resistenza di terminazione attiva e su lato slimline il ponticello è su LKstore. Dove sbaglio ?
Luglio 9, 2013 alle 8:59 am #37689Sergio Bertana
Amministratore del forumLa porta COM2 dello SlimLine è configurata in RS485 2 fili, quindi supporta solo comunicazioni half-duplex, in pratica o trasmette o riceve. La selezione della modalità trasmissione/ricezione è gestita dal segnale DTR. Il sistema operativo può gestire il segnale DTR in modo automatico in base alla impostazione del membro DTRManagement della struttura Sm.
Sm.DTRManagement:=DTR_AUTO_WO_TIMES; (* DTR automatico senza interposizione tempi *)
Con l’impostazione automatica quando esegui una operazione di scrittura sulla porta (Nel tuo caso SysVarfprintf), SlimLine provvede a commutare la porta in trasmissione a trasmettere il dato e poi a ricommutare la porta in ricezione. Se utilizzi l’impostazione.
Sm.DTRManagement:=DTR_AUTO_W_TIMES; (* DTR automatico con interposizione tempi *)
Verranno aggiunti i tempi di ritardo definiti nei membri DTROnTime (Tempo di attesa dopo avere attivato il segnale DTR prima di trasmettere i dati), DTROffTime (Tempo di attesa dopo avere terminato la trasmissione dei dati prima di disattivare il segnale DTR).
Avendo nel tuo programma impostato DTR_OFF la porta è sempre in ricezione, viceversa impostando DTR_ON la porta sarebbe sempre in trasmissione.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.