Hvordan konfigurerer og kommunisere med en seriell port du?

stemmer
42

Jeg trenger å sende og motta data over serielle tilkoblinger (RS-232 og RS-422).

Hvordan setter jeg opp og kommunisere med en slik sammenheng? Hvordan kan jeg finne ut hva som konfigurasjonsinnstillinger (f.eks baud rate) bør være, og hvordan setter jeg dem?

Spesielt er jeg ute etter å gjøre dette i Java, C / C ++, eller en av de store Unix-skall, men jeg har også en viss interesse i serie programmering ved hjelp av Windows / Hyperterminal.

Publisert på 06/08/2008 klokken 03:19
kilden bruker
På andre språk...                            


11 svar

stemmer
27

Bygge en tidsmaskin og gå tilbake til 1987? Ho ho.

Ok, ikke mer sarkastiske kommentarer.

Hvordan kan jeg finne ut hva som konfigurasjonsinnstillinger (f.eks baud rate) skal være ...

Les dataarket? Ok, ok. Seriøst, siste. Hvis du ikke vet overføringshastigheten til enheten du prøver å kommunisere med, har du to valg. Begynn å gjette, eventuelt ryker ut en o-omfang. Hvis du trenger et godt utgangspunkt, la meg foreslå 9600-8-N-1. Min mistanke er at du kan komme dit med brute force relativt raskt. Det finnes en tredje mulighet for å ha en old-school ninja som kan fortelle bare ved utseendet på uforståelige tegn på noen standard overføringshastighet hva faktiske overføringshastigheten er. En imponerende fest triks for å være sikker.

Forhåpentligvis om du har tilgang til denne informasjonen. I unix / linux, kan du få tak i minicom å spille med seriell port direkte. Dette bør gjøre det ganske raskt å hente konfigurasjons funnet ut.

en av de store Unix skall

I Unix den serielle port (er) er / er fil-kartlagt inn i / dev / underkatalogen. ttyS0, f.eks. Hvis du setter opp riktig overføringshastighet og whatnot bruke minicom, kan du selv katten ting til denne filen til å sende ting der ute.

Videre til kjøtt av spørsmålet, kan du få tilgang til det programmatisk gjennom POSIX overskrifter. termios.h er den store.

Se: http://www.easysw.com/~mike/serial/serial.html#3_1 (ikke lenger tilgjengelig)

men jeg har også en viss interesse i serie programmering ved hjelp av Windows / Hyperterminal.

Hyperterminal og minicom er i utgangspunktet det samme programmet. Som for hvordan Windows lar deg få tilgang til seriell port, vil jeg la det spørsmålet for noen andre. Jeg har ikke gjort det i Windows siden Win95 dager.

Svarte 06/08/2008 kl. 03:27
kilden bruker

stemmer
10

Hvis du ønsker å kode i Java jeg virkelig anbefale SerialIOs Serial . Det er veldig enkelt å bruke og sparer deg for dager med arbeid. Jeg har aldri funnet en åpen kildekode bibliotek så godt som SerialIO, virkelig!

Mitt råd: ikke bruk Sun serie IO ramme! Det er fra 1998 og full av feil. Du kan bruke rxtx men serialio er bedre!

Svarte 23/08/2008 kl. 08:15
kilden bruker

stemmer
8

For C / C ++ på Windows du har (minst) to valg:

  1. Bruk Serial klassen levert av .NET.
  2. Bruk Win32 API. Det er en omfattende MSDN-artikkelen som kan dateres tilbake til 1995, og mange gratis biblioteker og eksempler på nettet for å komme i gang.

.NET alternativet vil være mye enklere.

Svarte 13/08/2008 kl. 12:44
kilden bruker

stemmer
4

Hvis det er behov for å være kryss platfrom, ville jeg foreslå å se på Boost Asio .

Svarte 03/09/2008 kl. 12:12
kilden bruker

stemmer
3

En stund tilbake skrev jeg en anstendig størrelse søknad til rute tilkoblinger fra en gård på modemer gjennom til en TCP / IP-nettverksadresse.

I utgangspunktet var jeg så for en uhemmet (gratis) Serie IO biblioteket. Jeg prøvde Sun, IBM og RxTx. De var bra for utviklingen av applikasjonen, og i innledende testing, men i produksjon de alle viste seg å være ustabil.

