Bahay / Mga pagsusuri / Paglalarawan ng COM port. Ano ang COM port. Modem at COM port

Paglalarawan ng COM port. Ano ang COM port. Modem at COM port

Kamakailan, ang serial na paraan ng paghahatid ng data ay pinapalitan ang parallel.
Hindi mo kailangang tumingin sa malayo para sa mga halimbawa: ang hitsura ng USB at SATA bus ay nagsasalita para sa sarili nito.
Sa katunayan, ang parallel bus ay mahirap sukatin (mas mahabang cable, mas mataas na bus clock rate), hindi nakakagulat na ang mga teknolohiya ay lumiliko sa parallel na mga bus sa likod.

Mga serial interface

Ngayon, may napakaraming iba't ibang serial data interface.
Bilang karagdagan sa nabanggit na USB at SATA, maaari ding maalala ng isa ang hindi bababa sa dalawang kilalang RS-232 at MIDI na pamantayan (aka GamePort).
Ang lahat ng mga ito ay pinagsama ng pareho - ang serial transmission ng bawat bit ng impormasyon, o ang Serial Interface.
Ang ganitong mga interface ay may napakaraming pakinabang, at ang pinakamahalaga sa kanila ay isang maliit na bilang ng mga wire sa pagkonekta, at, dahil dito, isang mas mababang presyo.

Paglipat ng data

Maaaring ipatupad ang serial communication sa dalawang paraan: asynchronous at synchronous.

Ang sabay-sabay na paghahatid ng data ay nagsasangkot ng pag-synchronize ng operasyon ng receiver at transmitter sa pamamagitan ng pagsasama ng impormasyon ng orasan sa ipinadalang signal o sa pamamagitan ng paggamit ng isang espesyal na linya ng pag-sync.
Ang receiver at transmitter ay dapat na konektado sa isang espesyal na synchronization cable, na nagsisiguro na ang mga device ay gumagana sa parehong frequency.

Ang asynchronous transmission ay kinabibilangan ng paggamit ng mga espesyal na bits na nagmamarka sa simula at pagtatapos ng data - simula (logical zero) at stop (logical one) bits.
Posible rin na gumamit ng espesyal na parity bit, na tumutukoy sa pantay o kakaibang bilang ng mga ipinadalang solong bit (depende sa tinatanggap na kumbensyon).
Sa receiving side, ang bit na ito ay sinusuri, at kung ang parity bit ay hindi tumutugma sa bilang ng mga solong bits, ang data packet ay ipapadala muli.

Kapansin-pansin na ang naturang tseke ay nagpapahintulot sa iyo na makakita ng isang error lamang kung isang bit lamang ang nailipat nang hindi tama, kung ang ilang mga bit ay hindi nailipat nang tama, ang tseke na ito ay nagiging hindi tama.
Ang pagpapadala ng susunod na data packet ay maaaring mangyari anumang oras pagkatapos ipadala ang stop bit, at, siyempre, dapat magsimula sa start bit.
Hindi malinaw?

Well, kung lahat Mga teknolohiya sa kompyuter ay simple, kung gayon ang sinumang maybahay ay matagal nang naglilok ng mga bagong protocol na kahanay ng mga dumplings ...
Subukan nating tingnan ang proseso sa ibang paraan.
Ang data ay ipinapadala sa mga packet, humigit-kumulang tulad ng mga IP packet, ang mga bit ng impormasyon ay sumasabay sa data, ang bilang ng mga bit na ito ay maaaring mag-iba mula 2 hanggang 3 at kalahati.
May kalahati?!
Oo, tama ang narinig mo, may kalahati!

Ang stop bit, o sa halip ang ipinadalang signal na tumutugma sa stop bit, ay maaaring magkaroon ng tagal na mas malaki kaysa sa signal na tumutugma sa isang bit, ngunit mas mababa kaysa sa dalawang bit.
Kaya, ang isang packet ay palaging nagsisimula sa isang start bit, na palaging zero, na sinusundan ng mga data bit, pagkatapos ay isang parity bit, at pagkatapos ay isang stop bit, na palaging isa.
Pagkatapos, pagkatapos ng ilang di-makatwirang yugto ng panahon, nagpapatuloy ang martsa ng mga beats sa Moscow.

