Internet Windows Android

Programarea nivelului semnalului portului com al plăcii de bază. Pinout portul COM (RS232)

Un port COM, sau port serial, este o interfață serială bidirecțională care este concepută pentru a schimba date de octeți. La început, acest port a fost folosit pentru a conecta terminalul, iar apoi pentru modem și mouse. Acum este obișnuit să-l folosești pentru a conecta sursa, precum și pentru a comunica cu procesarea sistemelor de calcul încorporate.

Utilizare

Așadar, înainte de a vorbi mai în detaliu despre ce este un port COM, trebuie să ne uităm în trecut pentru a înțelege semnificația acestuia. Cu 15 ani în urmă, a fost folosită o metodă de conectare a dispozitivelor la un computer folosind un conector standard special situat pe panoul din spate al unității de sistem folosind un cablu serial special RS-232. Această metodă are multe dezavantaje. Un astfel de cablu, conform standardelor moderne, oferă o rată de transfer de date extrem de scăzută - aproximativ o sută de kilobiți pe secundă. Pe lângă momentul în care s-a făcut conexiunea fizică a conectorilor, a fost necesar să se oprească echipamentul și ei înșiși au fost atașați unul de celălalt cu șuruburi care asigurau fiabilitatea, în timp ce dimensiunile lor diferă în dimensiuni considerabile.

Un pic de istorie

Portul COM de pe computerele din acea vreme era în mod tradițional numerotat cu 1 sau 2, deoarece de obicei nu erau mai mult de două. Pot fi instalate porturi suplimentare dacă este necesar. Când utilizatorul configura software-ul, a fost necesar să nu se confunde și să îl instaleze corect exact pe cel la care era conectat echipamentul necesar. Fiecare port COM necesita setările corecte de viteză, precum și o serie de alți parametri misterioși care erau cunoscuți doar de un cerc restrâns de specialiști. Pentru ca conectarea echipamentului să aibă succes, toți parametrii necesari trebuiau aflați de undeva sau selectați experimental, deoarece în acest caz nu exista o configurație automată. În plus, conexiunea prin portul COM a permis conectarea oricărui software cu echipamente externe arbitrare, chiar și complet incompatibile, ceea ce a provocat un număr mare de erori în timpul procesului de setări.

Modernitatea

Acum conexiunea prin portul COM a fost complet înlocuită de o metodă mai modernă care nu necesită cunoștințe speciale pentru implementare, și anume prin portul USB. Această metodă este lipsită de toate dezavantajele menționate mai devreme. Cu toate acestea, standardele moderne pentru compatibilitatea conectării tuturor tipurilor de echipamente GPS și software foarte eterogene s-au format cu destul de mult timp în urmă în jurul conceptului de porturi COM, care au devenit arhaice în acest moment.

Acest lucru se datorează faptului că inițial aproape orice echipament, inclusiv GPS, era extern, iar conectarea acestuia la computer se făcea printr-un cablu serial conectat la unul dintre porturile hardware. În timpul procesului de configurare, utilizatorului i sa cerut să selecteze corect numărul portului și viteza de transmitere a datelor prin acesta. În acel moment, a apărut standardul principal pentru transmiterea datelor de la un receptor GPS la un program, care acum se numește NMEA-0183. De fapt, acest standard cere tuturor dezvoltatorilor chiar și a celor mai moderne hardware și software să facă schimb de date prin porturile COM. Și toate acestea în condițiile în care pe computerele moderne, precum și pe PDA-uri, standardul USB a fost mult timp principalul. Și încă o caracteristică este că recent receptoarele GPS au fost instalate din ce în ce mai mult direct în carcasa dispozitivului, adică nu există niciun cablu de conectare între acesta și dispozitivul principal.

Porturi COM virtuale

A fost inventată o cale de ieșire, și anume, au fost dezvoltate porturi COM „virtuale”. Se pare că dispozitivul intern al PDA-ului, de exemplu, un receptor GPS, este simulat în software sub forma unui port COM, deși nu este așa din punct de vedere hardware. În același timp, un program care este conceput pentru a interfața printr-un astfel de standard nu are nicio diferență în modul în care este implementat. Aici este permisă prezența unei simulări virtuale, și nu prezența obligatorie a unei implementări hardware. Deci este posibil să se asigure compatibilitatea programelor GPS de stil vechi cu echipamente moderne.

Modificări efectuate

În același timp, managementul portului COM nu s-a schimbat semnificativ. Utilizatorul, în vechea manieră, trebuie să facă setări complexe aproape manual. Cu toate acestea, un port COM modern nu mai este acel dispozitiv voluminos situat pe panoul din spate al unității de sistem, ci un dispozitiv complet diferit. Și aici ideea este că, din punct de vedere software, toate implementările lor arată fără chip, adică nu există nicio diferență între porturile virtuale și cele reale. Pentru software, porturile diferă doar prin numerele atribuite lor de către producătorii PDA în mod complet aleatoriu. De exemplu, receptorul ASUS este de obicei situat pe COM5, în timp ce PocketLOOX 560 arată receptorul pe COM8. Se pare că un program care dorește să primească date de la un receptor GPS nu are inițial nicio informație sigură despre numărul condiționat, sub care apare portul, care este prescris corespunzător pentru receptorul de pe acest PDA.

Cum funcționează totul?

