serial ports, c++
9 отговора
287 прегледа
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
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).
Re: serial ports, c++
аз имам същия въпрос, при мен няма ограничение да не ползвам MFC
мерси и аз
мерси и аз
прави се все едно е файл
отваря се със CreateFile, като името е com1 ili com2
след това може да ползваш WaitCommEvent, но аз директно чета. дори съм забелязал че понякога WaitCommEvent прави проблем
след това може да ползваш WaitCommEvent, но аз директно чета. дори съм забелязал че понякога WaitCommEvent прави проблем
Re: serial ports, c++
Ами: CreateFile, WriteFile, ReadFile....
Тия функции имат OVERLAPPED параметър. Ако е NULL, то тези функции при извикването си блокират и не връщат управлението, докато не свършат работата, за която си ги извикал (напр. да прати 100 байта, да приеме 50 байта). На скорост 9600 скоростта на комуникация е приблизително 1 байт/милисекунда.
С ClearCommError пък може да получиш колко байта има приети вече във буфера на драйвера на серийния порт. И след това с ReadFile може да ги изтеглиш от този буфер. В MSDN-a има хубав пример/примери със OVERLAPPED/non OVERLAPPED начини на работа - и source.
Тия функции имат OVERLAPPED параметър. Ако е NULL, то тези функции при извикването си блокират и не връщат управлението, докато не свършат работата, за която си ги извикал (напр. да прати 100 байта, да приеме 50 байта). На скорост 9600 скоростта на комуникация е приблизително 1 байт/милисекунда.
С ClearCommError пък може да получиш колко байта има приети вече във буфера на драйвера на серийния порт. И след това с ReadFile може да ги изтеглиш от този буфер. В MSDN-a има хубав пример/примери със OVERLAPPED/non OVERLAPPED начини на работа - и source.
Re: serial ports, c++
Погледни темата "RS 232 Как да запиша информацията" малко по-надолу, точно преди 2-3 седмици я разисквахме. 
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Re: serial ports, c++
не оспорвам решението, сигурно работи, НО
струва ми се, откриване на колелото - някъде съм мяркал ( мисля безплатна ) библиотека дето прави тия работи. даже май имаха овърлоаднати оператори <<
не знам къде съм я гледал обаче - гугъл ис йоур френд
ein heller Schein am Firmament
струва ми се, откриване на колелото - някъде съм мяркал ( мисля безплатна ) библиотека дето прави тия работи. даже май имаха овърлоаднати оператори <<
не знам къде съм я гледал обаче - гугъл ис йоур френд
ein heller Schein am Firmament
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...
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...
Re: dopulnenie za "serial ports, c++"
хм ,нали знаеш че серийния протокол единиците и нулите мърдат. но има два пина, които можеш да си ползваш като изходи - DTR и RTS. можеш да го направиш със EscapeCommFunction
Re: dopulnenie za "serial ports, c++"
Ами СОМ-портовете работят по RS-232, може би трябва да прегледаш документацията за стандарта. Иначе сигналът върви май само по два крака - 2 и 3. Ако имаш осцилоскоп можеш да хванеш точно сигнала като единици и нули.
Но за delay-а на командата до нейното изпълнение ми се струва, че е малко трудно да се говори под Windows. Не съм напълно сигурен де, ама все пак RS-232 е стандарт за несинхронно предаване на данни, така че не разчитай много на времена.
Успех!
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Но за delay-а на командата до нейното изпълнение ми се струва, че е малко трудно да се говори под Windows. Не съм напълно сигурен де, ама все пак RS-232 е стандарт за несинхронно предаване на данни, така че не разчитай много на времена.
Успех!
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Re: dopulnenie za "serial ports, c++"
Абе сега ми хрумва, че има вариант да се ползва все пак data-линията за 1 и 0:
Сигналът е нормално 1, а всеки "пакет" битове започва със стартов бит 0. Има обаче една функция на UART, която се казваше "break line" или нещо подобно. Тя установяваше линията за данни в 0, или по тайм или до прекъсване. Хм. Абе може и да беше за съответен брой "пакети". Вече не помня.
Както и да е де, ползвал съм го - работи. Това обаче е на доста ниско ниво, не знам дали на човека ще му се занимава.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.
Сигналът е нормално 1, а всеки "пакет" битове започва със стартов бит 0. Има обаче една функция на UART, която се казваше "break line" или нещо подобно. Тя установяваше линията за данни в 0, или по тайм или до прекъсване. Хм. Абе може и да беше за съответен брой "пакети". Вече не помня.
Както и да е де, ползвал съм го - работи. Това обаче е на доста ниско ниво, не знам дали на човека ще му се занимава.
Мечтата е мисъл, мисълта е идея, всяка идея се реализира. Аз не мечтая, а реализирам идеите си.