უახლესი სტატიები
მთავარი / მიმოხილვები / COM პორტის აღწერა. რა არის COM პორტი. მოდემი და COM პორტი

COM პორტის აღწერა. რა არის COM პორტი. მოდემი და COM პორტი

ბოლო დროს მონაცემთა გადაცემის სერიული მეთოდი ანაცვლებს პარალელურს.
თქვენ არ გჭირდებათ შორს ეძებოთ მაგალითები: USB და SATA ავტობუსების გამოჩენა თავისთავად მეტყველებს.
მართლაც, პარალელური ავტობუსის მასშტაბირება ძნელია (გრძელი კაბელი, ავტობუსის მაღალი სიჩქარის სიჩქარე), გასაკვირი არ არის, რომ ტექნოლოგიები უკანა მხარეს პარალელურ ავტობუსებზე გადადის.

სერიული ინტერფეისები

დღეს, არსებობს უამრავი განსხვავებული სერიული მონაცემთა ინტერფეისი.
გარდა უკვე ნახსენები USB-ისა და SATA-სა, ასევე შეგვიძლია გავიხსენოთ მინიმუმ ორი ცნობილი RS-232 და MIDI სტანდარტები (aka GamePort).
ყველა მათგანს ერთი და იგივე აერთიანებს - თითოეული ბიტის ინფორმაციის სერიული გადაცემა, ანუ სერიული ინტერფეისი.
ასეთ ინტერფეისებს ბევრი უპირატესობა აქვს და მათგან ყველაზე მნიშვნელოვანია დამაკავშირებელი მავთულის მცირე რაოდენობა და, შესაბამისად, დაბალი ფასი.

მონაცემთა გადაცემა

სერიული კომუნიკაცია შეიძლება განხორციელდეს ორი გზით: ასინქრონული და სინქრონული.

მონაცემთა სინქრონული გადაცემა გულისხმობს მიმღების და გადამცემის მუშაობის სინქრონიზაციას გადაცემული სიგნალში საათის ინფორმაციის ჩართვის ან სპეციალური სინქრონიზაციის ხაზის გამოყენებით.
მიმღები და გადამცემი უნდა იყოს დაკავშირებული სპეციალური სინქრონიზაციის კაბელით, რომელიც უზრუნველყოფს მოწყობილობების მუშაობას იმავე სიხშირეზე.

ასინქრონული გადაცემა გულისხმობს სპეციალური ბიტების გამოყენებას, რომლებიც აღნიშნავენ მონაცემთა დასაწყისს და დასასრულს - დაწყების (ლოგიკური ნული) და გაჩერების (ლოგიკური ერთი) ბიტები.
ასევე შესაძლებელია სპეციალური პარიტეტის ბიტის გამოყენება, რომელიც განსაზღვრავს გადაცემული ერთეული ბიტების ლუწ ან კენტ რაოდენობას (მიღებული კონვენციის მიხედვით).
მიმღებ მხარეს ეს ბიტი ანალიზდება და თუ პარიტეტის ბიტი არ ემთხვევა ერთი ბიტების რაოდენობას, მაშინ მონაცემთა პაკეტი ხელახლა იგზავნება.

აღსანიშნავია, რომ ასეთი შემოწმება საშუალებას გაძლევთ აღმოაჩინოთ შეცდომა მხოლოდ იმ შემთხვევაში, თუ მხოლოდ ერთი ბიტი იყო არასწორად გადაცემული, თუ რამდენიმე ბიტი არასწორად იყო გადაცემული, ეს შემოწმება უკვე არასწორი ხდება.
შემდეგი მონაცემთა პაკეტის გაგზავნა შეიძლება მოხდეს ნებისმიერ დროს გაჩერების ბიტის გაგზავნის შემდეგ და, რა თქმა უნდა, უნდა დაიწყოს საწყისი ბიტით.
არაფერია გასაგები?

ისე, თუ ყველაფერი კომპიუტერული ტექნოლოგიებიუბრალო იყო, მაშინ ნებისმიერი დიასახლისი დიდი ხნის წინ გამოძერწავდა ახალ ოქმებს პელმენების პარალელურად ...
შევეცადოთ სხვაგვარად შევხედოთ პროცესს.
მონაცემები გადაიცემა პაკეტებში, დაახლოებით IP პაკეტების მსგავსად, ინფორმაციის ბიტები მიდიან მონაცემებთან ერთად, ამ ბიტების რაოდენობა შეიძლება განსხვავდებოდეს 2-დან 3-ნახევარამდე.
ნახევარით?!
დიახ, სწორად გაიგეთ, ნახევარით!

გაჩერების ბიტი, უფრო სწორად, გადაცემული სიგნალი, რომელიც შეესაბამება გაჩერების ბიტს, შეიძლება ჰქონდეს ერთი ბიტის შესაბამისი სიგნალის ხანგრძლივობა, მაგრამ ნაკლები ვიდრე ორი ბიტისთვის.
ასე რომ, პაკეტი ყოველთვის იწყება საწყისი ბიტით, რომელიც ყოველთვის არის ნული, რასაც მოჰყვება მონაცემთა ბიტები, შემდეგ პარიტეტის ბიტი და შემდეგ გაჩერების ბიტი, რომელიც ყოველთვის ერთია.
შემდეგ, გარკვეული თვითნებური პერიოდის შემდეგ, მოსკოვზე ცემათა მსვლელობა გრძელდება.

