Konwerter RS232<>RS485 - obsługa programowa



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "kg" <krzygo_at_nospam_wp.pl>
Subject: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 10:41:10 +0200


Witam

Pracuję nad programową obsługą konwertera RS232<>RS485. Wykorzystywana
jest linia RTS do zmiany kierunku przesyłania danych po RS485. Program
powinien działać tak, że po wysłaniu kilku danych powinien zmienić stan
linii RTS na 0, dzięki czemu urządzenie podłączone do RS485 będzie mogło
przesłać z powrotem dane.

Wysyłanie danych następuje w następujący sposób:

WriteFile(...)
EscapeCommFunction(..., CLRRTS)

Niestety wywołanie funkcji EscapeCommFunction() najprawdopodobniej następuje
jeszcze w momencie wysyłania danych, przez co nie docierają one do
urządzenia. Zastosowanie funkcji WaitCommEvent(..., EV_TXEMPTY) czy
FlushFileBuffer() również nie pomaga. Może kto¶ zetknął się z tym problemem
i zna jego rozwiązanie.

Pozdrawiam

Krzysztof Gostkowski








Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "SpeedBit" <kula_at_nospam_polbox.com>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 10:50:59 +0200


Softwarowo dowiesz się tylko że znaki wyszły z kolejki windowsowej,
ale pamiętaj że masz jeszcze przynajmniej jeden znak w nadajniku (lub więcej
jak masz fifo - a raczej masz)!
Wstaw odpowiedniego do prędko¶ci delaya coby sobie spokojnie wyszedł(wyszły)
)
Zadziała na 100%
Pozdrowienia
Sławek



Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "Andrzej" <anga_at_nospam_tele2.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 12:57:18 +0200



Użytkownik "kg" <krzygo_at_nospam_wp.pl> napisał w wiadomo¶ci
news:a8u9d9$60n$1_at_nospam_news.tpi.pl...
Witam

Pracuję nad programową obsługą konwertera RS232<>RS485. Wykorzystywana
jest linia RTS do zmiany kierunku przesyłania danych po RS485. Program
powinien działać tak, że po wysłaniu kilku danych powinien zmienić stan
linii RTS na 0, dzięki czemu urządzenie podłączone do RS485 będzie mogło
przesłać z powrotem dane.

Wysyłanie danych następuje w następujący sposób:

WriteFile(...)
EscapeCommFunction(..., CLRRTS)

Niestety wywołanie funkcji EscapeCommFunction() najprawdopodobniej
następuje
jeszcze w momencie wysyłania danych, przez co nie docierają one do
urządzenia. Zastosowanie funkcji WaitCommEvent(..., EV_TXEMPTY) czy
FlushFileBuffer() również nie pomaga. Może kto¶ zetknął się z tym
problemem
i zna jego rozwiązanie.


Witam,

Czy korzystasz z gotowego konwertera, czy też sam zmontowałe¶ taki układ?
Rozwiązanie wykorzystujące linie modemowe do przełączania kierunku
transmisji jest bardzo uciążliwe. Można stosować rozwiązanie, które
zasugerował SpeedBit ale aby zapewnić dużą skuteczno¶ć przełączania należy
bardzo precyzyjnie wyznaczyć opóźnienie i oczywi¶cie jest ono uzależnione od
prędko¶ci transmisji. Przy większych prędko¶ciach transmisji to rozwiązanie
jest bardzo zawodne.

Jeżeli sam zmontowałe¶ konwerter i wykorzystujesz układ kompatybilny z
MAX485 (SN75176), to proponuję rozważyć możliwo¶ć zamiany rolami sygnałów D
i DE. Od wielu lat stosuję takie rozwiązanie i nie zdarzyło się by
jakakolwiek magistrala "odmówiła współpracy". Rozwiązanie ma tę zaletę, że
nie ma potrzeby sterowanie kierunkiem przepływu danych. Linie modemowe
stosuję do zasilania MAX-a, umieszczonego w obudowie RS-owego złącza DB9.
Układ działa bezbłędnie dla wszystkich prędko¶ci transmisji do 115k
włącznie.

Pozdrawiam
Andrzej Galant



Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "SpeedBit" <kula_at_nospam_polbox.com>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 14:54:35 +0200



Andrzejku,
Zaciekawiła mnie Twoja opcja sprzętowa, ale co¶ nie za bardzo ją rozumiem -
możesz rozwinąć (przybliżyć) temat?

Pozdrawiam
Sławek



Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "peters" <peters_at_nospam_poczta.onet.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Wed, 10 Apr 2002 08:47:13 +0200


Andrzejku,
Zaciekawiła mnie Twoja opcja sprzętowa, ale co¶ nie za bardzo ją
rozumiem -
możesz rozwinąć (przybliżyć) temat?

Jesli dobrze rozumiem:
D->Gnd
/RE ->Gnd
R->Rxd
DE->Zanegowane TxD z procesora

Takie podlaczenie stosuje sie przy realizacji magistrali CAN po RS485.
Wlaczenie nadawania nastepuje tylko gdy na TxD pojawia sie 0.
Gdy niczego nie nadajemy driver jest wiec odlaczony. Realizujemy cos
podobnego do iloczynu na drucie.


--
pozdrawiam, peters
peters_at_nospam_poczta.onet.pl
http://peters.republika.pl (strona Petersa dla elektroników)




Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "Andrzej" <anga_at_nospam_tele2.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Wed, 10 Apr 2002 09:39:26 +0200



Użytkownik "SpeedBit" <kula_at_nospam_polbox.com> napisał w wiadomo¶ci
news:a8uo9k$ga4$1_at_nospam_news.tpi.pl...

Zaciekawiła mnie Twoja opcja sprzętowa, ale co¶ nie za bardzo ją
rozumiem -
możesz rozwinąć (przybliżyć) temat?


Witam,

Proponuję sprawdzić kartę katologową scalaka DS36277 firmy NS (
http://boss.iele.polsl.gliwice.pl/data/national/docs/ds36277.pdf ) oraz opis
standardu SAE J1708.

Konwerter zbudowny jest na bazie popularnego tranceivera MAX485 (ADM485).
Jeżeli w układach tych uaktywnimy odbiornik (/RE=Lo), to scalak podłączony
do magistrali na której nie ma w aktywnego nadajnika, wystawi na wyj¶ciu R
stan Hi (tak samo zachowuje się odbiornik odpięty od magistrali lub ze
zwartymi liniami A, B).
Co się stanie jeżeli uaktywnimy jaki¶ nadajnik (DE=Hi), a na jego wej¶ciu D
będzie panował stan Hi?
Z punktu widzenia odbiornika - nic. Wyj¶cie D nadal będzie w stanie Hi.
Skoro odbiornik w ten sam sposób interpretuje "stan pasywny" magistrali oraz
"nadawanie jedynki", to wniosek jest prosty - jedynki nie musimy nadawać
(wystarczy "odpiąć" się od magistrali).
Aby nadać "zero" w tradycyjnej aplikacji robimy to wysterowując DE=Hi oraz
D=Lo.
Spróbujmy wykorzystać wej¶cia D i DE "niezgodnie z ich przeznaczeniem".
Wej¶cie D na stałe podpinamy do Lo. Na wej¶cie DE podajemy zanegowany sygnał
danych. Efekt jest taki, że transmitter uaktywnia się tylko na czas
wysyłania bitu danych o warto¶ci "zero". Nadajnik staje się nieaktywny
natychmiast po wysłaniu ostatniego zerowego bitu danych. W skarajnym wypadku
gdy transmitujemy bajt 0x00, nadajnik jest włączony tylko w czasie
transmisji bitu startu. Mimo to wszystkie odbiorniki podpięte do magistrali
prawidłowo zdekokodują odbiór nadanego bajtu.

RS422/485 jest symetrycznym, zrównoważonym systemem transmisji danych. Ta
"równowaga" zostaje w pewien sposób zachwiana przez nadajnik pracujący w
proponowanym wyżej trybie ale w najmniejszym stopniu nie zakłóca to
poprawnej pracy magistrali.

Prosty schemat konwertera RS232/RS485 udostępniam na
ftp://213.173.216.74 pub232to485.jpg

Przej¶ciówka ma tę zaletę, że przy odrobinie dobrej woli można ją upchnąć w
obudowie małej wtyczki RS-owej nawet gdy stosujemy elementy w obudowach do
montażu przewlekanego.
Nie wymaga zasilania, pracuje z dowolnym terminalem RS-owym na PC i przy
każdej prędko¶ci transmisji, umożliwia "podsłuch" i nadawanie, może
dekodować kolizje na magistrali...
Idealne rozwiązanie do prac serwisowych.
Osobi¶cie nie przepadam za RS485 wła¶nie ze względu na konieczno¶ć
uaktywniania nadajnika. Prawie zawsze korzystam z SAE J1708. Na "pierwszy
rzut oka" standardy te są nierozróżnialne.

Pozdrawiam miło¶ników RS485 :-)
Andrzej Galant





Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "przemek zyla" <belmotybe_at_nospam_poczta.onet.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 16:42:42 +0200



