Witam,
Problem mój dotyczy przemysłowego monitora dotykowego z interfejsem RS232. Monitor ten przy dotknięciu powłoki dotykowej wysyła przez RS232 ciąg bajtów. Komunikuje się on bez problemów z komputerem PC posiadającym fizyczny port RS232 (wysyłane bajty są odbierane z portu RS232 PC np. przy pomocy HyperTerminala), natomiast nie chce współpracować z innymi urządzeniami, tj.:
- sterownikiem Beckhoff CX9001 z modułem CX9000-N030 z dwoma portami RS232 (na współpracy monitora z tym urządzeniem najbardziej mi zależy),
- komputerem PC przez konwertery RS232<->RS485 ADAM 4520 (testowałem konfigurację: monitor [RS232] -> ADAM1 <-[RS485]-> ADAM2 -> PC[RS232], w której monitor nie komunikował się z PC - aby wykluczyć problemy z konwerterami, podłączyłem w miejsce monitora drugi port RS232 PC, komunikacja między portami - przesyłanie znaków przez HyperTerminal - działała poprawnie).
Wykluczyłem możliwość uszkodzenia portów RS232 w/w urządzeń (te w module CX900-N030 były testowane z czytnikiem kodów kreskowych, także komunikacja między komputerem PC a sterownikiem Beckhoffa, przy połączeniu kablem nullmodem działała poprawnie - przez HyperTerminal były odbierane/wysyłane znaki). Także parametry transmisji były we wszystkich opisanych przypadkach identyczne (9600 b/s, 8 bitów danych, 1 bit stopu, brak sterowania przepływem - zgodnie z instrukcją monitora).
W związku z powyższym, nie doszukując się żadnych programowych przyczyn problemów, postanowiłem zbadać poziomy napięć generowane przez interfejs RS232 monitora w trakcie przesyłania danych. Poniżej zamieszczam link do oscylogramu napięcia na pinie Tx interfejsu RS232 monitora w trakcie transmisji (dotknięcia powłoki dotykowej). Napięcie logicznej "1": -7V, logicznego "0": 6.8V, więc niby mieszczą się w specyfikacji RS232.
Na podstawie tych testów doszedłem do wniosku, iż powodem kłopotów może być brak tolerancji RS232 w CX9001-N030 oraz w konwerterze ADAM na niższe (chociaż mieszczące się w specyfikacji RS232) poziomy napięć. Postanowiłem zatem dopasować poziomy napięć generowanych przez RS232 monitora do górnych granic określonych w standardzie RS232, gdyż .
Moim pierwszym pomysłem było użycie układu MAX232A: monitor [RS232] -> MAX232A [RS232->TTL->RS232] -> PC [RS232]. W tym celu podłączyłem sygnał z pinu Tx monitora do pinu R1_IN MAX232, zmostkowałem piny R1_OUT i T1_IN, wyjście na pinie T1_OUT. Napięcie logicznej "1" zostało w takim układzie obniżone do -15.6V, natomiast problem pojawił się z napieciem logicznego "0" - przy rozpoczęciu nadawania "0", występuje krótka "szpilka" napięcia 14V, po czym napięcie spada do poziomu -2V, a monitor nadal nie współpracuje z "problematycznymi" urządzeniami :-( MAX232A jest wyposażony, zgodnie z datasheetem, w kondensatory 0.1uF (tantalowe), zasilany 5V. Poniżej zamieszczam oscylogram napięcia na nóżce T1_OUT w trakcie transmisji z monitora.
Chciałbym zatem zapytać, w jaki sposób dokonać w opisanej sytuacji zmiany poziomów napięć generowanych przez interfejs RS232 monitora (bez ingerencji wewnątrz monitora - raczej w postaci układu pośredniczącego między monitorem a urządzeniem "klientem"), aby mieściły się w górnej granicy specyfikacji RS232? Czy jest to w ogóle możliwe do osiągnięcia? Czy powinienem dodać coś do opisanego MAX232A/zmienić parametry kondensatorów, aby generowane dla logicznego "0" napięcie znajdowało się na poziomie początkowej "szpilki"? Może należałoby zastosować jakiś inny układ (jaki)?
Z góry dziękuję za wszelkie odpowiedzi i pozdrawiam,