გადაცემის ეს მეთოდი გულისხმობს, რომ მიმღებმა და გადამცემმა უნდა იმუშაონ იმავე სიჩქარით (კარგად, ან თითქმის იგივე სიჩქარით), წინააღმდეგ შემთხვევაში მიმღებს ან არ ექნება დრო შემომავალი მონაცემთა ბიტების დასამუშავებლად, ან ძველი ბიტი აიღოს ახალზე. .
ამის თავიდან აცილების მიზნით, თითოეული ბიტი იგზავნება სტრობზე, ანუ ის სინქრონულად იგზავნება სპეციალური სიგნალით - მოწყობილობის შიგნით წარმოქმნილი "სტრობი".
არსებობს მთელი რიგი სპეციფიკური სიჩქარე ასინქრონული მოწყობილობებისთვის - 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 და 11520 ბიტი წამში.

ალბათ გსმენიათ, რომ "baud" გამოიყენება როგორც მონაცემთა გადაცემის სიჩქარის საზომი ერთეული - ხაზის მდგომარეობის შეცვლის სიხშირე და ეს მნიშვნელობა დაემთხვევა მონაცემთა გადაცემის სიჩქარეს მხოლოდ იმ შემთხვევაში, თუ სიგნალს შეიძლება ჰქონდეს ორი მნიშვნელობიდან ერთი. .
თუ რამდენიმე ბიტი დაშიფრულია ერთი სიგნალის ცვლილებაში (და ეს ასეა ბევრ მოდემში), გადაცემის სიჩქარე და ხაზის ცვლილების სიხშირე იქნება სრულიად განსხვავებული მნიშვნელობები.

ახლა რამდენიმე სიტყვა იდუმალი ტერმინის "მონაცემთა პაკეტის" შესახებ.
პაკეტის ქვეშ ამ საქმესეხება საწყისი და გაჩერების ბიტებს შორის გადაცემული ბიტების ერთობლიობას.
მათი რიცხვი შეიძლება განსხვავდებოდეს ხუთიდან რვამდე.
შეიძლება ვინმემ იფიქროს, რატომ ზუსტად ხუთიდან რვა ბიტი?
რატომ არ გადაიტანოთ ერთდროულად, ვთქვათ, კილობაიტი მონაცემები პაკეტში?

პასუხი აშკარაა: მცირე მონაცემთა პაკეტების გადაცემისას შეიძლება დავკარგოთ სამი სერვისის ბიტის გაგზავნით მათთან ერთად (მონაცემების 50-დან 30 პროცენტამდე), მაგრამ თუ პაკეტი დაზიანებულია გადაცემის დროს, ჩვენ შეგვიძლია ამის ამოცნობა მარტივად (გახსოვდეთ ამის შესახებ პარიტეტის ცოტა?) და სწრაფად გადასცეს მას ისევ.
მაგრამ მონაცემების კილობაიტში რთული იქნება შეცდომის გამოვლენა და გაცილებით რთული იქნება მისი გადაცემა.

ასინქრონული სერიული მონაცემთა გადაცემის მოწყობილობის მაგალითია კომპიუტერის COM პორტი, საყვარელი Trussardi-ის დიზაინის მოდემი და იმავე პორტთან დაკავშირებული მაუსი, რომელიც რატომღაც ვიწრო აზროვნების მდივნები ყოველთვის ცდილობენ PS / 2-ში შეყვანას.
ყველა ეს მოწყობილობა მუშაობს RS-232 ინტერფეისზე, უფრო სწორად მის ასინქრონულ ნაწილზე, რადგან სტანდარტი ასევე აღწერს მონაცემთა სინქრონულ გადაცემას.

AMD Radeon Software Adrenalin Edition დრაივერი 19.9.2 სურვილისამებრ

ახალი AMD Radeon Software Adrenalin Edition 19.9.2 არჩევითი დრაივერი აუმჯობესებს მუშაობას Borderlands 3-ში და ამატებს მხარდაჭერას Radeon Image Sharpening-ისთვის.

Კუმულატიური ვინდოუსის განახლება 10 1903 KB4515384 (დამატებულია)

2019 წლის 10 სექტემბერს, Microsoft-მა გამოუშვა Windows 10 ვერსიის 1903-ე ვერსიის კუმულაციური განახლება - KB4515384 რიგი უსაფრთხოების გაუმჯობესებით და შეცდომის გამოსწორებით, რომელიც გატეხილია. Windows მუშაობსძიება და გამოიწვია CPU-ს მაღალი გამოყენება.

COM პორტი ყველაზე ხშირად გამოიყენება მიკროკონტროლერის კომპიუტერთან დასაკავშირებლად. ამ სტატიაში ჩვენ გაჩვენებთ, თუ როგორ უნდა გაგზავნოთ საკონტროლო ბრძანებები კომპიუტერიდან და გაგზავნოთ მონაცემები კონტროლერიდან.

სამუშაოსთვის მომზადება