Endelig har jeg betalt for SerialIO er Serial. Konvertering over var bokstavelig talt en øvelse i skiftende import, og biblioteket har vært helt bunnsolid - jeg kan ikke anbefale det nok. Min søknad har kjørt i feltet 24/7 for et par år nå, med ikke et eneste problem oppstått av flere kunder.

Hvis du starter utvikling ved hjelp av Serial, de har en bedre API og jeg ville bruke det.

Hvis du trenger cross platform støtte, Java med Serial var det beste valget jeg kunne finne.

Til slutt, er deres lisensiering ganske utrolig rimelig, så lenge du ikke er forhåndsinstallering av programvare på utstyr for kunden (e).

Svarte 15/09/2008 kl. 19:16
kilden bruker

stemmer
3

På jobb bruker vi teraterm og realterm for å sjekke serie data er riktig formatert. Også vi har en hardware splitter med en bryter, slik at vi kan overvåke trafikken til vår søknad via en kabel tilbake til en annen port.

Windows gir deg tilgang til seriell port via Create. Som gir deg et håndtak, og derfra kan du konfigurere tilgang.

Svarte 06/08/2008 kl. 05:04
kilden bruker

stemmer
3

Fra den andre siden, hvis du ønsker å gjøre det ved hjelp av C #, som vil kjøre på både Windows og Linux - med noen begrensninger (EDIT:. Som kan være utdatert jeg har ingen måte å teste den.). Bare lage en Serial objekt, setter sin baudrate, port og andre merkelige innstillinger, kaller åpen på det, og skrive ut dine byte [] s. Tross alt oppsett, fungerer Serial objektet svært lik alle nettverks strøm, så det burde være lett nok å finne ut.

Og som ibrandy tilstander, må du vite alle disse innstillingene, som baud rate, før du begynner forsøker å kommunisere til en seriell enhet.

Svarte 06/08/2008 kl. 03:35
kilden bruker

stemmer
2

Fra Java rxtx ( ikke lenger tilgjengelig ) Biblioteket er ganske bra. Den plukker opp der Sun serie IO rammeverk slapp.

Svarte 08/08/2008 kl. 20:24
kilden bruker

stemmer
1

Hvis du ikke er tvunget til å bruke en bestemt kompilatoren Jeg foreslår å bruke Qt og i den nye 5.3 versjonen vil du finne en klasse dedikert til serieporter:

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

Koden du vil skrive vil kjøre på alle supprited Qt plattformer, i alle fall de som har serieporter.

Svarte 06/09/2014 kl. 13:01
kilden bruker

stemmer
1

Avhengig av enheten du prøver å kommunisere med, kan det være flere parametere enn overføringshastigheten, antall databiter, type paritetskontroll og antall stoppbiter å vurdere. Hvis jeg husker riktig, modemer bruke ni linjer av RS-232C grensesnitt. Enkelte enheter som for eksempel kassaapparater, kan bruke maskinvare-handshake på RTS / CTS linjer eller på DTR / STR linjer.

Generelt er det godt å vite hvordan grensesnittet fungerer. Du kan ikke kommunisere om overføringshastigheten ikke stemmer overens, men feil innstilling av andre parametere kan slags arbeid. For eksempel kan du enkelt sende data til enheten forventer en stopp bit med 2 stoppbiter satt. Problemene starter når du prøver å motta data i et slikt tilfelle. Du kan også bruke riktig satt paritetsbit som en stoppbiter etc.

Svarte 23/09/2008 kl. 01:21
kilden bruker

stemmer
0

Jeg har brukt purejavacomm: Det er en implementering av javax.comm skrevet i ren java + JNA

I motsetning rxtx, trenger du ikke å installere en dll. Det er skrevet i ren Java + JNA, som løste problemet med portabilitet mellom Windows og Linux for meg. Det skal være enkelt å port til andre OS-es at JNA støtter, slik som Solaris og FreeBSD, men jeg har ikke prøvd det.

Du kan forvente en ren java bibliotek for å henge bak en innfødt implementering som rxtx i ytelse, men med moderne CPU, er svært sannsynlig å være bitrate på serieporten, ikke CPU-sykluser flaskehalsen. Dessuten er det mye enklere å feilsøke enn en blandet Java / Native bibliotek eller ren utarbeidet egen kode.

Svarte 18/03/2013 kl. 10:59
kilden bruker

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