Jak mohu nastavit a komunikovat s sériovým portem?

hlasů
41

Musím odesílat a přijímat data přes sériové připojení (RS-232 a RS-422).

Jak mohu nastavit a komunikovat s takovým připojením? Jak mohu zjistit, jaké by mělo být nastavení konfigurace (například přenosová rychlost) a jak mám nastavit jim?

Zejména Dívám se, jak to udělat v Javě, C / C ++, nebo jeden z hlavních Unix skořápky, ale také mám nějaký zájem v sériové programování pomocí programu Windows / Hyperterminal.

Položena 06/08/2008 v 04:19
zdroj uživatelem
V jiných jazycích...                            


11 odpovědí

hlasů
28

Postavit stroj času a vrátit se do roku 1987? Ho Ho.

Ok, ne více Nákrková komentáře.

Jak mohu zjistit, jaké nastavení konfigurace (například přenosová rychlost), by měly být ...

Přečtěte si datasheet? Dobře dobře. Vážně, poslední z nich. Pokud si nevíte, přenosovou rychlost zařízení, které se snaží komunikovat s, máte dvě možnosti. Spustit hádat, případně uniknout o-rozsah. Pokud budete potřebovat dobrý výchozí bod, dovolte mi navrhnout 9600-8-N-1. Mám podezření, můžete se tam dostat s hrubou silou poměrně rychle. Existuje ještě třetí možnost, která má staré školy ninji, kteří mohou říct jen tím, že vzhled poškozenými znaky v určitém standardní přenosovou rychlost co skutečná přenosová rychlost je. Impozantní strana trik pro jistotu.

Doufejme, že i když máte přístup k těmto informacím. V Unix / Linux, můžete sehnat Minicomu hrát s sériového portu přímo. To by mělo být poměrně rychle získat konfiguraci vymyslel.

Jedním z hlavních Unix skořápky

V Unixu sériový port (y) je / jsou souboru mapovány do / dev / podadresáři. ttyS0, například. Máte-li nastavit správnou přenosovou rychlost a kdoví co ještě pomocí minicom, můžete dokonce kočka věci do tohoto souboru posílat věci tam venku.

Na maso na otázku, můžete k nim přistupovat programově prostřednictvím záhlaví POSIX. termios.h je velký.

Viz: http://www.easysw.com/~mike/serial/serial.html#3_1 (není k dispozici)

ale také mám nějaký zájem v sériové programování pomocí programu Windows / Hyperterminal.

Hyperterminal a minicom jsou v podstatě stejný program. Pokud jde o tom, jak systém Windows vám umožní získat přístup k sériovému portu, nechám na tuto otázku pro někoho jiného. Neudělal jsem, že v systému Windows od dob Win95.

Odpovězeno 06/08/2008 v 04:27
zdroj uživatelem

hlasů
10

Chcete-li kód v jazyce Java opravdu doporučuji SerialIOs SerialPort . Je velmi snadné použití a ušetří dny práce. Nikdy jsem našel open source knihovnu stejně dobře jako SerialIO, opravdu!

Moje rada: nepoužívejte sériový IO rámec Sun! Je z roku 1998 a plný chyb. Můžete použít RxTx ale serialio je lepší!

Odpovězeno 23/08/2008 v 09:15
zdroj uživatelem

hlasů
8

Pro C / C ++ na Windows máte (přinejmenším) dvě možnosti:

  1. Použijte třídu SerialPort poskytované .NET.
  2. Použít Win32 API. Tam je rozsáhlý článek MSDN se datuje do roku 1995, a mnoho volné knihovny a příklady na webu, které vám pomohou začít.

Možnost .NET bude mnohem jednodušší.

Odpovězeno 13/08/2008 v 13:44
zdroj uživatelem

hlasů
4

Je-li třeba křížové platforma formátu, bych doporučil při pohledu na upřednostnění Asio .

Odpovězeno 03/09/2008 v 13:12
zdroj uživatelem

hlasů
3

Chvíli zpátky jsem napsal slušné velikosti žádost spojů na trase z farmy modemů až na adresu TCP / IP sítě.

Zpočátku jsem se podíval za neomezené (zdarma) Serial knihovny IO. Snažil jsem se Sun, IBM a RxTx. Byly pokuty za vývoji aplikace, a v počátečním testování, ale ve výrobě každý z nich se ukázalo nestabilní.

