Vă mulțumim pentru susținere

Cum pot configura și comunica cu un port serial?

Trebuie să trimit și să primesc date prin conexiuni seriale (RS-232 și RS-422).

Cum configurez și comunic cu o astfel de conexiune? Cum îmi dau seama ce setări de configurare (de exemplu rata baud) ar trebui să fie și cum le configurez?

În special, căut să fac acest lucru în Java, C / C ++ sau unul dintre cele mai importante shell-uri Unix, dar de asemenea am un interes în programarea serială utilizând Windows / Hyperterminal.

0
adăugat

11 răspunsuri

Construiți o mașină de timp și reveniți în 1987? Ho ho.

Bine, nu mai am observații.

Cum îmi dau seama ce setări de configurare (de exemplu rata baud) ar trebui să fie ...

Citiți fișa tehnică? Bine bine. Serios, ultima. Dacă nu cunoașteți rata baud a dispozitivului cu care încercați să comunicați, aveți două opțiuni. Începeți să ghiciți sau, eventual, să bustați o zonă de acțiune. Dacă aveți nevoie de un punct de pornire bun, permiteți-mi să sugerez 9600-8-N-1. Suspiciunea mea este că puteți ajunge acolo cu forța brută relativ repede. Există oa treia opțiune de a avea un ninja de școală veche, care poate spune doar prin LOOK de caractere deformate la o rată standard de baud ce rată reală baud este. Un truc impresionant de petrecere pentru a fi sigur.

Sperăm că aveți acces la aceste informații. În unix / linux, puteți obține o mină de joc pentru a juca direct cu portul serial. Acest lucru ar trebui să facă destul de repede pentru a obține configurație dat seama.

una dintre cele mai importante shell-uri Unix

În Unix, porturile seriale sunt / sunt mapate în fișierul / dev / subdir. ttyS0, de exemplu. Dacă configurați rata corectă a baudului și ce nu folosiți minicom, puteți chiar pisica chestii la acel fișier pentru a trimite lucruri acolo.

La carnea întrebării, o puteți accesa programabil prin anteturile POSIX. termios.h este cea mare.

See: http://www.easysw.com/~mike/serial/serial.html#3_1 (NOT AVAILABLE ANYMORE)

dar am și un interes în programarea serială folosind Windows / Hyperterminal.

Hiperterminalul și minicomul sunt, în principiu, același program. În ceea ce privește modul în care Windows vă permite accesul la portul serial, voi lăsa această întrebare pentru altcineva. Nu am făcut asta în Windows de la zilele Win95.

0
adăugat

La lucru folosim teraterm și realterm pentru verificarea formatării corecte a datelor seriale. De asemenea, avem un splitter hardware cu un comutator, astfel încât să putem monitoriza traficul către aplicația noastră printr-un cablu înapoi la alt port.

Windows vă permite să accesați portul serial prin intermediul CreateFile. Asta vă oferă un mâner și de acolo puteți configura accesul.

0
adăugat

Între timp am scris o aplicație de dimensiuni decente pentru a ruta conexiunile de la o fermă de modemuri până la o adresă de rețea TCP / IP.

Inițial, am căutat o bibliotecă Serial IO fără restricții (gratuită). Am încercat soarele, IBM și RxTx. Ei au fost bine pentru dezvoltarea aplicației, și în testarea inițială, dar în producție s-au dovedit a fi instabile.

În cele din urmă am plătit pentru serial SerialPort SerialPort. Conversia a fost literalmente un exercițiu în schimbarea importurilor, iar biblioteca a fost absolut solidă - nu-i pot recomanda suficient. Cererea mea a fost rulată în teren 24 de ore din 24, de câteva ani, fără o singură problemă întâlnită de mai mulți clienți.

Dacă începeți dezvoltarea folosind SerialPort, acestea au un API mai bun și l-aș folosi.

Dacă aveți nevoie de suport pentru platforme multiple, Java cu SerialPort a fost cea mai bună alegere pe care am putut să o găsesc.

În cele din urmă, licențierea lor este destul de darn rezonabilă, atâta timp cât nu preinstalați software-ul pe echipamentul clientului (lor).