მიკროკონტროლერების უმეტესობას აქვს მრავალი I/O პორტი. UART პროტოკოლი ყველაზე შესაფერისია კომპიუტერთან კომუნიკაციისთვის. ეს არის სერიული ასინქრონული მონაცემთა გადაცემის პროტოკოლი. USB ინტერფეისად გადასაყვანად დაფას აქვს USB-RS232 გადამყვანი - FT232RL.
ამ სტატიის მაგალითების გასაშვებად მხოლოდ Arduino-თან თავსებადი დაფა გჭირდებათ. Ჩვენ ვიყენებთ . დარწმუნდით, რომ თქვენს დაფას აქვს LED 13-ზე დაკავშირებული და გადატვირთვის ღილაკი.

მაგალითად, ავტვირთოთ კოდი დაფაზე, რომელიც აჩვენებს ASCII ცხრილს. ASCII არის კოდირება ათობითი ციფრების, ლათინური და ეროვნული ანბანების, პუნქტუაციის ნიშნებისა და საკონტროლო სიმბოლოების გამოსაჩენად.

int სიმბოლო = 33; void setup() ( Serial. begin(9600 ) ; Serial. println(" ASCII Table ~ Character Map" ) ; ) void loop() (Serial. write(symbol) ; Serial. print(" , dec: ") ; Serial .ბეჭდვა(სიმბოლო) ; სერიული ბეჭდვა(" , თექვსმეტი: " ) ; სერიული ბეჭდვა(სიმბოლო, HEX) ; სერიული ბეჭდვა(" , ოქტ: " ) ; სერიული ბეჭდვა(სიმბოლო, ოქტ.) ; სერიული.ბეჭდვა( " , bin: " ) ; Serial.println(symbol, BIN) ; if (symbol == 126 ) ( while (true) (გაგრძელება ; ) ) სიმბოლო+ + ; )

სიმბოლოს ცვლადი ინახავს სიმბოლოს კოდს. ცხრილი იწყება 33-დან და მთავრდება 126-ზე, ამიტომ სიმბოლო თავდაპირველად დაყენებულია 33-ზე.
UART პორტის მუშაობის დასაწყებად გამოიყენეთ ფუნქცია Serial.begin(). მისი ერთადერთი პარამეტრი სიჩქარეა. სიჩქარე წინასწარ უნდა იყოს შეთანხმებული გადამცემ და მიმღებ მხარეებზე, რადგან გადაცემის პროტოკოლი ასინქრონულია. ამ მაგალითში სიჩქარე არის 9600bps.
პორტში მნიშვნელობის ჩასაწერად გამოიყენება სამი ფუნქცია:

  1. Serial.write()– წერს მონაცემებს პორტში ორობითი ფორმით.
  2. Serial.print()შეიძლება ჰქონდეს მრავალი ღირებულება, მაგრამ ყველა მათგანი ემსახურება ინფორმაციის ჩვენებას ადამიანისთვის ხელსაყრელი ფორმით. მაგალითად, თუ გადასაცემი პარამეტრის სახით მითითებული ინფორმაცია ბრჭყალებშია ჩასმული, ტერმინალის პროგრამა აჩვენებს მას უცვლელად. თუ გსურთ რაიმე მნიშვნელობის ჩვენება გარკვეული სისტემაკალკულუსი, შემდეგ თქვენ უნდა დაამატოთ სერვისის სიტყვა: BIN-ორობითი, OCT - რვატული, DEC - ათობითი, HEX - თექვსმეტობითი. Მაგალითად, Serial.print (25, HEX).
  3. Serial.println()აკეთებს იგივეს, რაც Serial.print(), მაგრამ მაინც თარგმნის სტრიქონს ინფორმაციის ჩვენების შემდეგ.

პროგრამის მუშაობის შესამოწმებლად აუცილებელია კომპიუტერს ჰქონდეს ტერმინალური პროგრამა, რომელიც იღებს მონაცემებს COM პორტიდან. AT Arduino IDEუკვე ჩაშენებული. მის დასაძახებლად მენიუდან აირჩიეთ Tools->Port Monitor. ამ პროგრამის ფანჯარა ძალიან მარტივია:

ახლა დააჭირეთ გადატვირთვის ღილაკს. MK გადაიტვირთება და აჩვენებს ASCII ცხრილს:

ყურადღება მიაქციეთ კოდის ამ ნაწილს:

თუ (სიმბოლო = = 126) (ხოლო (ჭეშმარიტი) (გაგრძელება ;))

ის აჩერებს პროგრამის შესრულებას. თუ გამორიცხავთ, ცხრილი გამოჩნდება განუსაზღვრელი ვადით.
შეძენილი ცოდნის გასამყარებლად, სცადეთ დაწეროთ უსასრულო მარყუჟი, რომელიც წამში ერთხელ გამოგიგზავნით თქვენს სახელს სერიულ პორტში. დაამატეთ ნაბიჯების ნომრები გამოსავალში და არ დაგავიწყდეთ თარგმნოთ სტრიქონი სახელის შემდეგ.

ბრძანებების გაგზავნა კომპიუტერიდან

სანამ ამას გააკეთებთ, თქვენ უნდა გქონდეთ წარმოდგენა იმაზე, თუ როგორ მუშაობს COM პორტი.
უპირველეს ყოვლისა, ყველა გაცვლა ხდება მეხსიერების ბუფერის მეშვეობით. ანუ, როდესაც თქვენ აგზავნით რაიმეს კომპიუტერიდან მოწყობილობაზე, მონაცემები მოთავსებულია მეხსიერების სპეციალურ განყოფილებაში. როგორც კი მოწყობილობა მზად არის, ის კითხულობს მონაცემებს ბუფერიდან. ფუნქცია საშუალებას გაძლევთ შეამოწმოთ ბუფერის მდგომარეობა serial.avaliable(). ეს ფუნქცია აბრუნებს ბაიტების რაოდენობას ბუფერში. ამ ბაიტების გამოკლებისთვის, თქვენ უნდა გამოიყენოთ ფუნქცია Serial.read(). ვნახოთ, როგორ მუშაობს ეს ფუნქციები მაგალითით:

int val = 0; void setup() ( Serial. begin(9600 ) ; ) void loop() ( if (Serial. available() > 0 ) ( val = Serial. read() ; Serial. print(" I მივიღე: " ) ; Serial. Write(val) ; Serial.println() ;) )

მას შემდეგ, რაც კოდი ჩაიტვირთება მიკროკონტროლერის მეხსიერებაში, გახსენით COM პორტის მონიტორი. ჩაწერეთ ერთი სიმბოლო და დააჭირეთ Enter. მიღებული მონაცემების ველში ნახავთ: "მე მივიღე: X", სადაც ნაცვლად Xიქნება პერსონაჟი, რომელიც შეიტანეთ.
პროგრამა ტრიალებს განუსაზღვრელი ვადით მთავარ ციკლში. იმ მომენტში, როდესაც ბაიტი იწერება პორტში, Serial.available() ფუნქცია იღებს 1 მნიშვნელობას, ანუ პირობა შესრულებულია. Serial.available() > 0. შემდეგი ფუნქცია Serial.read()კითხულობს ამ ბაიტს, რითაც ასუფთავებს ბუფერს. ამის შემდეგ, თქვენთვის უკვე ცნობილი ფუნქციების გამოყენებით, გამომავალი ხდება.
Arduino IDE-ის ჩაშენებული COM პორტის მონიტორის გამოყენებას აქვს გარკვეული შეზღუდვები. დაფიდან მონაცემების COM პორტში გაგზავნისას, გამომავალი შეიძლება ორგანიზებული იყოს თვითნებურ ფორმატში. ხოლო კომპიუტერიდან დაფაზე გაგზავნისას, სიმბოლოების გადატანა ხდება ASCII ცხრილის შესაბამისად. ეს ნიშნავს, რომ როდესაც თქვენ შეიყვანთ, მაგალითად, სიმბოლო "1", ორობითი "00110001" (ანუ ათწილადში "49") იგზავნება COM პორტის საშუალებით.
მოდით ცოტა შევცვალოთ კოდი და შევამოწმოთ ეს განცხადება:

int val = 0; void setup() ( Serial. begin(9600 ) ; ) void loop() ( if (Serial. available() > 0 ) ( val = Serial. read() ; Serial. print(" I მივიღე: " ) ; Serial. println(val, BIN) ;))

ჩამოტვირთვის შემდეგ, პორტის მონიტორში "1"-ის გაგზავნისას, პასუხად ნახავთ: "მივიღე: 110001". თქვენ შეგიძლიათ შეცვალოთ გამომავალი ფორმატი და ნახოთ რას იღებს დაფა სხვა სიმბოლოებით.

მოწყობილობის კონტროლი COM პორტის საშუალებით

ცხადია, კომპიუტერის ბრძანებით, შეგიძლიათ აკონტროლოთ მიკროკონტროლერის ნებისმიერი ფუნქცია. ჩამოტვირთეთ პროგრამა სამუშაოს მართვა LED:

int val = 0; void setup() (Serial. Begin(9600) ;) void loop() (if (Serial. available() > 0) (val = Serial. read() ; if (val= = "H") digitalWrite(13, HIGH) ; if (val= = "L" ) ციფრული ჩაწერა (13 , LOW) ; ) )

როდესაც "H" სიმბოლო იგზავნება COM პორტში, LED მე-13 გამომავალზე ანათებს, ხოლო როდესაც "L" გაიგზავნება, LED ჩაქრება.
თუ COM პორტიდან მონაცემების მიღების შედეგებზე დაყრდნობით გსურთ, რომ პროგრამამ შეასრულოს სხვადასხვა მოქმედებები მთავარ მარყუჟში, შეგიძლიათ შეამოწმოთ პირობები მთავარ მარყუჟში. Მაგალითად.

COM პორტი, ან სერიული პორტი, არის ორმხრივი სერიული ინტერფეისი, რომელიც შექმნილია ბაიტის მონაცემების გაცვლისთვის. თავდაპირველად, ეს პორტი გამოიყენებოდა ტერმინალის დასაკავშირებლად, შემდეგ კი მოდემისთვის და მაუსისთვის. ახლა ჩვეულებრივია მისი გამოყენება როგორც წყაროს დასაკავშირებლად, ასევე ჩაშენებული გამოთვლითი სისტემების დამუშავებასთან კომუნიკაციისთვის.

გამოყენება

