Vai al contenuto

Problemi di trasmissione dati su porta COM2 in RS485

Home Forum Controllori SlimLine e Netsyst (LogicLab) Problemi di trasmissione dati su porta COM2 in RS485

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #35382
    Emiliano
    Partecipante

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

    #37689
    Sergio Bertana
    Amministratore del forum

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

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.