Deși este posibil să căutați automat unul potrivit dintre toate porturile COM disponibile, procedura pentru un astfel de sondaj este destul de nesigură și destul de greoaie. Acest lucru se datorează faptului că dispozitivele afișate în sistem ca porturi COM pot fi destul de diverse și nu au nicio legătură cu GPS-ul, ele pot răspunde complet imprevizibil la un astfel de sondaj. De exemplu, pe un PDA există porturi asociate unui modem celular intern, cu USB, cu port infraroșu, precum și cu alte elemente. Accesarea acestora printr-un program conceput să funcționeze cu un anumit dispozitiv poate duce la o reacție complet imprevizibilă, precum și la diverse disfuncționalități, care deseori provoacă înghețarea PDA-ului. De aceea, o încercare de deschidere a unui port COM poate duce la situații neașteptate, până la pornirea Bluetooth sau și pot fi mai multe cazuri de neînțeles.

Operarea portului COM

Pentru porturile COM, un cip transceiver universal asincron este folosit ca bază. Acest microcircuit există în mai multe varietăți: Intel 16550A, 16550, 16450, 8250. Pentru fiecare port COM, conține registre de recepție și transmițător de date, precum și o serie de registre de control care pot fi accesate prin programele BIOS, Windows și MS DOS. Cele mai recente versiuni ale microcircuitului au un set de buffere pentru stocarea temporară a datelor transmise și primite. Datorită acestei posibilități, este posibil să se întrerupă mai rar activitatea procesorului central, precum și să se coordoneze viteza de transmitere a datelor.

Setări principale

Dispozitivul cu port COM are următoarele caracteristici:

Adresa de bază a portului pentru intrarea și ieșirea informațiilor;

Numere de întrerupere hardware;

Dimensiunea unui bloc de informații;

Viteza cu care sunt transmise datele;

Modul de detectare a onestității;

Metoda de management al fluxului de informații;

Numărul de biți de oprire.

Cum se verifică portul COM al computerului? La ce să fii atent?

După cum am menționat mai devreme, acest tip de port este o interfață bidirecțională pentru un mod serial la nivel de biți. O caracteristică distinctivă în comparație cu portul paralel aici este transferul de date bit cu bit. Anatomia unui port COM este de așa natură încât nu este singurul de pe un computer care utilizează o metodă de transfer de date în serie. De exemplu, interfețele precum Ethernet sau USB folosesc și ele un principiu similar, dar istoricul s-a întâmplat ca se obișnuiește să apeleze portul serial standard RS232.

Foarte des este necesar să deschideți un port COM pentru repararea și diagnosticarea unui computer, în timp ce acesta trebuie, de asemenea, verificat pentru funcționare. Este foarte ușor să ardeți un element. Cel mai adesea acest lucru se întâmplă din vina utilizatorului, care deconectează dispozitivul incorect, trăgând conectorul în timp ce interfața este conectată. Cel mai simplu mod de a verifica dacă interfața funcționează este să conectați un mouse la ea. Cu toate acestea, este atât de dificil să obțineți o imagine completă, deoarece manipulatorul folosește doar jumătate din liniile de semnal din cele opt disponibile. Doar utilizarea unui mufă special și a unui program va permite o verificare a performanței. În aceste scopuri, există deja un software special dezvoltat.

Computer + telefon mobil: interacțiune eficientă Goltsman Viktor Iosifovich

Porturi COM și USB

Porturi COM și USB

Porturile sunt dispozitive prin care un computer poate comunica cu echipamente externe. Strict vorbind, porturile în sine sunt microcircuite situate în interiorul computerului, iar conectorii conectați la acestea sunt afișați pe peretele din spate al unității de sistem (Fig. 1.3).

Orez. 1.3. Conectori porturi.

Mai întâi a venit portul serial (serial) al computerelor. În caz contrar, se numește COM-port sau RS-232. Un cablu format din mai multe fire, care se termină cu un conector cu 9 pini, este conectat la portul COM. Informațiile prin acest port sunt transmise sub forma unei secvențe de impulsuri electrice. Pe un fir (Tx) computerul transmite informații către un dispozitiv extern, iar pe celălalt (Rx) o primește.

Standardul RS-232 a rămas neschimbat de mai bine de un deceniu. Placa de bază a computerului are două porturi seriale - COM1 și COM2. Pe peretele din spate al oricărei unități de sistem există cel puțin un conector de port serial (COM1). Al doilea port (COM2) în computerele moderne, de obicei, nu este afișat pe peretele din spate, deși un bloc de conectare este creat pentru acesta pe placa de bază.

Se recomandă conectarea dispozitivelor la portul serial în timp ce computerul este oprit. În practică, această cerință este de obicei ignorată, ceea ce duce uneori la defecțiunea fie a dispozitivului conectat, fie a portului însuși.

Setările portului COM pot fi configurate după cum urmează.

1. Aleargă manager de dispozitiv. Pentru a face acest lucru, faceți clic pe butonul startși selectați Panou de control. Faceți dublu clic pe pictogramă Sistem. Pe fila Echipamente apasa butonul Manager de dispozitiv.

2. Faceți dublu clic pe element Porturi COM și LPT.

3. Selectați portul ale cărui setări doriți să le modificați și executați comanda Proprietăți. Se va deschide o fereastră (Fig. 1.4).

Orez. 1.4. Setări de port.