Nakonec jsem zaplatil za SerialIO je SerialPort. Převádění přes doslova cvičení v měnícím se dovozu, a knihovna byla naprosto pevný jako skála - nemohu ho doporučit dost. Moje aplikace byla spuštěna v oblasti 24/7 za pár let, přičemž ani jeden problém, s nimiž se setkávají více zákazníků.

Pokud začnete používat vývoj SerialPort, mají lepší API a já bych ji používat.

Pokud potřebujete podporu více platforem, Java s SerialPort byla tou nejlepší volbou jsem nenašel.

A konečně, jejich licence je zatraceně rozumné, pokud si nejste předinstalaci softwaru na zařízení pro zákazníka (y).

Odpovězeno 15/09/2008 v 20:16
zdroj uživatelem

hlasů
3

Při práci používáme Teraterm a realterm pro kontrolu sériová data ve správném formátu. Také máme hardwarovou rozdělovač s přepínačem, takže můžeme sledovat provoz na naší aplikaci kabelem zpět k jinému portu.

Windows umožňuje přístup k sériovému portu přes CreateFile. Který vám dává rukojeť a odtud můžete konfigurovat přístup.

Odpovězeno 06/08/2008 v 06:04
zdroj uživatelem

hlasů
3

Z druhé strany, pokud chcete, aby to za použití C #, který bude probíhat v obou systémech Windows a Linux - s určitými omezeními (Edit:., Které mohou být zastaralé nemám způsob, jak otestovat.). Stačí vytvořit SerialPort objekt, nastavte jeho přenosové rychlosti, přístavní a jiné drobné nastavení volání open na něm, a psát si své byte [] s. Po všech nastavení, objekt SerialPort chová velmi podobně jako kterékoli síťové proudu, takže by mělo být snadné zjistit.

A jak ibrandy států, je třeba znát všechny tyto nastavení, jako je přenosová rychlost, ještě před zahájením pokusu o komunikaci k libovolnému sériovému zařízení.

Odpovězeno 06/08/2008 v 04:35
zdroj uživatelem

hlasů
2

Od Java RxTx ( již není k dispozici ), knihovna je docela dobrá. To navazuje na seriál IO rámec Sun skončili.

Odpovězeno 08/08/2008 v 21:24
zdroj uživatelem

hlasů
1

Pokud nejste nuceni používat konkrétní kompilátor navrhuji použít Qt a v nové verzi 5.3 najdete třídu věnovanou sériové porty:

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

Tento kód budete psát poběží na všech platformách supprited Qt, alespoň ty, které mají sériové porty.

Odpovězeno 06/09/2014 v 14:01
zdroj uživatelem

hlasů
1

V závislosti na zařízení, které se snaží komunikovat s, může existovat více parametrů než přenosovou rychlost, počet datových bitů, typ kontroly parity a počet stop bitů, aby zvážila. Pokud si dobře vzpomínám správně, modemy používat devět linky RS-232C. Některá zařízení jako je například pokladen, může použít hardwarové řízení toku na RTS / CTS linek nebo DTR / STR linek.

Obecně lze říci, že je to dobré vědět, jak rozhraní funguje. Nelze komunikovat v případě, že přenosová rychlost neshoduje, ale špatné nastavení dalších parametrů by mohlo druh práce. Například můžete snadno posílat data do zařízení očekává 1 stop bit 2 stop bitů set. Problémy spustit při pokusu o příjem dat v takovém případě. Můžete také použít vhodně nastavit paritní bit jako jeden z stopbitů atd

Odpovězeno 23/09/2008 v 02:21
zdroj uživatelem

hlasů
0

Byl jsem pomocí purejavacomm: Jedná se o implementaci javax.comm napsán v čistém jazyce Java + JNA

Na rozdíl od RxTx, nemusíte instalovat dll. Je napsán v čisté Java + JNA, který vyřešil problém přenositelnosti mezi Windows a Linux pro mě. Mělo by být snadno portovat na jiné OS-es, že JNA podporuje, jako je Solaris a FreeBSD, ale já jsem to zkusil.

Dalo by se očekávat, že čistý Java knihovna zaostávat nativní implementace, jako RxTx výkonu, ale s moderní CPU, překážkou je velmi pravděpodobné, že je přenosová rychlost sériového portu, ne CPU cyklů. Také je mnohem jednodušší, než ladit smíšené Java Native / knihovny nebo čistý zkompilovaný nativního kódu.

Odpovězeno 18/03/2013 v 11:59
zdroj uživatelem

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