Vra

Ek moet data oor serial verbindings stuur en ontvang (RS-232 en RS-422).

Hoe stel ek en kommunikeer met so 'n verband? Hoe kan ek uitvind wat die konfigurasie-instellings (bv baud koers) moet wees en hoe stel ek dit?

In die besonder Ek is op soek om dit te doen in Java, C / C ++, of een van die grootste Unix doppe, maar ek het ook 'n paar belang in serie programmering met behulp van Windows / Hyper.

Was dit nuttig?

Oplossing

Bou 'n tyd masjien en gaan terug na 1987? Ho ho.

Ok, nie meer snarky kommentaar.

  

Hoe kan ek uitvind wat die konfigurasie-instellings (bv baud koers) moet wees ...

Lees die datablad? Ok, ok. Ernstig, laaste. As jy nie die baud koers van die toestel wat jy probeer om te kommunikeer met weet, jy het twee keuses. Begin aan die raai, of dalk breek uit 'n o-omvang. As jy 'n goeie beginpunt nodig het, laat my stel 9600-8-N-1. My vermoede is dat jy kan daar relatief vinnig met brute krag. Daar is 'n derde opsie van 'n ou-skool ninja wat kan vertel net deur die voorkoms van die deurmekaar karakters op 'n sekere standaard baud koers wat werklike baud koers is. 'N indrukwekkende partytjie truuk om seker te wees.

Hopelik al het jy toegang tot hierdie inligting te hê. In unix / linux, kan jy Ahold van minicom direk met die reeksnommer poort speel. Dit moet dit redelik vinnig die opset uitgepluis te kry maak.

  

een van die grootste Unix doppe

In Unix die seriepoort (s) is / is-lêer gekarteer in die / dev / subdir. ttyS0, byvoorbeeld. As jy die opstel van die korrekte baud koers en noem maar op met behulp van minicom, jy kan selfs kat goed om die lêer af te dinge daar buite te stuur.

Op die vleis van die vraag, kan jy dit programmaties toegang deur die POSIX kop. termios.h is die groot een.

Sien: http://www.easysw.com/ ~ Mike / serial / serial.html # 3_1 (nie beskikbaar nie)

  

maar ek het ook 'n paar belang in serie programmering met behulp van Windows / Hyper.

Hyper en minicom is basies dieselfde program. Soos vir hoe Windows laat jy toegang tot die seriepoort, sal ek daardie vraag vir iemand anders te verlaat. Ek het nie gedoen wat in Windows sedert die Win95 dae.

Ander wenke

As jy wil die kode in Java ek regtig aanbeveel SerialIOs SerialPort . Dit is baie maklik om te gebruik en spaar jou dae van werk. Ek het nog nooit gevind dat 'n open source biblioteek so goed soos SerialIO, regtig!

My raad: moenie reeks IO raamwerk Sun se! Dit is van 1998 en vol foute. Jy kan gebruik rxtx maar serialio is beter!

Vir C / C ++ op Windows wat jy het (ten minste) twee keuses:

  1. Gebruik die SerialPort klas verskaf deur NET.
  2. Gebruik die Win32 API. Daar is 'n uitgebreide MSDN artikel dateer terug na 1995, en baie gratis biblioteke en voorbeelde op die web te kry wat jy begin.

Die NET opsie sal baie makliker wees.

As dit moet kruis platfrom wees, sou ek raai kyk na Boost Asio .

By die werk wat ons gebruik term, teraterm realterm vir die beheer van seriële data is korrek geformateer. Ook het ons 'n hardeware splitter met 'n skakelaar sodat ons kan verkeer na ons aansoek monitor via 'n kabel terug na 'n ander hawe.

Windows kan jy toegang tot die reeksnommer poort via CreateFile. Wat gee jou 'n handvatsel en van daar kan jy toegang instel.

Awhile terug wat ek geskryf het 'n ordentlike grootte aansoek om die roete verbindings van 'n plaas van modems deur 'n TCP / IP-netwerk adres.