Pe fila Setări de port fereastră Proprietăți: Port serial (COM2) sunt disponibile mai multe opțiuni. Dintre aceștia, este posibil să avem nevoie de primul parametru Viteza (bps), care determină viteza cu care portul este capabil să transmită și să primească date. Valoarea implicită este 9600 bps. Se presupune că orice dispozitiv conectat la port este capabil să funcționeze la această viteză. Cu toate acestea, multe dispozitive moderne, inclusiv modemuri și cabluri de date pentru telefoane mobile, pot comunica cu un computer într-un ritm mult mai rapid. Prin urmare, dacă dispozitivul conectat funcționează stabil la o rată de transfer scăzută, puteți încerca să creșteți valoarea la 57.600 sau 115.200 bps - datele vor fi transferate mult mai rapid.

4. Selectați viteza dorită a portului din listă și faceți clic Bine.

Restul setărilor portului serial de obicei nu trebuie schimbate. Puteți readuce toate setările portului la valorile lor originale apăsând butonul Restabiliti setarile de baza.

Porturile USB bus (universal serial bus - universal serial bus) sunt necesare în orice computer modern (vezi Fig. 1.2). Acest standard pentru conectarea dispozitivelor externe a înlocuit treptat portul serial. Datele aici, precum și printr-un port COM, sunt transmise prin două fire. Al treilea fir alimentează dispozitivele conectate cu o tensiune de alimentare de +5 V.

Rata maximă de transfer de date prin portul USB este de aproape 1000 de ori mai mare decât prin portul serial. Adevărat, atunci când conectați un telefon, care este o mare „gândire lentă”, acest lucru nu este esențial. Mai important, standardul garantează posibilitatea „fierbinte”, în timp ce computerul rulează, conectarea dispozitivelor la porturile USB. În plus, porturile USB nu necesită configurare. ÎN Manager de dispozitiv afișează informații despre curentul consumat de fiecare dispozitiv conectat la porturile USB.

Există trei tipuri de conectori USB, care diferă doar prin formă și dimensiune (Fig. 1.5).

Un conector plat de tip A „obișnuit” este utilizat pentru a conecta cablul la un computer. Adaptoarele miniaturale sunt echipate cu același conector, care sunt introduse direct în portul USB de pe unitatea de sistem. Este deosebit de convenabil să conectați un astfel de adaptor atunci când porturile suplimentare sunt afișate pe panoul frontal al unității de sistem. Dacă nu există conectori USB pe panoul frontal și este dificil să ajungi în spatele computerului de fiecare dată, un cablu prelungitor cu conectori de tip A la ambele capete va ajuta.

Orez. 1.5. conectori USB.

Conectorul de tip B este folosit pentru conectarea cablului la dispozitive periferice: imprimante și modemuri.

Pentru a vă conecta la dispozitive portabile (telefoane, camere foto) utilizați un conector mini-USB sau mini-B.

Din cartea Computer + telefon mobil: interacțiune eficientă autor Goltsman Viktor Iosifovich