Ang paraan ng paghahatid na ito ay nagpapahiwatig na ang receiver at transmitter ay dapat gumana sa parehong bilis (well, o halos sa parehong bilis), kung hindi, ang receiver ay maaaring walang oras upang iproseso ang mga papasok na data bit, o kunin ang lumang bit para sa isang bago. .
Upang maiwasan ito, ang bawat bit ay strobed, iyon ay, ipinadala ito nang sabay-sabay na may isang espesyal na signal - isang "strobe" na nabuo sa loob ng aparato.
Mayroong ilang partikular na bilis para sa mga asynchronous na device - 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 at 115200 bits.

Marahil ay narinig mo na ang "baud" ay ginagamit bilang isang yunit para sa pagsukat ng rate ng paglilipat ng data - ang dalas ng pagbabago ng estado ng linya, at ang halagang ito ay magkakasabay lamang sa rate ng paglilipat ng data kung ang signal ay maaaring magkaroon ng isa sa dalawang halaga. .
Kung ang ilang mga bit ay naka-encode sa isang pagbabago ng signal (at ito ang kaso sa maraming mga modem), ang bilis ng paghahatid at ang dalas ng pagbabago ng linya ay magiging ganap na magkakaibang mga halaga.

Ngayon ng ilang mga salita tungkol sa mahiwagang terminong "data packet".
Sa ilalim ng pakete kasong ito ay tumutukoy sa hanay ng mga bit na ipinadala sa pagitan ng simula at stop bit.
Ang kanilang bilang ay maaaring mag-iba mula lima hanggang walo.
Maaaring magtaka ang isa kung bakit eksaktong lima hanggang walong piraso?
Bakit hindi ilipat kaagad, sabihin, isang kilobyte ng data sa loob ng isang packet?

Ang sagot ay halata: kapag nagpapadala ng maliliit na data packet, maaari tayong mawala sa pamamagitan ng pagpapadala ng tatlong service bits kasama nila (mula 50 hanggang 30 porsiyento ng data), ngunit kung ang packet ay nasira sa panahon ng paghahatid, madali nating makikilala ito (tandaan ang tungkol sa parity bit?) at mabilis na i-transmit muli siya.
Ngunit sa isang kilobyte ng data, magiging mahirap na tuklasin ang isang error, at magiging mas mahirap na ipadala ito.

Ang isang halimbawa ng isang asynchronous na serial data transfer device ay isang computer COM port, isang paboritong Trussardi-designed modem, at isang mouse na konektado sa parehong port, na sa ilang kadahilanan ay laging sinusubukan ng mga makitid na kalihim na ipasok sa PS / 2.
Gumagana ang lahat ng mga device na ito sa interface ng RS-232, o sa halip sa asynchronous na bahagi nito, dahil inilalarawan din ng pamantayan ang kasabay na paglilipat ng data.

AMD Radeon Software Adrenalin Edition Driver 19.9.2 Opsyonal

Ang bagong AMD Radeon Software Adrenalin Edition 19.9.2 Opsyonal na driver ay nagpapabuti sa pagganap sa Borderlands 3 at nagdaragdag ng suporta para sa Radeon Image Sharpening.

Pinagsama-sama pag-update ng windows 10 1903 KB4515384 (idinagdag)

Noong Setyembre 10, 2019, naglabas ang Microsoft ng pinagsama-samang update para sa Windows 10 na bersyon 1903 - KB4515384 na may ilang mga pagpapahusay sa seguridad at isang pag-aayos para sa isang bug na nasira. Gumagana ang Windows Maghanap at nagdulot ng mataas na paggamit ng CPU.

Ang isang COM port ay kadalasang ginagamit upang ikonekta ang microcontroller sa isang computer. Sa artikulong ito, ipapakita namin kung paano magpadala ng mga control command mula sa isang computer at magpadala ng data mula sa isang controller.

Paghahanda para sa trabaho

Karamihan sa mga microcontroller ay may maraming I/O port. Ang UART protocol ay ang pinaka-angkop para sa komunikasyon sa isang PC. Ito ay isang serial asynchronous na data transfer protocol. Upang i-convert ito sa isang USB interface, ang board ay may USB-RS232 converter - FT232RL.
Kailangan mo lang ng Arduino-compatible board para patakbuhin ang mga halimbawa sa artikulong ito. Ginagamit namin ang . Tiyaking ang iyong board ay may LED na nakakonekta sa pin 13 at isang reset button.