MAX485 (SN75176), to proponuję rozważyć możliwo¶ć zamiany rolami sygnałów
D
i DE. Od wielu lat stosuję takie rozwiązanie i nie zdarzyło się by
jakakolwiek magistrala "odmówiła współpracy". Rozwiązanie ma tę zaletę, że
nie ma potrzeby sterowanie kierunkiem przepływu danych. Linie modemowe
stosuję do zasilania MAX-a, umieszczonego w obudowie RS-owego złącza DB9.
Układ działa bezbłędnie dla wszystkich prędko¶ci transmisji do 115k
włącznie.

tez jestem zainteresowany twoim rozwiazaniem, mozesz
przyblizyc???



Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 23:49:03 +0200


Użytkownik "przemek zyla" <belmotybe_at_nospam_poczta.onet.pl> napisał w wiadomo¶ci
news:a8uul7$9qg$1_at_nospam_news.onet.pl...

MAX485 (SN75176), to proponuję rozważyć możliwo¶ć zamiany rolami
sygnałów
D
i DE. Od wielu lat stosuję takie rozwiązanie i nie zdarzyło się by
jakakolwiek magistrala "odmówiła współpracy". Rozwiązanie ma tę zaletę,
że
nie ma potrzeby sterowanie kierunkiem przepływu danych. Linie modemowe
stosuję do zasilania MAX-a, umieszczonego w obudowie RS-owego złącza
DB9.
Układ działa bezbłędnie dla wszystkich prędko¶ci transmisji do 115k
włącznie.

tez jestem zainteresowany twoim rozwiazaniem, mozesz
przyblizyc???


No to ze swojej strony dorzucę jeszcze atrykuł Jana Axelsona:
http://strony.wp.pl/wp/sp5xal/desgn485.pdf

Patent z 555-ką - sprawdzony - działa w praktyce. Aczkolwiek tylko w
podręcznym (uruchomieniowym) konwerterze 232<->485 do PC-ta. Nie wiem jak
sie zachowa na dłuższych, zakłócanych liniach.

MDz






Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "Paweł" <pawelr_at_nospam_elsat.com.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Tue, 9 Apr 2002 20:19:04 +0200


Niestety wywołanie funkcji EscapeCommFunction() najprawdopodobniej
następuje
jeszcze w momencie wysyłania danych, przez co nie docierają one do
urządzenia. Zastosowanie funkcji WaitCommEvent(..., EV_TXEMPTY) czy
FlushFileBuffer() również nie pomaga. Może kto¶ zetknął się z tym
problemem
i zna jego rozwiązanie.

Wczytuj dane, które wysyłasz. Można dzięki temu stwierdzić kiedy wszystko
zostało już wysłane oraz czy z magistrala działa prawidłowo.

Paweł




Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "kg" <krzygo_at_nospam_wp.pl>
Subject: Re: Konwerter RS232<>RS485 - obsługa programowa
Date: Wed, 10 Apr 2002 20:42:37 +0200



Użytkownik "Paweł" <pawelr_at_nospam_elsat.com.pl> napisał w wiadomo¶ci
news:a8van2$brj$1_at_nospam_news.tpi.pl...

Wczytuj dane, które wysyłasz. Można dzięki temu stwierdzić kiedy wszystko
zostało już wysłane oraz czy z magistrala działa prawidłowo.

Paweł


Tak też zrobiłem i to chyba najlepsza metoda, choć wymagała niewielkiej
przeróbki konwertera.
Dzięki.

Pozdrawiam

Krzysiek




Poprzedni Następny
Wiadomo¶ć
Spis tre¶ci
From: "Greg S." <greg_sz_at_nospam_dsuper.net>
Subject: Re: Konwerter RS232<>RS485 - =?iso-8859-1?Q?obs=B3uga?= programowa
Date: Tue, 09 Apr 2002 17:13:58 -0400


kg wrote:

Pracuję nad programową obsługą konwertera RS232<>RS485. Wykorzystywana
jest linia RTS do zmiany kierunku przesyłania danych po RS485. Program
powinien działać tak, że po wysłaniu kilku danych powinien zmienić stan
linii RTS na 0, dzięki czemu urządzenie podłączone do RS485 będzie mogło
przesłać z powrotem dane.
...

Moze rozwiazaniem moze byc czytanie tego co wysylasz. Nie wiem jaki masz uklad
ale mozna przeciez czytac z lini odbiorczej to co wlasnie wysylasz jak to
odbierzesz to wiesz ze wszystko jest juz wyslane.

Problem jeszcze moze byc po drugiej stronie tez. Sprawdz czy po przlaczeniu na
nadawanie odczekales dosc czasu zanim zaczniesz transmisje.

Jeszcze jedna mozliwosc. Jakis stan przejsciowy jest dekodowany jako Start i
wtedy wszystko biora diabli. Dlatego na wieksze szybkosci dobra jest transmisja
synchroniczna

Pozdro
Grz..Szy..