Porturi COM și USB Porturile sunt dispozitive prin care computerul poate comunica cu echipamente externe. Strict vorbind, porturile în sine sunt microcircuite situate în interiorul computerului, iar conectorii conectați la acestea sunt afișați pe peretele din spate al unității de sistem (Fig.

Din cartea Hardware PC [Tutorial popular] autor Ptashinsky Vladimir

Capitolul 10 Autobuze de expansiune: sloturi și porturi Autobuz-autobuz opa, autobuz-autobuz nai... Odiia populară a computerului În capitolele anterioare, ne-am uitat la diferitele componente interne și externe ale unui computer. Acum să vedem cum sunt toate aceste componente

Din cartea DIY Linux Server autor

1.7.6. Porturi și demoni Următoarea discuție se bazează pe faptul că știți deja ce este un server și ce servicii va trebui să configurați. În paragraful Cum funcționează cartea (p. 1.5), a fost descrisă în detaliu în ce capitole este descrisă configurația unui anumit serviciu. Aici

Din cartea Computer Tutorial autor Kolisnichenko Denis Nikolaevici

2.2.8. Porturi USB suplimentare USB (Universal Serial Bus) este o magistrală serial universală. Multe dispozitive sunt conectate la USB: unități USB, camere digitale, camere video digitale, imprimante, scanere, modemuri, chiar și tastaturi USB și mouse-uri USB.Este clar că cu o asemenea varietate

De la Asterisk™: The Future of Telephony Ediția a doua autor Meggelen Jim Wan

Cum să găsiți porturile FXO și FXS pe placa TDM400P 4.1 arată placa TDM400P cu module FXS și FXO. Fotografia este alb-negru, deci este imposibil să distingem culorile, dar numărul 1 este modulul FXS în verde, iar numărul 2 este modulul FXO, portocaliu-roșu. În colțul din dreapta jos al figurii, puteți vedea

Din cartea Secretele și secretele computerului autorul Orlov Anton A

Capitolul 10. Porturi. Proxy. Firewall Când majoritatea utilizatorilor de computere văd cuvântul port, de obicei îl asociază cu abrevieri precum COM, LPT, PS/2. Adică, pur și simplu numele „cuiburilor” unde puteți atașa orice periferic

Din cartea Programarea sistemului în mediul Windows autorul Hart Johnson M

Porturi de completare I/O Capitolul 14 descrie porturile de completare I/O, care oferă un alt mecanism pentru a evita condițiile de concurență între fire prin limitarea numărului de fire. Porturile de completare I/O permit mici

Din cartea Arhitectură TCP/IP, protocoale, implementare (inclusiv versiunea IP 6 și securitate IP) autorul Faith Sidney M

CAPITOLUL 14 I/O asincron și porturi de finalizare Operațiunile I/O sunt în mod inerent mai lente decât alte tipuri de procesare. Această încetinire este cauzată de următorii factori: Întârzieri din cauza timpului petrecut căutării

Din cartea Tehnologii de programare autorul Kamaev V A

Porturi de completare I/O Acceptate numai pe platformele NT, porturile de completare I/O combină I/O suprapuse și fluxuri independente și sunt utilizate cel mai frecvent în programele server. Pentru a afla ce cerințe

Din cartea The C Language - A Beginner's Guide autor Prata Stefan

Exemplu: Server care utilizează porturile de completare I/O Programul 14.4 este o modificare a programului serverNP (Programul 11.3) care utilizează porturi de completare I/O. Acest server creează un grup mic de fire de execuție de server și un pool mai mare

Din cartea Programare pentru Linux. Abordare profesională autorul Mitchell Mark

Din cartea Notebook [secretele utilizării eficiente] autor Ptashinsky Vladimir

10.2.5 Porturi de aplicație Clientul trebuie să identifice serviciul pe care dorește să îl acceseze. Acest lucru se realizează prin specificarea adresei IP a serviciului gazdă și a numărului său de port TCP. Ca și în cazul UDP, numerele de porturi TCP variază de la 0 la 65535. Porturile variază de la 0 la 1023

Din cartea autorului

6.4. SISTEME DIN PROGRAME CARE SCHIMB DATE PRIN PORTURI Un astfel de schimb este de obicei implementat în procesarea multiprocesor (multi-mașină). Portul fiecăruia dintre programe reprezintă programul pentru acumularea și verificarea atât a datelor de intrare cât și de ieșire în

Din cartea autorului

FACILITĂȚI DEPENDENTE DE SISTEM: PORTURI I/O MICROPROCESOR INTEL 8086/8088 Să ne uităm la diferitele dispozitive I/O, deoarece acum vrem să discutăm cum să adaptam implementarea unui compilator C la cerințele unui anumit computer.

Din cartea autorului

7.3.4. Porturi seriale Fișierul /proc/tty/driver/serial conține informații de configurare și statistici despre porturile seriale. Aceste porturi sunt numerotate începând de la zero. Comanda setserial vă permite, de asemenea, să lucrați cu setările de port, dar fișierul /proc/tty/driver/serial, printre altele,

Din cartea autorului

Conectori și porturi Toate laptopurile moderne sunt echipate cu porturi USB, care pot fi conectate la aproape toate perifericele moderne. Interfața USB 2.0 oferă rate de transfer de date de până la 60 Mbps și este compatibilă cu USB 1.1. Acest lucru complicat

biți de oprire- setează numărul de biți de oprire. câmpul poate
ia urmatoarele valori:


  • ONESTOPBIT- un bit de oprire;
  • ONE5STOPBIT- un biți de oprire și jumătate (aproape nr
    folosit);
  • TWOSTOPBIT- doi biți de oprire.

După ce toate câmpurile structurii DCB sunt completate, trebuie
configurați portul apelând funcția SetCommState:

BOOL SetCommState(

MANERA hFile,

LPDCB lpDCB

Dacă are succes, funcția va returna o valoare diferită de zero
valoare, iar în caz de eroare - zero.

A doua structură obligatorie pentru înființarea unui port este
Structura COMMTIMEOUTS. Acesta definește parametrii de sincronizare
la recepţionare şi transmitere. Iată o descriere a acestei structuri:

typedef struct_COMMTIMEOUTS(

DWORD ReadIntervalTimeout;

DWORD ReadTotalTimeoutMultiplier;

DWORD ReadTotalTimeoutConstant;

DWORD WriteTotalTimeoutMultiplier;

DWORD WriteTotalTimeoutConstant;

) COMMTIMEOUTS,*LPCOMMTIMEOUTS;

Câmpurile structurii COMMTIMEOUTS au următoarele semnificații:


  • ReadIntervalTimeout- interval de timp maxim
    (în milisecunde) permis între două citiri
    linie de comunicare în caractere consecutive. Pe parcursul
    operațiuni de citire, perioada de timp începe să conteze din momentul respectiv
    primiți primul caracter. Dacă intervalul dintre doi
    caracterele consecutive vor depăși valoarea specificată, operația
    citirea este finalizată și toate datele acumulate în buffer sunt transferate
    la program. O valoare nulă pentru acest câmp înseamnă că
    timeout nu este folosit.
  • ReadTotalTimeoutMultiplier- setează multiplicatorul (in


    înmulțit cu numărul de caractere solicitate pentru citire.
  • ReadTotalTimeoutConstant- specifică o constantă (in

    operatii de citire. Pentru fiecare operație de citire, această valoare
    plus rezultatul înmulțirii ReadTotalTimeoutMultiplier cu
    numărul de caractere solicitate a fi citite. Valoarea câmpului nulă
    ReadTotalTimeoutMultiplier și ReadTotalTimeoutConstant înseamnă
    că nu este utilizat timeout-ul general pentru operația de citire.
  • WriteTotalTimeoutMultiplier- setează multiplicatorul (in
    milisecunde) utilizat pentru a calcula timpul de expirare total

    înmulțit cu numărul de caractere de scris.
  • WriteTotalTimeoutConstant- specifică o constantă (in
    milisecunde) utilizat pentru a calcula timpul de expirare total
    operatii de scriere. Pentru fiecare operație de scriere, această valoare
    se adaugă la rezultatul înmulțirii WriteTotalTimeoutMultiplier cu
    numărul de caractere de scris. Valoarea câmpului nulă
    WriteTotalTimeoutMultiplier și WriteTotalTimeoutConstant înseamnă
    că nu este utilizat timeout-ul general pentru operația de scriere.

Mai multe despre timeout-uri. Să citim din portul 50
caractere la o rată de 9.600 bps. Dacă folosește 8 biți
pe caracter, complementul de paritate și un bit de oprire, apoi pe unu
un caracter dintr-o linie fizică are 11 biți (inclusiv bitul de început).
Deci vor fi primite 50 de caractere la 9600 bps

50×11/9600=0,0572916 s

sau aproximativ 57,3 milisecunde, presupunând distanță zero
între primirea caracterelor consecutive. Dacă intervalul dintre
caractere este de aproximativ jumătate din timpul de transmisie de unul
caracter, adică 0,5 milisecunde, atunci timpul de primire va fi

50×11/9600+49×0,0005=0,0817916 s

sau aproximativ 82 de milisecunde. Dacă mai mult decât
82 de milisecunde, atunci putem presupune că a apărut o eroare în
funcționarea unui dispozitiv extern și putem opri citirea, astfel
fără a îngheța programul. Acesta este timpul de expirare total al operațiunii
citind. În mod similar, există un timeout general al operației de scriere.

Formula pentru calcularea timpului de expirare total al operațiunii, de exemplu,
lectura arata asa:

NumOfChar x ReadTotalTimeoutMultiplier +
ReadTotalTimeoutConstant

unde NumOfChar este numărul de caractere solicitate pentru operația de citire.

În cazul nostru, timeout-urile de scriere pot fi omise și
pune-le la zero.

După completarea structurii COMMTIMEOUTS, trebuie să suni
funcție pentru a seta timeout-uri:

BOOL SetCommTimeout(

MANERA hFile,

LPCOMMTIMEOUTS lpCommTimeouts

Deoarece operațiunile de transmisie-recepție se desfășoară la o viteză redusă,
este utilizată tamponarea datelor. Pentru a seta dimensiunea tamponului de recepție și
transfer, trebuie să utilizați funcția:

BOOL SetupComm(

MANERA hFile,

DWORD dwInQueue,

DWORD dwOutQueue

Să presupunem că faceți schimb de pachete cu un dispozitiv extern
informații cu o dimensiune de 1024 de octeți, apoi o dimensiune rezonabilă a bufferelor
va fi 1200. Funcția SetupComm este interesantă prin faptul că poate
luați notă de dimensiunile dvs. făcând propriile ajustări sau
respingeți cu totul dimensiunile tampon propuse - în acest caz
această funcție va eșua.

Voi da un exemplu de deschidere și configurare a unui serial
portul COM1. Pentru concizie, fără definiții de eroare. În acest exemplu
portul este deschis pentru funcționare la 9600 bps, se utilizează 1
bit de oprire, fără bit de paritate:

#include

. . . . . . . . . .

MÂNER-mâner;

COMMTIMEOUTS CommTimeOuts;

DCB dcb;

handle = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE,
NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

SetupComm(handle, SizeBuffer, SizeBuffer);

GetCommState(handle, &dcb);

dcb.BaudRate = CBR_9600;

dcb.fBinary = TRUE;

dcb.fOutxCtsFlow = FALSE;

dcb.fOutxDsrFlow = FALS;

dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;

dcb.fDsrSensitivity = FALS;

dcb.fNull = FALSE;

dcb.fRtsControl = RTS_CONTROL_DISABLE;

dcb.fAbortOnError = FALSE;

dcb.ByteSize = 8;

dcb.parity = NOPARITATE;

dcb.StopBits = 1;

SetCommState(handle, &dcb);

CommTimeOuts.ReadIntervalTimeout=10;

CommTimeOuts.ReadTotalTimeoutMultiplier = 1;

// valorile acestor timeout-uri sunt destul de suficiente pentru un încrezător
recepţie

// chiar la 110 baud

CommTimeOuts.ReadTotalTimeoutConstant = 100;

// folosit în acest caz ca timeout
colete

CommTimeOuts.WriteTotalTimeoutMultiplier = 0;

CommTimeOuts.WriteTotalTimeoutConstant = 0;

SetCommTimeouts(handle, &CommTimeOuts);

PurgeComm(handle, PURGE_RXCLEAR);

PurgeComm(handle, PURGE_TXCLEAR);

După deschiderea portului, primul pas este să-l resetați, deci
cum poate fi „gunoiul” în bufferele de recepție și transmisie. Prin urmare, în
La sfârșitul exemplului, am aplicat o funcție necunoscută anterior
PurgeComm:

BOOL PurgeComm(

MANERA hFile,

DWORD dwFlags

Această funcție poate face două lucruri: șterge cozile
transmite-recepți în șofer sau finaliza toate operațiunile
intrare ieșire. Ce acțiuni de efectuat sunt date celorlalți
parametru:


  • PURGE_TXABORT
    înregistrările, chiar dacă nu sunt completate;
  • PURGE_RXABORT- oprește imediat toate operațiunile
    citirile, chiar dacă nu sunt finalizate;
  • PURGE_TXCLEAR- goleste coada de transfer in sofer;
  • PURGE_RXCLEAR- golește coada de primire
    conducător auto.
    Aceste valori pot fi combinate folosind un bit
    SAU operațiuni. De asemenea, este recomandat să ștergeți bufferele după erori
    transmitere si receptie si dupa finalizarea lucrarilor cu portul.

Acum este momentul să aruncăm o privire mai atentă asupra operațiunilor
citire-scriere pentru port. Precum și pentru lucrul cu fișiere, sunt utilizate
Funcțiile ReadFile și WriteFile. Iată prototipurile lor:

BOOL ReadFile(

MANERA hFile,

LPVOID lpBuffer,

DWORD nNumOfBytesToRead,

LPDWORD lpNumOfBytesRead,

LPOVERLAPPED lpSuprapuse

BOOL WriteFile(

MANERA hFile,

LPVOID lpBuffer,

DWORD nNumOfBytesToWrite,

LPDWORD lpNumOfBytesWritten,

LPOVERLAPPED lpSuprapuse

Luați în considerare scopul parametrilor acestor funcții:


  • hFile- descriptorul dosarului de comunicare deschis
    port;
  • lpBuffer- adresa tampon. Pentru o operație de scriere, date de la
    din acest buffer va fi trimis la port. Pentru o operațiune de citire în aceasta
    tamponul va conține datele primite de la linie;
  • nNumOfBytesToRead, nNumOfBytesToWrite- numărul de așteptate
    a primi sau a transmite octeți;
  • nNumOfBytesRead, nNumOfBytesWritten- numărul real
    octeți recepționați sau transmisi. Dacă este primit sau transmis mai puțin
    date decât cele cerute, atunci pentru un fișier de disc acest lucru indică
    despre o eroare, dar pentru portul de comunicare nu este deloc necesar.
    Motivul sunt timeout-urile.
  • LpSuprapus- adresa structurii OVERLAPPED utilizată
    pentru operații asincrone.

La finalizarea normală, funcțiile returnează o valoare,
diferit de zero, în caz de eroare - zero.

Iată un exemplu de operație de citire și scriere:

#include

…………..

DWORD numbytes, numbytes_ok, temp;

COMSTAT ComState;

SUPRAPUT Suprapune;

charbuf_in = "Bună ziua!";

numbytes = 6;

// dacă temp nu este egal cu zero, atunci portul este în stare
greșeli

if(!temp) WriteFile(handle, buf_in, numbytes,
&numbytes_ok, &Suprapunere);

ClearCommError(handle, &temp, &ComState);

if(!temp) ReadFile(handle, buf_in, numbytes, &numbytes_ok,
&Suprapune);

// variabila numbytes_ok conține numărul real
transferat-

// octeți primiți

În acest exemplu, am folosit două necunoscute anterior
structurile COMSTAT și OVERLAPPED și funcția ClearCommError. Pentru
în cazul nostru al comunicării „cu trei fire”, structura SUPRUPPUTĂ poate fi
luați în considerare (utilizați pur și simplu, ca în exemplu). Funcție Prototip
ClearCommError arată astfel:

BOOL ClearCommError(

MANERA hFile,

LPDWORD lpErrors,

LPCOMSTAT lpStat

Această funcție resetează semnalizarea unei erori de port (dacă există).
loc) și returnează informații despre starea portului din structură
COMSTATS:

typedef struct_COMSTAT

DWORD fCtsHold:1;

DWORD fDsrHold:1;

DWORD fRlsdHold:1;

DWORD fXoffHold:1;

DWORD fXoffSent:1;

DWORD fEof:1;

DWORD fTxim:1;

DWORD fReserved:25;

DWORD cbInQue;

DWORD cbOutQue;

) COMSTAT, *LPCOMSTAT;

Putem folosi două câmpuri ale acestei structuri:


  • CbInQue este numărul de caractere din memoria tampon de primire. Aceste simboluri
    preluat din linie, dar încă necitit de funcția ReadFile;
  • CbOutQue este numărul de caractere din memoria tampon de transmisie. Aceste
    caracterele nu au fost încă transferate pe linie.

Câmpurile rămase ale acestei structuri conțin informații despre
greșeli.

Și în cele din urmă, după terminarea lucrărilor cu portul, acesta ar trebui să fie închis.
Închiderea unui obiect în Win32 este efectuată de funcția CloseHandle:

BOOL CloseHandle(

MÂNĂR hObject

Pe site-ul nostru puteți găsi textul complet al clasei pentru a lucra
port serial în modul asincron „peste trei fire” și
Vezi și un exemplu de program care utilizează această clasă. Toate acestea
scris sub C++ Builder, dar din moment ce sunt folosite numai funcții
Win32 API, textul programului poate fi ușor modificat pentru orice compilator C++.
De asemenea, este posibil ca clasa să fie scrisă nu tocmai „conform regulilor” - vă rog
îmi pare rău, autorul nu este un programator „corect” și scrie așa,
cum i se potriveste J .

Oh, ce este chestia asta? De ce este nevoie de ea? Te superi dacă îl ating cu degetul? Ce? Mai bine nu? Bine, nu o voi face. Dar mă interesează pasiunea: există un conector în computer, dar din anumite motive nimeni nu conectează nimic la el. Oricum cum se numeste? Port? Wow! Clasă! Și ce e?..

Acest port este numit și serial (port serial), deși contracția „COM”înseamnă de fapt "comunicare" - portul de comunicare(destinat inițial pentru trafic de date bidirecțional - comunicare reală). Și chiar mai des se numește consistent, deoarece transmite biți strict unul după altul.

Pe lângă seriale, computerele au și un port paralel, conceput în principal pentru conectarea imprimantelor. Se numește adesea așa: imprimantă. Acolo transferul de date este nominal unidirecțional (deși doar nominal).

Este posibil să existe și un port COM pe computer. Acesta este cel mai probabil o priză ușor alungită cu nouă știfturi în două rânduri, câte cinci și patru bucăți fiecare și, de asemenea, filetate pentru șuruburi la capete. Se bazează pe un cablu cu conector, respectiv, cu nouă prize situate în aceeași configurație.

Conectorul se introduce în priză cu contacte și se înșurubează cu șuruburile de mai sus pentru a nu cădea. În acest fel, este posibil, de exemplu, să conectați direct două computere folosind un cablu de modem nul. Ce s-a făcut înainte, în epoca primului PC.

Astăzi, receptoarele de satelit, dispozitivele diferitelor sisteme de securitate, complexele de control al proceselor industriale și alte dispozitive abstruse sunt conectate în acest fel.

Probabil ca si laptopul tau are un astfel de port (bineinteles daca ai unul la ferma). Acesta servește, de exemplu, la sincronizarea cu un computer desktop. Adevărat, în practică, astăzi, o astfel de conexiune nu este folosită atât de des - nimeni nu vrea să se păcălească cu cabluri, deoarece puteți folosi alte tehnologii care sunt mai moderne și mai eficiente.

În zilele noastre, pentru comunicarea cu diferite dispozitive, se folosește din ce în ce mai mult portul USB (apropo, este de fapt și serial). Modemuri mobile, imprimante, adaptoare Wi-Fi - tot mai multe dispozitive sunt conectate prin USB.

În plus, în prezența unor tehnologii precum Ethernet și FireWire (pentru Apple), nu este atât de recomandabil să conectați computerele cu fire prin porturile COM. Ei bine, dacă vă amintiți Bluetooth (care se traduce prin „dinte albastru”), atunci puteți trimite un port serial la muzeu.

Cu toate acestea, sistemul de operare Windows își numește în continuare canalele de transmitere a informațiilor doar COM1, COM2 și așa mai departe.

De ce? Pentru că driverele, de exemplu, pentru același Bluetooth, pot fi prezentate sistemului exact ca porturi COM. Cum ar fi, aici suntem, vă rugăm să iubiți și să favorizați, dacă vă rugăm să ne atribuiți canale pentru schimbul de date. Și dacă nu suntem cu adevărat reali? Mai avem de servit.

Unix (și aromele sale precum Linux) are, de asemenea, unele ciudații atunci când vine vorba de a face față dispozitivelor conectate. Deoarece Unix tratează totul ca fișiere (chiar și hardware!), își păstrează porturile seriale ca atare, cu nume precum ttyS0, ttyS1, ttyS2 (dacă este Linux) sau ttyu0, ttyu1, ttyu2 (pe FreeBSD).

Dacă sunteți un utilizator simplu și nu trebuie să lucrați cu anumite dispozitive, receptoare de satelit și alte dispozitive complicate, atunci nu este absolut necesar să alergați la magazinele de calculatoare și să căutați un cablu pentru un port COM.

Datele de la un computer la altul pot fi transferate în multe alte moduri, inclusiv fără cabluri. Ca ultimă soluție, transferați pe o unitate flash dacă rețeaua locală nu funcționează din niciun motiv.

Pe scurt, deși un astfel de port COM continuă să existe din punctul de vedere al sistemului de operare și chiar este folosit ca canal de comunicare virtuală, în practică, majoritatea utilizatorilor pot uita de el cu conștiința complet curată.

Adevărat, curiozitatea este întotdeauna lăudabilă. Așa că întreabă, fii interesat, studiază. Dar nu atingeți fără permisiune.

Publicații anterioare:

Împreună cu portul paralel, portul COM, sau portul serial, este unul dintre porturile tradiționale de intrare/ieșire ale computerelor utilizate la primele PC-uri. Deși portul COM este de utilizare limitată în computerele moderne, cu toate acestea, informațiile despre acesta pot fi utile pentru mulți utilizatori.

Portul serial, ca și cel paralel, a apărut cu mult înainte de apariția computerelor personale ale arhitecturii IBM PC. În primele computere personale, portul COM era folosit pentru a conecta periferice. Cu toate acestea, domeniul de aplicare a acestuia a fost oarecum diferit de domeniul de aplicare al portului paralel. Dacă portul paralel a fost folosit în principal pentru conectarea imprimantelor, atunci portul COM (apropo, prefixul COM este doar o abreviere pentru cuvântul comunicare) a fost de obicei folosit pentru a lucra cu dispozitive de telecomunicații precum modemurile. Cu toate acestea, vă puteți conecta la port, de exemplu, un mouse, precum și alte dispozitive periferice.

Port COM, aplicații principale:

  1. Conexiune terminală
  2. ~ modemuri externe
  3. ~ imprimante şi plotere
  4. ~ soareci
  5. Conexiune directă a două computere

În prezent, domeniul de aplicare al portului COM a fost redus semnificativ datorită introducerii unei interfețe USB mai rapide și mai compacte și, apropo, de asemenea, în serie. Modemurile externe concepute pentru a se conecta la un port, precum și mouse-urile „COM”, aproape au ieșit din uz. Da, și rareori cineva conectează acum două computere folosind un cablu de modem nul.

Cu toate acestea, o serie de dispozitive specializate încă folosesc portul serial. Îl poți găsi pe multe plăci de bază. Faptul este că, în comparație cu USB, portul COM are un avantaj important - conform standardului de transfer de date serial RS-232, poate funcționa cu dispozitive la o distanță de câteva zeci de metri, în timp ce raza de acțiune a cablului USB, ca o regulă, limitată la 5 metri.

Principiul de funcționare a portului serial și diferența acestuia față de paralel

Spre deosebire de un port paralel (LPT), un port serial transmite date bit cu bit pe o singură linie, mai degrabă decât mai multe linii în același timp. Secvențele de biți sunt grupate în rulări de date, începând cu un bit de pornire și terminând cu un bit de oprire și chiar biți de paritate utilizați pentru verificarea erorilor. De aici provine un alt nume englezesc, care are un port serial - Serial Port.

Portul serial are două linii prin care sunt transmise datele reale - acestea sunt linii pentru transferul datelor de la terminal (PC) la dispozitivul de comunicație și invers. În plus, există mai multe linii de control. Portul serial este deservit de un cip special UART, care este capabil să suporte o rată de transfer de date relativ mare, ajungând la 115.000 baud (octeți/s). Adevărat, este de remarcat faptul că viteza reală a schimbului de informații depinde de ambele dispozitive de comunicare. În plus, funcțiile controlerului UART includ conversia codului paralel în serial și invers.

Portul folosește semnale electrice comparative de înaltă tensiune de până la +15 V și -15 V. Nivelul zero logic al portului serial este de +12 V, iar nivelul unu logic este -12 V. O cădere de tensiune atât de mare asigură un grad ridicat de zgomot imunitatea datelor transmise. Pe de altă parte, tensiunile înalte utilizate în portul serial necesită soluții complexe de circuite. Această împrejurare a contribuit și la scăderea popularității portului.

Interfață serială RS-232

Funcționarea portului serial pe un PC se bazează pe standardul de comunicație pentru dispozitivele seriale RS-232. Acest standard descrie procesul de schimb de date între un dispozitiv de telecomunicații, cum ar fi un modem și un terminal de calculator. Standardul RS-232 definește caracteristicile electrice ale semnalelor, scopul lor, durata, precum și dimensiunile conectorilor și pinout-ul acestora. În același timp, RS-232 descrie doar stratul fizic al procesului de transfer de date și nu se aplică protocoalelor de transport utilizate în acest caz, care pot varia în funcție de echipamentul de comunicație și software-ul utilizat.

Standardul RS-232 a fost creat în 1969, iar cea mai recentă versiune a acestuia, TIA 232, a fost lansată în 1997. RS-232 este acum considerat învechit, dar majoritatea sistemelor de operare încă îl acceptă.

În computerele moderne, conectorul portului serial este un conector tată DB-9 cu 9 pini, deși standardul RS-232 descrie și un conector DB-25 cu 25 pini, care era adesea folosit pe computerele mai vechi. Conectorul DB-9 se află de obicei pe placa de bază a PC-ului, deși la computerele mai vechi ar putea fi pe un multicard special introdus în slotul de expansiune.

Priză DB-9 cu 9 pini pe placa de bază

Conector DB-9 de pe cablul dispozitivului conectat la port

Spre deosebire de portul paralel, conectorii de pe ambele părți ale cablului serial bidirecțional sunt identici. Pe lângă liniile de transmitere a datelor în sine, portul conține mai multe linii de serviciu prin care informațiile de control pot fi transmise între terminal (calculator) și dispozitivul de telecomunicații (modem). Deși teoretic doar trei canale sunt suficiente pentru ca un port serial să funcționeze - să primească date, să transmită date și la sol, practica a arătat că prezența liniilor de serviciu face comunicarea mai eficientă, fiabilă și, ca urmare, mai rapidă.

Scopul liniilor de conector DB-9 portului serial conform RS-232 și corespondența lor cu pinii conectorului DB-25:

Contactați DB-9 nume englezesc nume rusesc Contactați DB-25
1 Detectare purtător de date Operatorul de transport a fost detectat 8
2 Transmite date Date transferate 2
3 Primește date Date primite 3
4 Terminal de date gata Pregătirea terminalului 20
5 Sol Pământ 7
6 Setul de date gata Pregătirea emițătorului 6
7 Solicitare de trimis Solicitare de trimitere a datelor 4
8 Ștergeți pentru a trimite Transfer de date permis 5
9 Indicator de apel Indicator de apel 22

Configurare și întreruperi

Deoarece un computer poate avea mai multe porturi seriale (până la 4), sistemul le alocă două întreruperi hardware - IRQ 3 (COM 2 și 4) și IRQ 4 (COM 1 și 3) și mai multe întreruperi BIOS. Multe programe de comunicații, precum și modemurile încorporate, folosesc întreruperi și spațiul de adrese al porturilor COM pentru lucrul lor. În acest caz, de obicei nu se folosesc porturi reale, ci așa-numitele porturi virtuale, care sunt emulate de sistemul de operare însuși.

Ca și în cazul multor alte componente ale plăcii de bază, setările portului COM, cum ar fi valorile întreruperilor BIOS care corespund întreruperilor hardware, pot fi configurate prin interfața de configurare BIOS. Pentru aceasta, sunt utilizate opțiunile BIOS precum Port COM, Port Serial Onboard, Adresă Port Serial etc.

Concluzie

Portul serial al PC-ului nu este în prezent un mediu utilizat pe scară largă pentru informații I/O. Cu toate acestea, deoarece există o cantitate mare de echipamente, în principal pentru scopuri de telecomunicații, concepute pentru a funcționa cu un port serial și, de asemenea, datorită unora dintre avantajele protocolului de date seriale RS-232, interfața serială nu ar trebui încă anulată. ca o arhitectură de computer personal rudiment absolut învechită.