ასე რომ, სანამ უფრო დეტალურად ვისაუბრებთ იმაზე, თუ რა არის COM პორტი, უნდა ჩავიხედოთ წარსულში, რომ გავიგოთ მისი მნიშვნელობა. ფაქტიურად 15 წლის წინ გამოიყენეს მეთოდი მოწყობილობების კომპიუტერთან დასაკავშირებლად უკანა პანელზე მდებარე სპეციალური სტანდარტული კონექტორის გამოყენებით. სისტემის ბლოკისპეციალური RS-232 სერიული კაბელის გამოყენებით. ამ მეთოდს ბევრი უარყოფითი მხარე აქვს. ასეთი კაბელი, თანამედროვე სტანდარტებით, უზრუნველყოფს მონაცემთა გადაცემის უკიდურესად დაბალ სიჩქარეს - დაახლოებით ასი კილობიტი წამში. გარდა იმისა, რომ კონექტორების ფიზიკური კავშირი გაკეთდა, საჭირო იყო აღჭურვილობის გამორთვა და ისინი თავად იყვნენ მიმაგრებული ერთმანეთთან ხრახნებით, რომლებიც უზრუნველყოფდნენ საიმედოობას, ხოლო მათი ზომები განსხვავდებოდა მნიშვნელოვანი ზომით.

ცოტა ისტორია

იმდროინდელი კომპიუტერების COM პორტი ტრადიციულად დანომრილი იყო 1 ან 2, რადგან ჩვეულებრივ არ იყო ორზე მეტი. საჭიროების შემთხვევაში შეიძლება დამონტაჟდეს დამატებითი პორტები. როდესაც მომხმარებელმა კონფიგურაცია მოახდინა პროგრამული უზრუნველყოფა, საჭირო იყო არ აგვერიოს და სწორად დააინსტალიროთ ზუსტად ის, რომლითაც კავშირი იყო უზრუნველყოფილი საჭირო აღჭურვილობა. თითოეული COM პორტი საჭიროებდა სიჩქარის სწორ პარამეტრებს, ისევე როგორც სხვა იდუმალ პარამეტრებს, რომლებიც მხოლოდ სპეციალისტების ვიწრო წრისთვის იყო ცნობილი. იმისათვის, რომ აღჭურვილობის დაკავშირება წარმატებული ყოფილიყო, ყველა საჭირო პარამეტრი სადღაც უნდა გაერკვია ან ექსპერიმენტულად შერჩეულიყო, რადგან ამ შემთხვევაში არ იყო ავტომატური კონფიგურაცია. გარდა ამისა, COM პორტის საშუალებით დაკავშირებამ დაუშვა ნებისმიერი პროგრამული უზრუნველყოფის დაკავშირება თვითნებური გარე აღჭურვილობით, თუნდაც სრულიად შეუთავსებელი, რამაც გამოიწვია დიდი რაოდენობით შეცდომები პარამეტრების პროცესში.

თანამედროვეობა

ახლა COM პორტის მეშვეობით კავშირი მთლიანად ჩანაცვლებულია მეტით თანამედროვე მეთოდი, რომელიც არ საჭიროებს სპეციალურ ცოდნას განსახორციელებლად, კერძოდ USB პორტის საშუალებით. ეს მეთოდი მოკლებულია ყველა იმ მინუსს, რომელიც ზემოთ აღინიშნა. ამასთან, ყველა სახის GPS აღჭურვილობისა და ძალიან ჰეტეროგენული პროგრამული უზრუნველყოფის დამაკავშირებელი თანამედროვე სტანდარტები საკმაოდ დიდი ხნის წინ ჩამოყალიბდა COM პორტების კონცეფციის გარშემო, რომლებიც ამ დროისთვის არქაული გახდა.

ეს გამოწვეულია იმით, რომ თავდაპირველად თითქმის ნებისმიერი მოწყობილობა, მათ შორის GPS, იყო გარე და მისი დაკავშირება კომპიუტერთან ხდებოდა სერიული კაბელის საშუალებით, რომელიც დაკავშირებული იყო აპარატურის ერთ-ერთ პორტთან. კონფიგურაციის პროცესის დროს მომხმარებელს მოეთხოვებოდა სწორად შეარჩიოს პორტის ნომერი და მისი მეშვეობით მონაცემთა გადაცემის სიჩქარე. ამ დროს გაჩნდა GPS მიმღებიდან პროგრამაზე მონაცემების გადაცემის მთავარი სტანდარტი, რომელსაც ახლა NMEA-0183 ეწოდება. სინამდვილეში, ეს სტანდარტი მოითხოვს ყველა დეველოპერს, თუნდაც ყველაზე თანამედროვე ტექნიკისა და პროგრამული უზრუნველყოფის, მონაცემთა გაცვლას COM პორტების საშუალებით. და ეს ყველაფერი იმ პირობებში თანამედროვე კომპიუტერები, ისევე როგორც PDA-ებზე, USB სტანდარტი დიდი ხანია მთავარია. და კიდევ ერთი მახასიათებელი ის არის, რომ ბოლო დროს GPS მიმღებები სულ უფრო და უფრო მონტაჟდება მოწყობილობის კორპუსის შიგნით, ანუ არ არის დამაკავშირებელი კაბელი მასსა და მთავარ მოწყობილობას შორის.

ვირტუალური COM პორტები

გამოიგონეს გამოსავალი, კერძოდ, შეიქმნა "ვირტუალური" COM პორტები. გამოდის, რომ PDA-ს შიდა მოწყობილობა, მაგალითად, GPS მიმღები, სიმულირებულია პროგრამულ უზრუნველყოფაში COM პორტის სახით, ხოლო ტექნიკის თვალსაზრისით ასეთი არ არის. ამავდროულად, პროგრამა, რომელიც შექმნილია ისეთი სტანდარტის ინტერფეისისთვის, არ აქვს მნიშვნელობა როგორ განხორციელდება იგი. აქ ნებადართულია ვირტუალური სიმულაციის არსებობა და არა ტექნიკის დანერგვის სავალდებულო არსებობა. ასე რომ შესაძლებელია ძველი სტილის GPS პროგრამების თანამედროვე აღჭურვილობასთან თავსებადობის უზრუნველყოფა.