Halimbawa, mag-upload tayo ng code sa board na nagpapakita ng ASCII table. Ang ASCII ay isang encoding para sa kumakatawan sa mga decimal na digit, ang Latin at pambansang mga alpabeto, mga bantas, at mga control character.

int simbolo = 33 ; void setup() ( Serial. begin(9600); Serial. println(" ASCII Table ~ Character Map " ); ) void loop() ( Serial. write(symbol) ; Serial. print(" , dec: " ); Serial .print(simbolo) ; Serial.print(" , hex: " ); Serial.print(simbolo, HEX) ; Serial.print(" , okt: " ); Serial.print(simbolo, OCT) ; Serial.print( " , bin: " ); Serial.println(symbol, BIN) ; if (symbol == 126 ) ( while (true) ( ​​​​continue ; ) ) symbol+ + ; )

Iniimbak ng variable ng simbolo ang code ng simbolo. Ang talahanayan ay nagsisimula sa 33 at nagtatapos sa 126, kaya ang simbolo ay unang nakatakda sa 33.
Upang simulan ang pagpapatakbo ng UART port, gamitin ang function Serial.begin(). Ang tanging parameter nito ay bilis. Ang bilis ay dapat na makipag-ayos sa mga panig ng pagpapadala at pagtanggap nang maaga, dahil ang protocol ng paghahatid ay asynchronous. Sa halimbawang ito, ang bilis ay 9600bps.
Tatlong function ang ginagamit para magsulat ng value sa isang port:

  1. Serial.write()– nagsusulat ng data sa port sa binary form.
  2. Serial.print() maaaring magkaroon ng maraming halaga, ngunit lahat ng mga ito ay nagsisilbing pagpapakita ng impormasyon sa isang form na pang-tao. Halimbawa, kung ang impormasyong tinukoy bilang parameter na ipapasa ay nakapaloob sa mga quote, ipapakita ito ng terminal program na hindi nagbabago. Kung gusto mong magpakita ng anumang halaga sa tiyak na sistema calculus, pagkatapos ay kailangan mong magdagdag ng service word: BIN-binary, OCT - octal, DEC - decimal, HEX - hexadecimal. Halimbawa, Serial.print(25,HEX).
  3. Serial.println() ginagawa ang katulad ng Serial.print(), ngunit isinasalin pa rin ang string pagkatapos ipakita ang impormasyon.

Upang suriin ang pagpapatakbo ng programa, kinakailangan na ang computer ay may terminal program na tumatanggap ng data mula sa COM port. AT Arduino IDE nakapaloob na. Upang tawagan ito, piliin ang Tools->Port Monitor mula sa menu. Ang window ng utility na ito ay napaka-simple:

Ngayon i-click ang restart button. Magre-reboot ang MK at ipapakita ang talahanayan ng ASCII:

Bigyang-pansin ang bahaging ito ng code:

kung (simbolo = = 126 ) ( habang (totoo) ( ituloy ; ) )

Ito ay huminto sa pagpapatupad ng programa. Kung ibubukod mo ito, ang talahanayan ay ipapakita nang walang katiyakan.
Upang pagsama-samahin ang nakuhang kaalaman, subukang magsulat ng isang walang katapusang loop na magpapadala ng iyong pangalan sa serial port minsan sa isang segundo. Magdagdag ng mga numero ng hakbang sa output at huwag kalimutang isalin ang linya pagkatapos ng pangalan.

Nagpapadala ng mga utos mula sa PC

Bago gawin ito, kailangan mong makakuha ng ideya kung paano gumagana ang isang COM port.
Una sa lahat, ang lahat ng palitan ay nangyayari sa pamamagitan ng memory buffer. Iyon ay, kapag nagpadala ka ng isang bagay mula sa isang PC patungo sa isang device, ang data ay inilalagay sa ilang espesyal na seksyon ng memorya. Sa sandaling handa na ang device, babasahin nito ang data mula sa buffer. Pinapayagan ka ng function na suriin ang estado ng buffer serial.avaliable(). Ibinabalik ng function na ito ang bilang ng mga byte sa buffer. Upang ibawas ang mga byte na ito, kailangan mong gamitin ang function Serial.read(). Tingnan natin kung paano gumagana ang mga function na ito sa isang halimbawa:

int val = 0 ; void setup() ( Serial. begin(9600); ) void loop() ( if (Serial. available() > 0 ) ( val = Serial. read() ; Serial. print("Natanggap ko: " ); Serial. write(val); Serial.println() ; ) )

Matapos mai-load ang code sa memorya ng microcontroller, buksan ang monitor ng COM port. Mag-type ng isang character at pindutin ang Enter. Sa natanggap na patlang ng data makikita mo ang: “Natanggap ko:X”, saan sa halip na X magiging karakter na iyong ipinasok.
Ang programa ay umiikot nang walang katiyakan sa pangunahing loop. Sa sandaling ang isang byte ay isinulat sa port, ang Serial.available() function ay tumatagal ng halaga 1, iyon ay, ang kundisyon ay natutupad. Serial.available() > 0. Susunod na function Serial.read() binabasa ang byte na ito, sa gayon ay na-clear ang buffer. Pagkatapos nito, gamit ang mga function na alam mo na, ang output ay nangyayari.
Ang paggamit ng built-in na COM port monitor ng Arduino IDE ay may ilang mga limitasyon. Kapag nagpapadala ng data mula sa board patungo sa COM port, ang output ay maaaring ayusin sa isang arbitrary na format. At kapag nagpapadala mula sa PC sa board, ang paglilipat ng mga character ay nangyayari alinsunod sa talahanayan ng ASCII. Nangangahulugan ito na kapag ipinasok mo, halimbawa, ang character na "1", ang binary na "00110001" (iyon ay, "49" sa decimal) ay ipinadala sa pamamagitan ng COM port.
Baguhin natin ng kaunti ang code at suriin ang pahayag na ito:

int val = 0 ; void setup() ( Serial. begin(9600); ) void loop() ( if (Serial. available() > 0 ) ( val = Serial. read() ; Serial. print("Natanggap ko: " ); Serial. println(val, BIN) ; ) )

Pagkatapos mag-download, sa port monitor kapag nagpapadala ng "1", makikita mo bilang tugon: "Natanggap ko: 110001". Maaari mong baguhin ang format ng output at tingnan kung ano ang tinatanggap ng board kasama ng iba pang mga character.

Kontrol ng device sa pamamagitan ng COM port

Malinaw, sa pamamagitan ng mga utos mula sa isang PC, maaari mong kontrolin ang anumang mga function ng microcontroller. I-download ang program pamamahala ng trabaho LED:

int val = 0 ; void setup() ( Serial. begin(9600); ) void loop() ( if (Serial. available() > 0 ) ( val = Serial. read() ; if (val= = "H") digitalWrite(13 , HIGH); kung (val= = "L") digitalWrite(13 , LOW) ; ) )

Kapag ang "H" na character ay ipinadala sa COM port, ang LED sa ika-13 na output ay iilaw, at kapag ang "L" ay ipinadala, ang LED ay mawawala.
Kung, batay sa mga resulta ng pagtanggap ng data mula sa COM port, gusto mong ang programa ay magsagawa ng iba't ibang mga aksyon sa pangunahing loop, maaari mong suriin ang mga kondisyon sa pangunahing loop. Halimbawa.

Ang COM port, o serial port, ay isang bidirectional serial interface na idinisenyo upang makipagpalitan ng byte data. Sa una, ang port na ito ay ginamit upang ikonekta ang terminal, at pagkatapos ay para sa modem at mouse. Ngayon ay nakaugalian na itong gamitin upang ikonekta ang pinagmulan pati na rin upang makipag-usap sa pagproseso ng mga naka-embed na sistema ng computing.

Paggamit

Kaya, bago natin pag-usapan nang mas detalyado kung ano ang COM port, kailangan nating tingnan ang nakaraan upang maunawaan ang kahulugan nito. Literal na 15 taon na ang nakalilipas, ginamit ang isang paraan upang ikonekta ang mga device sa isang computer gamit ang isang espesyal na standard connector na matatagpuan sa rear panel. block ng system gamit ang isang espesyal na RS-232 serial cable. Ang pamamaraang ito ay may maraming mga disadvantages. Ang nasabing cable, ayon sa mga modernong pamantayan, ay nagbibigay ng napakababang rate ng paglilipat ng data - mga isang daang kilobit bawat segundo. Bilang karagdagan sa kung kailan ginawa ang pisikal na koneksyon ng mga konektor, kinakailangan na patayin ang kagamitan, at sila mismo ay nakakabit sa isa't isa na may mga turnilyo na nagsisiguro ng pagiging maaasahan, habang ang kanilang mga sukat ay naiiba sa malaking sukat.

