WinAPI - nastavení COM portu - odřádkování – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

WinAPI - nastavení COM portu - odřádkování – C / C++ – Fórum – Programujte.comWinAPI - nastavení COM portu - odřádkování – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
yaqwsx+9
Posthunter
16. 8. 2012   #1
-
0
-

Potřebuji komunikovat s jedním zařízením pomocí COM portu. Když s ním komunikuji pomocí hyperterminálů, tak komunikace funguje pouze, když zaškrtnu "Odesílat znaky konce řádku s kódem odřádkování". Předpokládám, že jde o nahrazení konce řádku znaky CR a LF. Když jsem tuto funkci explicitně naprogramoval v mém programu (odesílaný soubor načítám po znacích a při přečtení znaku '\n' vložím do bufferu 0xD a 0xA. Komunikace však i přesto nefunguje...

Existuje nějaké nastavení, jak vynutit toto chování přímo pomocí WinAPI (tzn. asi tak, jak to dělá hyperteminal)?  Protože to je jediné, co mě napadá jako problém...

Předem děkuji za odpověď (i když jsem uvedl relativně málo informací...)

Nahlásit jako SPAM
IP: 85.160.41.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Reklama
Reklama
TheOndrap+2
Super člen
16. 8. 2012   #2
-
0
-

jako hledal sem na netu asi 30 min ( ty asi taky:)) ) a nic sem nenašel. A možná si i myslím,že hyperterminál na to nic nepoužívá, prostě tam sype ty znaky za tebe, jako to děláš ty.

Pokud jde sledovat "obsazený" COM port, tak bych zkusil kouknout co se přenáši z hyperterminálu a co se přenáší z tvého programu.

Kouknu na to ještě dál, ale když sem to samý dělal v Javě na diplomku, tak sem s tim problémy neměl

Nahlásit jako SPAM
IP: 213.129.138.–
ZČU v Plzni je mnohem víc, než jenom právnická fakulta !!
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
liborb
~ Redaktor
+18
Guru
17. 8. 2012   #3
-
0
-

Přesně tak, děláš to správně. Jediné jestli to pořadí je dobře. No a na pokud nejedeš na 64bit, tak můžeš použít Port Monitor (z balíku SysInternals jako je Debug View nebo Spy++) a tam uvidíš všecho - data, příkazy ...

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.211.–
hlucheucho+10
Posthunter
17. 8. 2012   #4
-
0
-

podívej se do manuálu zařízení na popis komunikačního protokolu. Ze zkušenosti s různými zařízeními vím, že rámec nejčastěji končí znakem CR, na LF nebo kombinaci CR LF jsem narazil jen u multimetru Keithley v jeho nastavení

u některých protokolů se používají i jiné bílé znaky např. 0x03 na začátku rámce (tuším u Compo Way).

je dobré mít virtual serial port emulator, umožňuje "rozbočit" COM v PC a tak snadno sledovat dění na portu pomocí běžných nástrojů např. terminal.exe

doporučuji si nechat vypisovat hex hodnoty všeho co na portu chodí

s jakým zařízením pracuješ? možná ho budu znát.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
TheOndrap+2
Super člen
17. 8. 2012   #5
-
0
-

Myslím si že manuál mu moc nepomůže, protože jak psal, když přepne hyperterminal na "send line end feeds" tak to funguje.

Hypertermiál je na win, win ukončuje řádek CR LF a funguje to, takže pochybuju že by hyperterimál znal komunikační protokoly nějakých zařízení.

Jak říkám, kouknul bych na nějaký port monitor a zjistil co tam vlastně teče.

Nahlásit jako SPAM
IP: 213.129.141.–
ZČU v Plzni je mnohem víc, než jenom právnická fakulta !!
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
hlucheucho+10
Posthunter
17. 8. 2012   #6
-
-1
-
Mimo téma

Než bádat nad tím, co tam hyperterminal posílá, je lepší vědět, co se tam má poslat. A to je v manuálu.
Může propojit kabelem COMy na PC a na druhém COMu přes terminal.exe se podívat, co hyperterminal posílá.

Pro práci s COM porty je dobré použít TserialEvent nebo SynaSer. S prvním mám dobré zkušenosti, použití je jednoduché. Výhodou je, že práci se studiem WinAPI funkcí, jak co nastavit... udělal někdo jiný :).

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
17. 8. 2012   #7
-
0
-

Ještě jedna možnost proč u tvojí aplikace komunikace nechodí: pokud posíláš několik příkazů po sobě, další příkaz lze poslat až po obdržení odpovědi periferie a/nebo určité době klidu.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
yaqwsx+9
Posthunter
17. 8. 2012   #8
-
0
-

Děkuji všem za odpovědi, ale dnes jsem se na to znovu mrkla ukázalo se "rádno moudřejší večera". Vysvětlím na konci.

#4 hlucheucho
Pracuji s obráběcím centrem Okuma OSP-E100M. Jde o posílání obráběcího programu, tudíž to nejsou separátní příkazy, ale blok data. Ono manuál je pěkné slovo, ale měl jsem tu čest již s několika stroji a co se týče komunikace, tak jsou manuály na velice špatné úrovni (mám pocit že i záměrně - politika výrobců). Např. v tomto konkrétním případě chyběly 2 podstatné věci - nikde nebylo uvedeno, že je nutné poslat hlavičku programu (a už vůbec ne v jakém tvaru má být) a také ačkoliv data se data posílají v 8bitovém bytu + paritní a stop bity, tak v těch osmi bitech je datových bitů 7 a ten jeden je znovu paritní.

Včera jsem udělal ukvapené závěry. Neudělal jsem si "statisticky významnou sérii pokusů" - okamžitě jsem z jednoho vyvozoval závěr. Protože mi to přes hyperterminal napoprvé neodešlo, přidal jsem odřádkování a data se odeslala. Tak jsem automaticky upravil mou aplikaci a data nešla poslat. Dnes jsem však zkoušel znovu a dospěl jsem k závěru, že to, zda-li se data odešlou je zcela náhodné - tzn. problém není v mé aplikaci, ale pravděpodobně někde v HW. Proměřím ještě kabel osciloskopem, zda-li se na něm neindukuje nějaké rušení/není někde zlomený apod.

Děkuji za odpovědi.

Nahlásit jako SPAM
IP: 85.160.50.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
TheOndrap+2
Super člen
17. 8. 2012   #9
-
0
-

#8 yaqwsx
To zní rozumně :)

Nahlásit jako SPAM
IP: 213.129.141.–
ZČU v Plzni je mnohem víc, než jenom právnická fakulta !!
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
hlucheucho+10
Posthunter
17. 8. 2012   #10
-
0
-

#8 yaqwsx
Když jsme u těch kabelů: jednou jsem se vybabral se zapojením regulátoru na COM. Dříve stačilo zapojit RxD, TxD a GND. Když jsem to chtěl použít na PC Lenovo (novější asi o 2 roky než můj "testovací stroj") a nebo přes převodník USB/COM, chodilo to nahodile. Po dlouhém bádání jsem zjistil, že kabel na straně PC musí být zapojen jako null modem (zapojovali se tuším CTS a RTS, schéma najdeš na internetu).

7 datových bitů, 8 a 9 parita.... pěkná prasárna.

Zkušenosti s kvalitou manuálů mám různé. Někteří výrobci poskytují velmi podrobné informace, jiní je úzkostlivě tají.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 81 hostů

Podobná vlákna

Odřádkování bloku MSVS — založil Kenvelo

Seznam portů — založil Martin Beseda

Příjem z COM portu — založil radar.sm

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý