Jak skonfigurować i komunikować się z portu szeregowego?

głosy
41

Muszę wysyłać i odbierać dane przez połączenia szeregowego (RS-232 i RS-422).

Jak skonfigurować i komunikować się z takiego połączenia? Jak mogę dowiedzieć się, jakie ustawienia konfiguracyjne (np szybkość transmisji) powinny być i jak mam je ustawić?

W szczególności szukam to zrobić w Java, C / C ++ lub jednym z głównych powłok uniksowych, ale mam również pewne zainteresowanie programowania szeregowego za pomocą Windows / HyperTerminal.

Utwórz 06/08/2008 o 04:19
źródło użytkownik
W innych językach...                            


11 odpowiedzi

głosy
28

Zbudować wehikuł czasu i cofnąć się do roku 1987? Ho ho.

Ok, nie więcej snarky komentarze.

Jak mogę dowiedzieć się, jakie ustawienia konfiguracyjne (np baud rate) powinny być ...

Przeczytaj arkusz? Ok ok. Poważnie, ostatni. Jeśli nie wiesz, szybkość transmisji urządzenia, które próbują komunikować się, masz dwie możliwości. Zacznij zgadywania, ewentualnie odpadniesz się o-zakresu. Jeśli trzeba mieć dobry punkt wyjścia, pozwól mi sugerować 9600-8-N-1. Podejrzewam, można się tam dostać z brutalnej siły stosunkowo szybko. Jest jeszcze trzecia opcja od posiadania ninja starej szkoły, którzy mogą powiedzieć tylko przez wygląd zniekształcone znaki w pewnym standardowej szybkości transmisji co rzeczywista szybkość transmisji. Imponujący partia podstęp aby się upewnić.

Mam nadzieję, że chociaż masz dostęp do tych informacji. W Unix / Linux, można uzyskać Ahold minicom grać z portu szeregowego bezpośrednio. Powinno to dość szybki, żeby dostać konfiguracja zorientowali się.

jednym z głównych muszli Unix

W Unix port szeregowy (y) jest / są odwzorowywane plik do / dev / podkatalogu. ttyS0, na przykład. Jeśli konfiguracja prawidłowa szybkość transmisji i etażerka używając minicom, można nawet kot rzeczy do tego pliku, aby wysłać rzeczy tam.

Na mięsie na pytanie, można do niego dostęp programowo poprzez nagłówków POSIX. termios.h jest duży.

Zobacz: http://www.easysw.com/~mike/serial/serial.html#3_1 (już niedostępny)

ale mam również pewne zainteresowanie programowania szeregowego za pomocą Windows / HyperTerminal.

HyperTerminal i minicoma są w zasadzie ten sam program. Jak dla systemu Windows, jak pozwala ci uzyskać dostęp do portu szeregowego, Zostawię to pytanie dla kogoś innego. I nie zrobili, że w systemie Windows od czasów Win95.

Odpowiedział 06/08/2008 o 04:27
źródło użytkownik

głosy
10

Jeśli chcesz kod w Javie Naprawdę polecam SerialIOs SerialPort . Jest bardzo łatwy w użyciu i pozwala zaoszczędzić dni pracy. Nigdy nie znaleziono otwartą bibliotekę source tak dobre jak SerialIO, naprawdę!

Moja rada: nie należy używać seryjny ramy IO Sun! Jest od 1998 roku i pełne błędów. Można użyć RxTx ale serialio jest lepiej!

Odpowiedział 23/08/2008 o 09:15
źródło użytkownik

głosy
8

Dla C / C ++ w systemie Windows trzeba (co najmniej) dwie opcje:

  1. Użyj klasy SerialPort dostarczone przez .NET.
  2. Użyj API Win32. Jest obszerny artykuł MSDN sięga 1995 roku, a wiele darmowych bibliotek i przykładów w internecie, aby zacząć grę.

Opcja NET będzie dużo łatwiejsze.

Odpowiedział 13/08/2008 o 13:44
źródło użytkownik

głosy
4

Jeśli musi być przekrój platfrom, chciałbym zaproponować spojrzenie na Boost, Asio .

Odpowiedział 03/09/2008 o 13:12
źródło użytkownik

głosy
3

Jakiś czas temu pisałem przyzwoitej wielkości aplikacji do połączeń trasie z farmy modemów aż do adresu sieciowego TCP / IP.

Początkowo wyglądało na nieograniczonego (za darmo) seryjny biblioteki IO. Próbowałem Sun, IBM i RxTx. Byli dobrze dla rozwoju aplikacji oraz wstępnych badań, ale w produkcji każdy z nich okazał się niestabilny.

Ostatecznie zapłaciłem SerialPort SerialIO użytkownika. Konwersja ciągu dosłownie ćwiczeniem w zmieniających się importem, a biblioteka została całkowicie rock solid - nie mogę go polecamy. Mój wniosek został uruchomiony w dziedzinie 24/7 na kilka lat, a nie jeden z problemów napotykanych przez wielu klientów.