Aanvanklik het ek gesoek na 'n onbeswaarde (gratis) Serial IO biblioteek. Ek het probeer Sun se IBM se en RxTx. Hulle was goed vir die ontwikkeling van die aansoek, en in die eerste toets, maar in produksie hulle elke bewys onstabiel.

Ten slotte Ek betaal vir SerialPort SerialIO se. Omskakeling oor is letterlik 'n oefening in die verandering van invoere, en die biblioteek is absoluut rock solid - Ek kan dit nie genoeg aanbeveel. My aansoek is reeds in die veld 24/7 vir 'n paar jaar nou, met nie 'n enkele fout in deur verskeie kliënte.

As jy die ontwikkeling begin gebruik SerialPort, hulle het 'n beter API en ek sal dit gebruik.

As jy kruis platform ondersteuning nodig het, Java met SerialPort was die beste keuse wat ek kon kry.

Ten slotte, hul lisensie is pretty darn redelik solank as wat jy nie preinstalling sagteware op die toerusting vir jou kliënt (s).

Van die ander kant, as jy wil om dit te doen met behulp van C #, wat sal loop op beide Windows en Linux - met 'n paar beperkings (EDIT:.. wat ek kan wees verouderd het geen manier om dit te toets). skep net 'n SerialPort voorwerp, stel sy baudrate, hawe en enige ander vreemde instellings, bel oop op dit, en skryf jou byte [] s. Na al die opstel, die SerialPort voorwerp optree baie soortgelyk aan enige netwerk stroom, so dit moet maklik genoeg om uit te vind nie.

En as ibrandy state, moet jy al hierdie instellings weet, soos baud rate, voordat jy selfs begin probeer om te kommunikeer met enige reeks toestel.

Na gelang van die toestel wat jy probeer om te kommunikeer met, is daar dalk meer parameters as die baud rate, aantal data stukkies, tipe gelykheid nagaan en aantal stop stukkies om te oorweeg. As ek reg onthou, modems gebruik nege lyne van die RS-232C koppelvlak. Sommige toestelle soos byvoorbeeld kasregisters, kan hardeware handshaking gebruik op RTS / CTS lyne of op DTR / STR lyne.

In die algemeen is dit goed om te weet hoe die koppelvlak werk. Jy kan nie kommunikeer as die baud koers kom nie ooreen met, maar verkeerde setting van ander parameters kan soort van werk. Byvoorbeeld Jy kan maklik data te stuur na die toestel verwag 1 stop bietjie met 2 stop stukkies stel. Probleme begin wanneer jy probeer om data te ontvang in so 'n geval. Jy kan ook gebruik toepaslik stel pariteitsbis as een van stop stukkies, ens.

As jy nie gedwing word om 'n bepaalde samesteller Ek stel voor om Qt gebruik gebruik en in die nuwe 5.3-weergawe wat jy sal 'n klas opgedra aan seriepoorte te vind:

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

Die kode wat jy sal skryf sal loop op al supprited Qt platforms, ten minste diegene wat seriepoorte het.

Ek het al met behulp van purejavacomm: Dit is 'n implementering van javax.comm geskryf in suiwer java + JNA

In teenstelling met rxtx, jy hoef nie 'n dll installeer. Dit is geskryf in suiwer Java + JNA, wat die probleem van port tussen Windows en Linux opgelos vir my. Dit moet maklik wees om die hawe na ander OS-es dat JNA ondersteun, soos Solaris en FreeBSD wees, maar ek het nie probeer nie.

Jy kan verwag dat 'n suiwer Java biblioteek om agter 'n boorling implementering soos rxtx in prestasie, maar met 'n moderne SVE's, die bottelnek is baie geneig om die bitrate van jou reeksnommer poort, nie CPU siklusse wees. Ook, dit is baie makliker om te ontfout as 'n gemengde Java / Native biblioteek of suiwer saamgestel inheemse kode.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top