ცვლილებები განხორციელდა

ამავდროულად, COM პორტის მენეჯმენტი მნიშვნელოვნად არ შეცვლილა. მომხმარებელმა, ძველი წესით, უნდა გააკეთოს რთული პარამეტრები თითქმის ხელით. ამასთან, თანამედროვე COM პორტი აღარ არის ის დიდი მოწყობილობა, რომელიც მდებარეობს სისტემის განყოფილების უკანა პანელზე, არამედ სრულიად განსხვავებული მოწყობილობა. და აქ მთელი საქმე იმაში მდგომარეობს, რომ პროგრამული უზრუნველყოფის თვალსაზრისით, მათი ყველა განხორციელება უსახურად გამოიყურება, ანუ ვირტუალურ და რეალურ პორტებს შორის განსხვავება არ არის. პროგრამული უზრუნველყოფისთვის, პორტები განსხვავდება მხოლოდ PDA მწარმოებლების მიერ მათთვის მინიჭებული ნომრებით სრულიად შემთხვევით საფუძველზე. მაგალითად, ASUS მიმღები ჩვეულებრივ მდებარეობს COM5-ზე, ხოლო PocketLOOX 560 აჩვენებს მიმღებს COM8-ზე. გამოდის, რომ პროგრამას, რომელსაც სურს მიიღოს მონაცემები GPS მიმღებიდან, თავდაპირველად არ აქვს რაიმე სანდო ინფორმაცია პირობითი ნომრის შესახებ, რომლის ქვეშაც ჩნდება პორტი, რომელიც მითითებულია მიმღებისთვის ამ PDA-ზე.

როგორ მუშაობს ეს ყველაფერი?

იმის გათვალისწინებით, რომ ყველა ხელმისაწვდომ COM პორტს შორის, შეგიძლიათ ავტომატური ძებნაშესაფერისი, ასეთი გამოკითხვის პროცედურა საკმაოდ არასანდო და საკმაოდ რთულია. ეს გამოწვეულია იმით, რომ სისტემაში ნაჩვენები მოწყობილობები, როგორც COM პორტები, შეიძლება იყოს საკმაოდ მრავალფეროვანი და საერთო არაფერი აქვთ GPS-თან, მათ შეუძლიათ სრულიად არაპროგნოზირებადი პასუხის გაცემა ასეთ გამოკითხვაზე. მაგალითად, PDA-ზე არის პორტები, რომლებიც დაკავშირებულია შიდა ფიჭურ მოდემთან, USB-თან, ინფრაწითელ პორტთან, ასევე სხვა ელემენტებთან. კონკრეტულ მოწყობილობასთან მუშაობისთვის შექმნილი პროგრამით მათზე წვდომამ შეიძლება გამოიწვიოს სრულიად არაპროგნოზირებადი რეაქცია, ასევე სხვადასხვა გაუმართაობა, რაც ხშირად იწვევს PDA-ს გაყინვას. სწორედ ამიტომ, COM პორტის გახსნის მცდელობამ შეიძლება გამოიწვიოს მოულოდნელი სიტუაციები, ბლუთუზის ჩართვამდე ან და შეიძლება იყოს უფრო გაუგებარი შემთხვევები.

COM პორტის ოპერაცია

COM პორტებისთვის, ასინქრონული უნივერსალური გადამცემის ჩიპი გამოიყენება როგორც საფუძველი. ეს მიკროსქემა არსებობს რამდენიმე სახეობაში: Intel 16550A, 16550, 16450, 8250. თითოეული COM პორტისთვის ის შეიცავს მონაცემთა მიმღების და გადამცემის რეგისტრებს, ასევე საკონტროლო რეგისტრებს, რომლებზეც წვდომა შესაძლებელია BIOS, Windows და MS DOS პროგრამების საშუალებით. ზე უახლესი ვერსიებიმიკროჩიპს აქვს ბუფერების ნაკრები გადაცემული და მიღებული მონაცემების დროებით შესანახად. ამ შესაძლებლობის წყალობით, შესაძლებელია ცენტრალური პროცესორის მუშაობის შეწყვეტა ნაკლებად ხშირად, ასევე მონაცემთა გადაცემის სიჩქარის კოორდინაცია.

ძირითადი პარამეტრები

COM პორტის მოწყობილობას აქვს შემდეგი დამახასიათებელი მახასიათებლები:

პორტის საბაზისო მისამართი ინფორმაციის შეყვანისა და გამოტანისთვის;

ტექნიკის შეფერხების ნომრები;

ინფორმაციის ერთი ბლოკის ზომა;

მონაცემთა გადაცემის სიჩქარე;

პატიოსნების გამოვლენის რეჟიმი;

ინფორმაციის ნაკადის მართვის მეთოდი;

გაჩერების ბიტების რაოდენობა.

როგორ შევამოწმოთ კომპიუტერის COM პორტი? რას მივაქციოთ ყურადღება?

როგორც უკვე აღვნიშნეთ, ამ ტიპის პორტი არის ორმხრივი ინტერფეისი ბიტის დონის სერიული გზისთვის. გამორჩეული მახასიათებელი აქ პარალელურ პორტთან შედარებით არის მონაცემთა გადაცემა ბიტ-ბიტზე. COM პორტის ანატომია ისეთია, რომ ის არ არის ერთადერთი კომპიუტერზე, რომელიც იყენებს სერიული მონაცემთა გადაცემის მეთოდს. მაგალითად, ინტერფეისები, როგორიცაა Ethernet ან USB, ასევე იყენებენ მსგავს პრინციპს, მაგრამ ასე მოხდა ისტორიულად, რომ ჩვეულებრივად არის RS232 სტანდარტული სერიების პორტის გამოძახება.

ძალიან ხშირად საჭიროა COM პორტის გახსნა კომპიუტერის შეკეთებისა და დიაგნოსტიკისთვის, ამასთან, ასევე საჭიროა მისი ფუნქციონირების შემოწმება. ელემენტის დაწვა ძალიან მარტივია. ყველაზე ხშირად ეს ხდება მომხმარებლის შეცდომის გამო, რომელიც არასწორად წყვეტს მოწყობილობას, ამოიღებს კონექტორს ინტერფეისის მიერთებისას. უმარტივესი გზა იმის შესამოწმებლად, მუშაობს თუ არა ინტერფეისი, არის მასზე მაუსის დაკავშირება. თუმცა, ძალიან რთულია სრული სურათის მიღება, რადგან მანიპულატორი რვა ხელმისაწვდომი სიგნალის მხოლოდ ნახევარს იყენებს. მხოლოდ სპეციალური დანამატისა და პროგრამის გამოყენება იძლევა მუშაობის შემოწმების საშუალებას. ამ მიზნებისათვის უკვე არსებობს სპეციალურად შემუშავებული პროგრამული უზრუნველყოფა.

სერიული პორტები დეველოპერებს უყვართ მოვლისა და გამოყენების სიმარტივის გამო.

და რა თქმა უნდა, ტერმინალის პროგრამის კონსოლზე ჩაწერა კარგია, მაგრამ მე მინდა ჩემი აპლიკაცია, რომელიც ეკრანზე კლავიშის დაჭერით ასრულებს თქვენთვის საჭირო მოქმედებებს;)

ამ სტატიაში მე აღვწერ როგორ ვიმუშაოთ com პორტი C++-ში.

გამოსავალი მარტივია, მაგრამ რატომღაც სამუშაო მაგალითი დაუყოვნებლივ ვერ მოიძებნა. სიმისთვის აქ ვინახავ.

რა თქმა უნდა, შეგიძლიათ გამოიყენოთ კროს-პლატფორმული გადაწყვეტილებები, როგორიცაა QSerial - ბიბლიოთეკა Qt-ში, ალბათ, მაგრამ მომავალში. ახლა ჩვენ ვსაუბრობთ "სუფთა" Windows-ზე C++. ჩვენ დავწერთ Visual Studio-ში. მე მაქვს 2010 წელი, თუმცა ეს არანაირ როლს არ თამაშობს ...

შექმენით ახალი კონსოლის Win32 პროექტი.

ჩართეთ სათაურის ფაილები:

#შეიცავს #შეიცავს namespace std-ის გამოყენებით;

ჩვენ ვაცხადებთ com პორტის დამმუშავებელს:

HANDLE hSerial;

მე ამას გლობალურად ვაკეთებ, ასე რომ ფუნქციებზე გადაცემისას მაჩვენებლებზე ფიქრი არ მომიწევს.

