serial ports, c++

9 отговора 287 прегледа
#1

serial ports, c++

zdraveite,
kakvo bihte mi preporuchali da izpolzvam za da moga da komunikiram sus seriinite portove kato izpolzvam samo standartnata biblioteka na c++ (sredata e VS6, mfc ne mi se polzva).
mersi predvaritelno

Отговор
в отговор на Potrebitel #2

Re: serial ports, c++

аз имам същия въпрос, при мен няма ограничение да не ползвам MFC

мерси и аз

Отговор
в отговор на Potrebitel #3

прави се все едно е файл

отваря се със CreateFile, като името е com1 ili com2
след това може да ползваш WaitCommEvent, но аз директно чета. дори съм забелязал че понякога WaitCommEvent прави проблем

Отговор
в отговор на Potrebitel #4

Re: serial ports, c++

Ами: CreateFile, WriteFile, ReadFile....
Тия функции имат OVERLAPPED параметър. Ако е NULL, то тези функции при извикването си блокират и не връщат управлението, докато не свършат работата, за която си ги извикал (напр. да прати 100 байта, да приеме 50 байта). На скорост 9600 скоростта на комуникация е приблизително 1 байт/милисекунда.
С ClearCommError пък може да получиш колко байта има приети вече във буфера на драйвера на серийния порт. И след това с ReadFile може да ги изтеглиш от този буфер. В MSDN-a има хубав пример/примери със OVERLAPPED/non OVERLAPPED начини на работа - и source.

Отговор
в отговор на Potrebitel #5

Re: serial ports, c++

Погледни темата "RS 232 Как да запиша информацията" малко по-надолу, точно преди 2-3 седмици я разисквахме.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на Zelen #6

Re: serial ports, c++

не оспорвам решението, сигурно работи, НО

струва ми се, откриване на колелото - някъде съм мяркал ( мисля безплатна ) библиотека дето прави тия работи. даже май имаха овърлоаднати оператори <<

не знам къде съм я гледал обаче - гугъл ис йоур френд

ein heller Schein am Firmament
Отговор
в отговор на Duncan Griffin #7

dopulnenie za "serial ports, c++"

za da sum po-tochen govoria za neshto ot sorta: primerno na tozi i na tozi pin iskam 1, apuk na tui i ounui krache 0...
dokato tursih kak da go pravia razbrah, che vsushtnost mogat da se polzvat vhodno izhodni potoci nasocheni kum com1, com2 i t.n. primerno strstream ili stream_withassign (ili kakto beshe tam), no nemoga da razbera v koi moment kakvo tochno izliza na izhoda na port-a kude nula kude edenica i vsushtnost kakvo predstavliava delay-a mejdu komandata i realnoto i izpulnenie...

Отговор
в отговор на Potrebitel #8

Re: dopulnenie za "serial ports, c++"

хм ,нали знаеш че серийния протокол единиците и нулите мърдат. но има два пина, които можеш да си ползваш като изходи - DTR и RTS. можеш да го направиш със EscapeCommFunction

Отговор
в отговор на Potrebitel #9

Re: dopulnenie za "serial ports, c++"

Ами СОМ-портовете работят по RS-232, може би трябва да прегледаш документацията за стандарта. Иначе сигналът върви май само по два крака - 2 и 3. Ако имаш осцилоскоп можеш да хванеш точно сигнала като единици и нули.

Но за delay-а на командата до нейното изпълнение ми се струва, че е малко трудно да се говори под Windows. Не съм напълно сигурен де, ама все пак RS-232 е стандарт за несинхронно предаване на данни, така че не разчитай много на времена.

Успех!

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор
в отговор на zaphod #10

Re: dopulnenie za "serial ports, c++"

Абе сега ми хрумва, че има вариант да се ползва все пак data-линията за 1 и 0:

Сигналът е нормално 1, а всеки "пакет" битове започва със стартов бит 0. Има обаче една функция на UART, която се казваше "break line" или нещо подобно. Тя установяваше линията за данни в 0, или по тайм или до прекъсване. Хм. Абе може и да беше за съответен брой "пакети". Вече не помня.

Както и да е де, ползвал съм го - работи. Това обаче е на доста ниско ниво, не знам дали на човека ще му се занимава.

Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Отговор