Ricevo da un cliente la richiesta di realizzare utilizzando un modulo CPU SlimLine un convertitore Ethernet/Seriale, ecco allora un programma che realizza il convertitore. Il cuore del programma si basa su queste linee di codice.
IF (((SysGetIChars(Fp[0]) = IChars[0]) AND (IChars[0] > 0)) OR (IChars[0] > 192)) THEN
RxChars[0]:=Sysfread(ADR(RxString), 1, IChars[0], Fp[0]); (* Received characters *)
RxChars[0]:=Sysfwrite(ADR(RxString), 1, RxChars[0], Fp[1]); (* Transmitted characters *)
END_IF;
IChars[0]:=SysGetIChars(Fp[0]); (* Input characters *)
In pratica vengono controllati ciclicamente i caratteri in ricezione da uno stream e quando non sono ricevuti caratteri per almeno un loop di programma (In alternativa si può gestire una temporizzazione) i caratteri ricevuti dallo stream sono inviati in uscita sull’altro.
Se il numero di caratteri in ricezione da uno stream supera i 3/4 del buffer di appoggio (192 bytes) i caratteri ricevuti dallo stream sono inviati in uscita sull’altro.
Naturalmente si possono realizzare nel modulo CPU almeno 3 convertitori (Uno per ognuna delle seriali disponibili), ad ogni convertitore verrà assegnata una porta TCP diversa. Ecco la stampa del programma ed il programma sorgente.