int _tmain(int argc, _TCHAR* argv) (

ვერ ვიტან ვინდოუსის პროგრამირების სტილს. ყველაფერს თავისებურად უწოდეს და გახარებული სხედან...

ახლა პორტის სახელით სტრიქონის გამოცხადების მაგიაა. საქმე იმაშია, რომ მას არ შეუძლია საკუთარი თავის გარდაქმნა.

LPCTSTR sPortName = L"COM1";

Windows-ში სერიულ პორტებთან მუშაობა მუშაობს როგორც ფაილთან. პირველის გახსნა com პორტი წერისთვის/კითხვისთვის:

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

ფუნქციონირების შემოწმება:

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

ახლა თქვენ უნდა დააკონფიგურიროთ კავშირის პარამეტრები:

DCB dcbSerialParams = (0); dcbSerialParams.DCBlength=sizeof(dcbSerialParams); if (!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"; }

msdn-ზე მიზანშეწონილია ჯერ მიიღოთ პარამეტრები და შემდეგ შეცვალოთ ისინი. ჩვენ ჯერ კიდევ ვსწავლობთ, ამიტომ ვაკეთებთ, როგორც გვთხოვენ.

ახლა გამოვაცხადოთ სტრიქონი, რომელსაც გადავცემთ და ამისათვის საჭირო ცვლადები:

Char data = "გამარჯობა C++-დან"; // სტრიქონი გადასასვლელად DWORD dwSize = sizeof(data); // ამ სტრიქონის ზომა DWORD dwBytesWritten; // აქ იქნება რეალურად გადაცემული ბაიტების რაოდენობა

სტრიქონის გაგზავნა. შეგახსენებთ, რომ მაგალითი ყველაზე მარტივია, ამიტომ მე არ ვაკეთებ რაიმე განსაკუთრებულ შემოწმებას:

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

მე ასევე გადავწყვიტე გამომეჩინა სტრიქონის ზომა და გასაკონტროლებლად გაგზავნილი ბაიტების რაოდენობა:

კოუტ<< dwSize << " Bytes in string. " << dwBytesWritten << " Bytes sended. " << endl;

პროგრამის დასასრულს ვაკეთებთ მონაცემების წაკითხვის უსასრულო ციკლს:

while(1) ( ReadCOM(); ) return 0; )

ახლა წაკითხვის ფუნქცია:

გააუქმეთ ReadCOM() ( DWORD iSize; char sReceivedChar; ხოლო (true) (ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0); // მიიღეთ 1 ბაიტი, თუ (iSize > 0) // ამობეჭდოთ, თუ რამე მიიღება<< sReceivedChar; } }

ეს არის რეალურად მთელი მაგალითი.

გამოთვლებში სერიული პორტი არის სერიული საკომუნიკაციო ინტერფეისი, რომლის მეშვეობითაც ხდება ინფორმაციის გადაცემა ან გამომავალი დრო. პერსონალური კომპიუტერების ისტორიის უმეტესი პერიოდის განმავლობაში, მონაცემები გადადიოდა სერიული პორტების საშუალებით მოწყობილობებზე, როგორიცაა მოდემები, ტერმინალები და სხვადასხვა პერიფერიული მოწყობილობები.

მიუხედავად იმისა, რომ ისეთი ინტერფეისები, როგორიცაა Ethernet, FireWire და USB, ყველა აგზავნის მონაცემებს სერიული ნაკადის სახით, ტერმინი "სერიული პორტი" ზოგადად განსაზღვრავს აპარატურას, რომელიც მეტ-ნაკლებად შეესაბამება RS-232 სტანდარტს, რომელიც შექმნილია მოდემთან ან მსგავს საკომუნიკაციო მოწყობილობასთან ინტერფეისისთვის.

თანამედროვე კომპიუტერებს სერიული პორტების გარეშე შეიძლება დასჭირდეთ სერიული გადამყვანები RS-232 სერიულ მოწყობილობებთან თავსებადობის უზრუნველსაყოფად. სერიული პორტები კვლავ გამოიყენება ისეთ აპლიკაციებში, როგორიცაა სამრეწველო ავტომატიზაციის სისტემები, სამეცნიერო ინსტრუმენტები, გაყიდვების წერტილები და ზოგიერთი სამრეწველო და სამომხმარებლო პროდუქტი. სერვერულ კომპიუტერებს შეუძლიათ გამოიყენონ სერიული პორტი, როგორც მართვის ან დიაგნოსტიკური კონსოლი. ქსელური აღჭურვილობა (როგორიცაა მარშრუტიზატორები და კონცენტრატორები) ხშირად იყენებენ სერიულ კონსოლს კონფიგურაციისთვის. სერიული პორტები კვლავაც გამოიყენება ამ სფეროებში, რადგან ისინი მარტივი, იაფია და მათი კონსოლის ფუნქციონირება უაღრესად სტანდარტიზებული და ფართოდ გავრცელებულია.

COM პორტის პინი (RS232)

არსებობს 2 ტიპის com პორტი, 25-პინიანი ძველი კონექტორი და უფრო ახალი 9-პინიანი, რომელმაც შეცვალა იგი.

ქვემოთ მოცემულია ტიპიური სტანდარტული 9-პინიანი RS232 კონექტორის დიაგრამა კონექტორებით, ამ ტიპის კონექტორს ასევე უწოდებენ DB9 კონექტორს.

  1. Carrier Detect (DCD).
  2. მონაცემების მიღება (RXD).
  3. მონაცემთა გადაცემა (TXD).
  4. მიმღები მზადაა გაცვლისთვის (DTR).
  5. მიწა (GND).
  6. წყარო მზადაა გაცვლისთვის (DSR).
  7. გაგზავნის მოთხოვნა (RTS).
  8. მზადაა გადასატანად (CTS).
  9. ზარის სიგნალი (RI).

RJ-45 to DB-9 სერიული პორტის ადაპტერის პინის ინფორმაცია გადამრთველისთვის

კონსოლის პორტი არის RS-232 სერიული ინტერფეისი, რომელიც იყენებს RJ-45 კონექტორს საკონტროლო მოწყობილობასთან დასაკავშირებლად, როგორიცაა კომპიუტერი ან ლეპტოპი. თუ თქვენს ლეპტოპს ან კომპიუტერს არ აქვს DB-9 კონექტორის პინი და გსურთ ლეპტოპის ან კომპიუტერის გადამრთველთან დაკავშირება, გამოიყენეთ RJ-45 და DB-9 ადაპტერის კომბინაცია.

DB-9RJ-45
მონაცემთა მიღება2 3
მონაცემთა გადაცემა3 6
გაცვლის სურვილი4 7
დედამიწა5 5
დედამიწა5 4
გაცვლის სურვილი6 2
გადარიცხვის მოთხოვნა7 8
ტრანსფერი მზადაა8 1

მავთულის ფერები:

1 შავი
2 ყავისფერი
3 წითელი
4 ფორთოხალი
5 ყვითელი
6 მწვანე
7 ლურჯი
8 ნაცრისფერი (ან თეთრი)