Medyo kasaysayan

Ang COM port sa mga computer noong panahong iyon ay tradisyonal na binibilang na 1 o 2, dahil karaniwan ay hindi hihigit sa dalawa sa kanila. Maaaring mag-install ng mga karagdagang port kung kinakailangan. Kapag na-configure na ng user software, kinakailangan na huwag malito at tama na i-install ang eksaktong isa kung saan ibinigay ang koneksyon kinakailangang kagamitan. Ang bawat COM port ay nangangailangan ng tamang mga setting ng bilis, pati na rin ang isang bilang ng iba pang mahiwagang mga parameter na kilala lamang sa isang makitid na bilog ng mga espesyalista. Upang maging matagumpay ang koneksyon ng kagamitan, ang lahat ng kinakailangang mga parameter ay kailangang malaman mula sa isang lugar o piniling eksperimento, dahil sa kasong ito ay walang awtomatikong pagsasaayos. Bilang karagdagan, ang koneksyon sa pamamagitan ng COM port ay nagpapahintulot sa koneksyon ng anumang software na may di-makatwirang panlabas na kagamitan, kahit na ganap na hindi tugma, na nagdulot ng malaking bilang ng mga error sa panahon ng proseso ng mga setting.

Modernidad

Ngayon ang koneksyon sa pamamagitan ng COM port ay ganap na napalitan ng higit pa makabagong pamamaraan, na hindi nangangailangan ng espesyal na kaalaman para sa pagpapatupad, lalo na sa pamamagitan ng USB port. Ang pamamaraang ito ay wala sa lahat ng mga disadvantages na nabanggit kanina. Gayunpaman, ang mga modernong pamantayan para sa pagiging tugma ng pagkonekta sa lahat ng uri ng kagamitan sa GPS at napaka-magkakaibang software ay nabuo nang mahabang panahon sa paligid ng konsepto ng mga COM port, na naging lipas na sa ngayon.

Ito ay dahil sa ang katunayan na sa una halos anumang kagamitan, kabilang ang GPS, ay panlabas, at ang koneksyon nito sa computer ay ginawa sa pamamagitan ng isang serial cable na konektado sa isa sa mga hardware port. Sa panahon ng proseso ng pagsasaayos, ang user ay kinakailangang piliin nang tama ang numero ng port at ang bilis ng paghahatid ng data sa pamamagitan nito. Sa oras na iyon, ang pangunahing pamantayan para sa pagpapadala ng data mula sa isang GPS receiver sa isang programa, na ngayon ay tinatawag na NMEA-0183, ay lumitaw. Sa katunayan, ang pamantayang ito ay nangangailangan ng lahat ng mga developer ng kahit na ang pinakamodernong hardware at software na makipagpalitan ng data sa pamamagitan ng mga COM port. At lahat ng ito sa mga kondisyon ng mga modernong kompyuter, pati na rin sa mga PDA, ang USB standard ay matagal nang naging pangunahing isa. At ang isa pang tampok ay ang kamakailang mga GPS receiver ay lalong direktang ini-install sa loob ng case ng device, iyon ay, walang connecting cable sa pagitan nito at ng pangunahing device.

Mga virtual COM port

Ang isang paraan sa labas ay naimbento, ibig sabihin, ang mga "virtual" na COM port ay binuo. Lumalabas na ang panloob na aparato ng PDA, halimbawa, isang GPS receiver, ay ginagaya sa software sa anyo ng isang COM port, habang hindi ganoon sa mga tuntunin ng hardware. Kasabay nito, ang isang programa na idinisenyo upang mag-interface sa pamamagitan ng naturang pamantayan ay walang pagkakaiba kung paano ito ipinatupad. Dito pinapayagan ang pagkakaroon ng virtual simulation, at hindi ang obligadong presensya ng pagpapatupad ng hardware. Kaya posible na matiyak ang pagiging tugma ng mga lumang-istilong programa ng GPS na may modernong kagamitan.

Mga pagbabagong ginawa

Kasabay nito, ang pamamahala ng COM port ay hindi nagbago nang malaki. Ang gumagamit, sa lumang paraan, ay dapat gumawa ng mga kumplikadong setting nang halos manu-mano. Gayunpaman, ang isang modernong COM port ay hindi na ang napakalaking device na matatagpuan sa likurang panel ng system unit, ngunit isang ganap na kakaibang device. At dito ang buong punto ay na mula sa isang software point of view, ang lahat ng kanilang mga pagpapatupad ay mukhang walang mukha, iyon ay, walang pagkakaiba sa pagitan ng virtual at tunay na mga port. Para sa software, ang mga port ay naiiba lamang sa pamamagitan ng mga numerong itinalaga sa kanila ng mga tagagawa ng PDA sa isang ganap na random na batayan. Halimbawa, ang ASUS receiver ay karaniwang matatagpuan sa COM5, habang ang PocketLOOX 560 ay nagpapakita ng receiver sa COM8. Lumalabas na ang isang programa na gustong makatanggap ng data mula sa isang GPS receiver ay walang anumang maaasahang impormasyon tungkol sa conditional number, kung saan lumilitaw ang port, na inireseta na angkop para sa receiver sa PDA na ito.

Paano gumagana ang lahat ng ito?

Dahil sa lahat ng magagamit na COM port, magagawa mo awtomatikong paghahanap angkop, ang pamamaraan para sa naturang survey ay medyo hindi mapagkakatiwalaan at medyo mahirap. Ito ay dahil sa ang katunayan na ang mga device na ipinapakita sa system bilang mga COM port ay maaaring medyo magkakaibang at walang kinalaman sa GPS, maaari silang ganap na hindi mahuhulaan na tumugon sa naturang survey. Halimbawa, sa isang PDA may mga port na nauugnay sa isang panloob na cellular modem, na may USB, na may isang infrared na port, pati na rin sa iba pang mga elemento. Ang pag-access sa mga ito sa pamamagitan ng isang programa na idinisenyo upang gumana sa isang partikular na aparato ay maaaring humantong sa isang ganap na hindi mahulaan na reaksyon, gayundin sa iba't ibang mga malfunctions, na kadalasang nagiging sanhi ng pag-freeze ng PDA. Iyon ang dahilan kung bakit ang pagtatangkang magbukas ng COM port ay maaaring humantong sa mga hindi inaasahang sitwasyon, hanggang sa pag-on ng Bluetooth o At maaaring magkaroon ng higit pang hindi maintindihan na mga kaso.

Operasyon ng COM port

Para sa mga COM port, isang asynchronous universal transceiver chip ang ginagamit bilang batayan. Ang microcircuit na ito ay umiiral sa ilang mga varieties: Intel 16550A, 16550, 16450, 8250. Para sa bawat COM port, naglalaman ito ng data receiver at transmitter registers, pati na rin ang isang bilang ng mga control register na maaaring ma-access sa pamamagitan ng BIOS, Windows at MS DOS programs. Sa pinakabagong bersyon Ang microchip ay may isang hanay ng mga buffer para sa pansamantalang pag-iimbak ng ipinadala at natanggap na data. Salamat sa posibilidad na ito, posible na matakpan ang gawain ng gitnang processor nang mas madalas, pati na rin upang i-coordinate ang bilis ng paghahatid ng data.

Mga pangunahing setting

Ipinapalagay ng COM port device ang mga sumusunod na katangiang katangian:

Ang base address ng port para sa input at output ng impormasyon;

Mga numero ng pagkagambala ng hardware;

Ang laki ng isang bloke ng impormasyon;

Ang bilis kung saan ang data ay ipinadala;

Honesty detection mode;

Paraan ng pamamahala ng daloy ng impormasyon;

Ang bilang ng mga stop bit.

Paano suriin ang COM port ng computer? Ano ang dapat pansinin?

Gaya ng nabanggit kanina, ang ganitong uri ng port ay isang bi-directional interface para sa isang bit-level na serial way. Ang isang natatanging katangian kung ihahambing sa parallel port dito ay ang paglipat ng data nang paunti-unti. Ang anatomy ng isang COM port ay tulad na hindi lamang ito sa isang computer na gumagamit ng serial data transfer method. Halimbawa, ang mga interface tulad ng Ethernet o USB ay gumagamit din ng isang katulad na prinsipyo, ngunit nangyari ito sa kasaysayan na kaugalian na tawagan ang port ng RS232 standard serial.

Kadalasan kinakailangan na magbukas ng COM port para sa pagkumpuni at diagnostic ng isang computer, habang kailangan din itong suriin para sa operability. Napakadaling magsunog ng isang elemento. Kadalasan nangyayari ito dahil sa kasalanan ng user, na hindi tama ang pagkakakonekta sa device, ang paghila sa connector habang nakakonekta ang interface. Ang pinakamadaling paraan upang suriin kung gumagana ang interface ay ang pagkonekta ng mouse dito. Gayunpaman, napakahirap makakuha ng kumpletong larawan, dahil ang manipulator ay gumagamit lamang ng kalahati ng mga linya ng signal sa walong magagamit. Ang paggamit lamang ng isang espesyal na plug at program ang magbibigay-daan sa pagsusuri sa pagganap. Para sa mga layuning ito, mayroon nang espesyal na binuong software.

Ang mga serial port ay minamahal ng mga developer para sa kanilang kadalian ng pagpapanatili at paggamit.

At siyempre, ang pagsusulat sa console ng terminal program ay mabuti, ngunit gusto ko ang aking sariling aplikasyon, na, sa pamamagitan ng pagpindot sa isang key sa screen, ay nagsasagawa ng mga aksyon na kailangan mo;)

Sa artikulong ito ay ilalarawan ko kung paano magtrabaho kasama com port sa C++.

Ang solusyon ay simple, ngunit sa ilang kadahilanan ang isang gumaganang halimbawa ay hindi nahanap kaagad. Para sa sim ini-save ko dito.

Siyempre, maaari kang gumamit ng mga cross-platform na solusyon tulad ng QSerial - isang library sa Qt, malamang na gagawin ko, ngunit sa hinaharap. Ngayon ay pinag-uusapan natin ang tungkol sa "purong" Windows C++. Magsusulat kami sa Visual Studio. Mayroon akong 2010, kahit na hindi ito gumaganap ng anumang papel ...

Gumawa ng bagong console Win32 project.

Isama ang mga file ng header:

#isama #isama gamit ang namespace std;

Nagdedeklara kami ng com port handler:

HANDLE hSerial;

Ginagawa ko ito sa buong mundo kaya hindi ko kailangang mag-alala tungkol sa mga pointer kapag ipinapasa ito sa mga function.

int _tmain(int argc, _TCHAR* argv) (

Hindi ko kayang panindigan ang Windows style ng programming. Tinawag nila ang lahat sa kanilang sariling paraan at umupo na nagsasaya ...

Ngayon ang magic ng pagdedeklara ng isang string na may pangalan ng port. Ang bagay ay hindi nito kayang baguhin ang char mismo.

LPCTSTR sPortName = L"COM1";

Ang pagtatrabaho sa mga serial port sa Windows ay gumagana tulad ng sa isang file. Pagbukas ng una com port para sa pagsusulat/pagbabasa:

HSerial = ::CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

Sinusuri ang pag-andar:

If(hSerial==INVALID_HANDLE_VALUE) ( if(GetLastError()==ERROR_FILE_NOT_FOUND) ( cout<< "serial port does not exist.\n"; } cout << "some other error occurred.\n"; }

Ngayon ay kailangan mong i-configure ang mga parameter ng koneksyon:

DCB dcbSerialParams = (0); dcbSerialParams.DCBlength=sizeof(dcbSerialParams); kung (!GetCommState(hSerial, &dcbSerialParams)) ( cout<< "getting state error\n"; } dcbSerialParams.BaudRate=CBR_9600; dcbSerialParams.ByteSize=8; dcbSerialParams.StopBits=ONESTOPBIT; dcbSerialParams.Parity=NOPARITY; if(!SetCommState(hSerial, &dcbSerialParams)) { cout << "error setting serial port state\n"; }

Sa msdn, pinapayuhan na kunin muna ang mga parameter, at pagkatapos ay baguhin ang mga ito. Nag-aaral pa kami, kaya ginagawa namin ang hinihiling.

Ngayon ipahayag natin ang string na ipapasa natin at ang mga variable na kinakailangan para dito:

Char data = "Kumusta mula sa C++"; // string na ipapasa ang DWORD dwSize = sizeof(data); // laki ng string na ito DWORD dwBytesWritten; // narito ang bilang ng mga byte na aktwal na inilipat

Nagpapadala ng string. Hayaan mong ipaalala ko sa iyo na ang halimbawa ay ang pinakasimple, kaya hindi ako gumagawa ng anumang mga espesyal na pagsusuri:

BOOL iRet = WriteFile(hSerial,data,dwSize,&dwBytesWritten,NULL);

Nagpasya din akong ipakita ang laki ng string at ang bilang ng mga byte na ipinadala upang kontrolin:

Cout<< dwSize << " Bytes in string. " << dwBytesWritten << " Bytes sended. " << endl;

Sa pagtatapos ng programa, gumawa kami ng isang walang katapusang loop ng pagbabasa ng data:

While(1) ( ReadCOM(); ) return 0; )

Ngayon ang read function:

Void ReadCOM() ( DWORD iSize; char sReceivedChar; habang (true) ( ​​​​ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0); // makakuha ng 1 byte kung (iSize > 0) // print cout kung may natanggap<< sReceivedChar; } }

Iyan talaga ang buong halimbawa.

Sa computing, ang serial port ay isang serial communication interface kung saan ang impormasyon ay ipinapadala o output sa isang pagkakataon. Para sa karamihan ng kasaysayan ng mga personal na computer, inilipat ang data sa pamamagitan ng mga serial port sa mga device gaya ng mga modem, terminal, at iba't ibang peripheral.

Habang ang mga interface tulad ng Ethernet, FireWire, at USB ay lahat ay nagpapadala ng data bilang isang serial stream, ang terminong "serial port" sa pangkalahatan ay kinikilala ang hardware na higit pa o hindi gaanong sumusunod sa RS-232 na pamantayan, na idinisenyo upang mag-interface sa isang modem o katulad na aparato ng komunikasyon.

Ang mga modernong computer na walang serial port ay maaaring mangailangan ng mga serial converter upang matiyak ang pagiging tugma sa RS-232 serial device. Ginagamit pa rin ang mga serial port sa mga application gaya ng mga industrial automation system, siyentipikong instrumento, point of sale system, at ilang pang-industriya at consumer na produkto. Maaaring gamitin ng mga server computer ang serial port bilang management o diagnostic console. Ang mga kagamitan sa network (gaya ng mga router at switch) ay kadalasang gumagamit ng serial console para sa configuration. Ang mga serial port ay patuloy na ginagamit sa mga lugar na ito dahil ang mga ito ay simple, mura, at ang kanilang mga tampok sa console ay lubos na na-standardize at laganap.

COM port pinout (RS232)

Mayroong 2 uri ng com port, isang 25-pin na lumang connector at isang mas bagong 9-pin na connector na pumalit dito.

Nasa ibaba ang isang diagram ng isang karaniwang karaniwang 9-pin RS232 connector na may mga connector, ang ganitong uri ng connector ay tinatawag ding DB9 connector.

  1. Carrier Detect (DCD).
  2. Tumanggap ng Data(RXD).
  3. Pagpapadala ng data(TXD).
  4. Receiver Ready to Exchange (DTR).
  5. Lupa(GND).
  6. Source Ready to Exchange (DSR).
  7. Request to Send(RTS).
  8. Ready to Transfer (CTS).
  9. Signal ng tawag(RI).

RJ-45 hanggang DB-9 Serial Port Adapter Pin Impormasyon para sa Switch

Ang console port ay isang RS-232 serial interface na gumagamit ng RJ-45 connector para kumonekta sa isang control device gaya ng PC o laptop. Kung ang iyong laptop o PC ay walang DB-9 connector pin at gusto mong ikonekta ang iyong laptop o PC sa switch, gumamit ng kumbinasyon ng RJ-45 at DB-9 adapter.

DB-9RJ-45
Pagkuha ng Data2 3
Paglipat ng data3 6
Willingness na makipagpalitan4 7
Lupa5 5
Lupa5 4
Willingness na makipagpalitan6 2
Kahilingan sa paglipat7 8
Handa na ang paglipat8 1

Mga kulay ng wire:

1 Itim
2 Kayumanggi
3 Pula
4 Kahel
5 Dilaw
6 Berde
7 Asul
8 Gray (o puti)