0
adăugat
@Gili: A fost acum câțiva ani, pentru RxTx - nu m-am întors la ea după ce am cumpărat SerialPort, deoarece nu am avut probleme cu SerialPort și nu există redevențe, deci nici o motivație să investească timp în RxTx.
adăugat autor Lawrence Dol
@Gili: SerialPort este în uz curent de producție de către clienții noștri.
adăugat autor Lawrence Dol
IIRC, baud max a fost efectiv limitat numai de H / W - am scris config mea pentru a permite până la 1.3Mb, dar am fost ținta modem-uri pe RS-232, astfel 115K a fost maximul pe care am nevoie, și probabil max va fi vreodată.
adăugat autor Lawrence Dol
Care este baudrate-ul lor maxim pentru comunicarea cu convertoarele USB? M-am uitat pe site-ul lor, spune 230400, dar s-ar putea să am ceva greșit. (230Kbaud nu este suficient pentru cererea mea)
adăugat autor Jason S
Când ați folosit ultima dată RxTx și SerialPort? Sunt curios dacă RxTx sa îmbunătățit.
adăugat autor Gili

De cealaltă parte, dacă vrei să o faci folosind C #, care se va executa atât pe Windows cât și pe Linux - cu unele limitări (EDIT: care poate fi depășită, nu am cum să o testez). Doar creați un obiect SerialPort , setați-l baudrate, port și alte setări impare, apelați pe el și scrieți octetul dvs. []. După toate setările, obiectul SerialPort acționează foarte asemănător cu orice flux în rețea, așa că ar trebui să fie suficient de ușor să dai seama.

Și, așa cum afirmă ibrandy, trebuie să cunoașteți toate aceste setări, ca rata baud, înainte de a începe chiar să încercați să comunicați cu orice dispozitiv serial.

0
adăugat

Din Java rxtx ( NU ESTE DISPONIBIL ANYMORE ) biblioteca este destul de bună. Se preia unde ramane seria IO a seriei Sun.

0
adăugat
Legătura de mai sus este moartă. Vedeți RXTX Wiki .
adăugat autor George

Pentru C / C ++ pe Windows aveți cel puțin două opțiuni:

  1. Utilizați clasa SerialPort furnizată de .NET.
  2. Utilizați API-ul Win32. Există un articol vast al MSDN datând din 1995 și multe biblioteci libere și exemple de pe web pentru a vă începe.

Opțiunea .NET va fi mult mai ușoară.

0
adăugat

Dacă trebuie să fie transversal platfrom, aș sugera să mă uit la Boost Asio .

0
adăugat

În funcție de dispozitivul cu care încercați să comunicați, pot exista mai mulți parametri decât rata baud, numărul de biți de date, tipul de verificare a parității și numărul de biți stop care trebuie luați în considerare. Dacă îmi amintesc corect, modemurile folosesc nouă linii de interfață RS-232C. Unele dispozitive, cum ar fi, de exemplu, casele de marcat, pot utiliza strângerea de mână de hardware pe linii RTS / CTS sau pe linii DTR / STR.

În general, este bine să știți cum funcționează interfața. Nu puteți comunica dacă rata baud nu se potrivește, dar setarea greșită a altor parametri ar putea fi un fel de lucru. De exemplu, puteți trimite cu ușurință date către dispozitiv așteptând un bit de oprire, cu 2 seturi de biți stop. Problemele încep când încercați să primiți date în acest caz. De asemenea, puteți utiliza un bit de paritate setat corespunzător ca fiind unul dintre biții de stop, etc.

0
adăugat

I have been using purejavacomm: It is an implementation of javax.comm written in pure java + JNA

Spre deosebire de rxtx, nu este nevoie să instalați un DLL. Este scris în Java + JNA pur, care a rezolvat problema portabilității între Windows și Linux pentru mine. Ar trebui să fie ușor să port la alte sisteme de operare pe care JNA le suportă, cum ar fi Solaris și FreeBSD, dar nu am încercat.

S-ar putea să vă așteptați la o bibliotecă pură de java care să rămână în urma unei implementări native, cum ar fi rxtx în performanță, dar cu procesoare moderne, ghinionul este foarte probabil să fie bitrate-ul portului serial, nu ciclurile procesorului. De asemenea, este mult mai ușor să depanați decât o bibliotecă mixtă Java / nativă sau un cod nativ compilat.

0
adăugat

Dacă doriți să codificați în Java, recomand cu adevărat SerialOri SerialPort . Este foarte ușor de utilizat și vă economisește zile de lucru. Nu am găsit niciodată o bibliotecă open source la fel de bună ca SerialIO, REAL!

Sfatul meu: nu utilizați seria IO a seriei Sun! Este din 1998 și plin de bug-uri. Puteți folosi rxtx , dar serialio este mai bun!

0
adăugat

Dacă nu sunteți obligat să utilizați un anumit compilator, vă recomand să folosiți Qt și în noua versiune 5.3 veți găsi o clasă dedicată porturilor seriale:

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

Codul pe care îl veți scrie va fi rulat pe toate platformele Qt suprapuse, cel puțin cele care au porturi seriale.

0
adăugat