Jeśli zaczniesz rozwój używając SerialPort, mają lepszą API i chciałbym go używać.

Jeśli potrzebujesz wsparcia krzyżowego platformy Java z SerialPort był to najlepszy wybór mogłem znaleźć.

Wreszcie ich licencjonowania jest cholernie rozsądne tak długo, jak nie są preinstalacji oprogramowania na urządzenia dla swojego klienta (ów).

Odpowiedział 15/09/2008 o 20:16
źródło użytkownik

głosy
3

W pracy używamy TeraTerm i realterm do sprawdzenia dane szeregowe jest prawidłowo sformatowany. Również mamy rozdzielacz sprzętu z przełącznikiem więc możemy monitorować ruch do naszej aplikacji za pomocą kabla do innego portu.

Windows umożliwia dostęp do portu szeregowego poprzez CreateFile. Który daje rączkę i stamtąd można skonfigurować dostęp.

Odpowiedział 06/08/2008 o 06:04
źródło użytkownik

głosy
3

Z drugiej strony, jeśli chcesz to zrobić przy użyciu C #, który będzie działał na Windows i Linux - z pewnymi ograniczeniami (edycja:., Które mogą być nieaktualne nie mam możliwości, aby go przetestować.). Wystarczy utworzyć SerialPort obiekt, ustaw jego szybkości transmisji, port i inne ustawienia nieparzyste, infolinia na nim, i pisać swoje byte [] s. Po wszystkich konfiguracji, obiekt SerialPort działa bardzo podobnie do każdego strumienia sieciowego, tak powinno być dość łatwe do rozszyfrowania.

I jako państw ibrandy, trzeba znać wszystkie te ustawienia, takie jak szybkość transmisji, jeszcze przed uruchomieniem próbuje komunikować się z dowolnym urządzeniem szeregowym.

Odpowiedział 06/08/2008 o 04:35
źródło użytkownik

głosy
2

Z Java RxTx ( już niedostępny ) Biblioteka jest całkiem dobra. To podnosi gdzie seryjny ramy IO Sun przerwane.

Odpowiedział 08/08/2008 o 21:24
źródło użytkownik

głosy
1

Jeśli nie są zmuszeni do korzystania z konkretnego kompilatora Proponuję używać Qt i w nowej wersji 5.3 można znaleźć klasę poświęconą portów szeregowych:

http://qt-project.org/doc/qt-5/qserialport.html

Kod zostanie piszesz będzie działać na wszystkich platformach supprited Qt, przynajmniej te, które mają porty szeregowe.

Odpowiedział 06/09/2014 o 14:01
źródło użytkownik

głosy
1

W zależności od urządzenia, z którego próbuje komunikować się z, nie może być więcej parametrów niż szybkość transmisji, liczba bitów danych, rodzaj kontroli parzystości oraz liczba bitów stopu do rozważenia. Jeśli dobrze pamiętam, modemy użyć dziewięć linii interfejsu RS-232C. Niektóre urządzenia, takie jak, na przykład rejestrów pieniężnych, mogą używać sprzętu potwierdzeń na linii RTS / CTS lub DTR linii / STR.

W ogóle dobrze jest wiedzieć, jak działa interfejs. Nie można komunikować, jeśli szybkość transmisji nie pasuje, ale złe ustawienie innych parametrów może rodzaj pracy. Na przykład można łatwo przesłać dane do urządzenia spodziewa 1 bit stopu 2 ​​bity stopu ustawiony. Problemy zaczynają się przy próbie odbioru danych w takim przypadku. Można również wykorzystywać odpowiednio ustawiony bit parzystości jako jeden z bitów stopu itp

Odpowiedział 23/09/2008 o 02:21
źródło użytkownik

głosy
0

I zostały z wykorzystaniem purejavacomm: Jest to realizacja javax.comm napisany w czystym java + JNA

W przeciwieństwie RxTx, nie trzeba instalować dll. Jest napisany w czystym Java + JNA, który rozwiązał problem przenośności pomiędzy Windows i Linux dla mnie. To powinno być łatwe do portu do innych OS-es że JNA dotyczą, takich jak Solaris i FreeBSD, ale nie próbowałem go.

Możecie spodziewać się czystym biblioteki Java w tyle natywnej implementacji takich jak RxTx wydajności, ale z nowoczesnych procesorów, wąskim gardłem jest bardzo prawdopodobne bitrate z portu szeregowego, nie cykli CPU. Ponadto, jest to znacznie łatwiejsze do debugowania niż mieszanym Java / Native biblioteki lub czystej skompilowanego kodu natywnego.

Odpowiedział 18/03/2013 o 11:59
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more