Strana 1 z 2

Ovladanie RS232 v jazyku C

Napísané: 01 Jan 2014, 22:47
od používateľa retepko
Zdravím, chcel by som sa opýtať, či by ste nevedeli poradiť nejakú literatúru alebo odkazy na nejaký návod ako ovládať komunikačné rozhrania RS232 alebo USB pomocou jazyka c (na počítači v OS windows, nie v MCU).

Re: Ovladanie RS232 v jazyku C

Napísané: 01 Jan 2014, 22:49
od používateľa BFX
idealne v c# vyvojove prostredie mas zadarmo a navody tu v c++http://msdn.microsoft.com/en-us/library/ff802693.aspx alebo tu v c# http://msdn.microsoft.com/en-us/library ... .110).aspx alebo google do nemoty

Re: Ovladanie RS232 v jazyku C

Napísané: 01 Jan 2014, 22:55
od používateľa BFX

Re: Ovladanie RS232 v jazyku C

Napísané: 10 Jan 2014, 10:03
od používateľa Wulpo
z tohoto som sa učil ja:

Kód: Vybrať všetko

http://ap.urpi.fei.stuba.sk/ap/blok3.php

Re: Ovladanie RS232 v jazyku C

Napísané: 10 Jan 2014, 11:37
od používateľa Washu
Dovolim si rozsirit otazku trocha dalej. Poradte prosim podobne zaciatocnicke priklady pre TCP/IP komunikaciu.
Ako otvorit port TCP alebo UDB, odoslat data prijat data, zavriet port.

Re: Ovladanie RS232 v jazyku C

Napísané: 10 Jan 2014, 11:39
od používateľa daqq
jaromir: Prave na tom teraz robim: pre .NET velmi pekne a jednoducho funguje trieda TcpListener . Je k tomu viacero vysvetleni, jedno z nich : http://www.codeproject.com/Articles/241 ... cpListener

Re: Ovladanie RS232 v jazyku C

Napísané: 10 Jan 2014, 12:59
od používateľa jaromir
Mne to nehovor, Washu sa pytal :)

Re: Ovladanie RS232 v jazyku C

Napísané: 10 Jan 2014, 13:03
od používateľa daqq
:D sorry, neviem preco som si vas zmylil.

Re: Ovladanie RS232 v jazyku C

Napísané: 11 Jan 2014, 11:56
od používateľa Marekodzapadu
Temu vyuzijem aj ja :)...

na strane MCU mam spravenu komunikaciu v style ringbuffer. Posiela 3x8bitove cislo kde.
1)cislo - prefix
2)cislo 8bitova hodnota(uint8_t) <- uint16_t
3)cislo 8bitova hodnota(uint8_t) <- uint16_t

Kód: Vybrať všetko

uint16_t memory[xyz]
uint8_t prefix = 0x57;
...
if(uart_putchar(_prefix))
buffer = (uint8_t)(memory[loop]);
if(uart_putchar(buffer))
buffer = (uint8_t)(memory[loop] >> 8);
if(uart_putchar(buffer))
zistil som ze problemom je strana PC, kde pouzivam comPort v C#.
Nijakym normalnym sposobom sa mi nedari cez eventhander __DataReceived prijat a vhodne spracovat data, respektive dve osembitove cisla dat do 16bitovej premennej a vlozit do textboxu.

dat(8 bitovych premennych) bude prijatych 450...

Re: Ovladanie RS232 v jazyku C

Napísané: 11 Jan 2014, 13:04
od používateľa dxr
Jej konecne niekto co pouziva ring-circle buffer ;)
Ak mas problem presunut binarne data skus to skonvertit do 0xhexa a poslat mozno mas problem s chr(0)
NULL znakom v library ? na strane PC (napr prvy znak horny bude NULL cize za tym uz C libka nekuka konec stringu :)

Ja napr nepouzivam vobec binarne posielanie dat ale len Hexa (co je podstate 7bit) je to kvoli lahsiemu stavovemu stroju 0-az-F mas data
chr(S) start a chr(X) end chr(R) reset stroja
a takto to pekne beha akurat 2+2*pocet dat ale to kaslem pri 9600 aj tak nejdem rychlo


a Washu uz debuguje TCP ze ;)?

Re: Ovladanie RS232 v jazyku C

Napísané: 11 Jan 2014, 14:03
od používateľa Marekodzapadu
Chyba je viac-menej na strane PC (C#) , tu su prijate data z Realtherm

Kód: Vybrať všetko

87 153 5 87 238 5 87 240 5 87 240 5 87 238 5 87 234 5 87 236 5 87 232 5 87 231 5
 87 227 5 87 226 5 87 225 5 87 222 5 87 217 5 87 217 5 87 214 5 87 216 5 87 214 
5 87 214 5 87 214 5 87 214 5 87 214 5 87 209 5 87 209 5 87 211 5 87 207 5 87 214
 5 87 206 5 87 207 5 87 209 5 87 202 5 87 203 5 87 206 5 87 201 5 87 207 5 87 20
2 5 87 203 5 87 203 5 87 206 5 87 207 5 87 206 5 87 206 5 87 209 5 87 203 5 87 2
09 5 87 206 5 87 203 5 87 206 5 87 206 5 87 214 5 87 210 5 87 214 5 87 214 5 87 
214 5 87 217 5 87 218 5 87 222 5 87 224 5 87 226 5 87 226 5 87 233 5 87 235 5 87
 243 5 87 247 5 87 251 5 87 254 5 87 6 6 87 11 6 87 17 6 87 22 6 87 30 6 87 47 6
 87 46 6 87 49 6 87 57 6 87 67 6 87 73 6 87 78 6 87 86 6 87 90 6 87 98 6 87 106 
6 87 112 6 87 118 6 87 129 6 87 134 6 87 139 6 87 145 6 87 153 6 87 158 6 87 166
 6 87 174 6 87 179 6 87 185 6 87 192 6 87 198 6 87 207 6 87 211 6 87 219 6 87 22
4 6 87 231 6 87 236 6 87 244 6 87 251 6 87 3 7 87 19 7 87 18 7 87 25 7 87 32 7 8
7 36 7 87 47 7 87 56 7 87 63 7 87 71 7 87 76 7 87 87 7 87 178 5 87 230 5 87 222 
5 87 230 5 87 231 5 87 226 5 87 226 5 87 223 5 87 224 5 87 222 5 87 219 5 87 217
 5 87 215 5 87 214 5 87 214 5 87 214 5 87 214 5 87 208 5 87 209 5 87 208 5 87 20
9 5 87 208 5 87 207 5 87 198 5 87 207 5 87 206 5 87 206 5 87 203 5 87 203 5 87 2
02 5 87 199 5 87 194 5 87 201 5 87 201 5 
ku prikladu: 87 - prefix , 153 - prva hodnota, 5 - druha hodnota , vysledok ako uint16_t = 1433
atd, cisla vyjdu pekne, problem je ako to spracovat v C#, tam mam pocit ze to orezava, respektive

Kód: Vybrať všetko

"WW\"W)W1W7W>WCWJWQWYW^WgWnWwW~W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W\aW\b\aW\aW\aW\aW(\aW*\aW2\aW<\aWI\aWL\aWR\aW_\aWg\aWj\aWs\aW?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?"
ako string, po volani serialPort.ReadExisting() .

... skusim to prepisat do C++, a skontrolovat tam...

Re: Ovladanie RS232 v jazyku C

Napísané: 11 Jan 2014, 15:15
od používateľa dxr
povedal by som ze Unicode/UTF-8 encode? kazdy bajt co posles este encodtni na 16bit char tam asi bude pruser
zacni tym ze posles len nejaky presne definovany string a to skus odsledovat (respektive fixnu skupinu bajtov)

este dalsie moznosti problemu nemas rovnako nastaveny frame a speed na PC dostavas bordel
skusas to citat ako string a nie char zase dostanes bordel kvoli encodingu

mozno sa ti bude hodit DiscardNull ale asi toto bude problem

Re: Ovladanie RS232 v jazyku C

Napísané: 11 Jan 2014, 15:41
od používateľa Marekodzapadu
Komunikacia (baudrate je v pohode), chyba bola(?) v encoding so string na int, aspon myslim, teraz som to prepisal cez ReceiveByte, tak to funguje, len ten kod vyzera priserne :roll:. Poriesim to trocha inac, ak bude cas :)

Re: Ovladanie RS232 v jazyku C

Napísané: 11 Jan 2014, 16:34
od používateľa dxr
Ten C# alebo F# vyzera aj bez toho priserne ale co uz je to smer ktorym sa SW na PC vybera.
Aspon ze sa to vyriesilo :)

Re: Ovladanie RS232 v jazyku C

Napísané: 04 Feb 2014, 15:32
od používateľa Erik1989slepy
A neviete ešte niekde schému keď chcem pripojiť Relé na RS232 port ? že ktoré pini mám napojiť aby išiel program správne ? ? aj s programom Ďakujem

Re: Ovladanie RS232 v jazyku C

Napísané: 13 Okt 2014, 12:32
od používateľa eurobastler
Skus nieco taketo>


http://www.strippenstrolch.de/5-6-1-led ... ambas.html


Rele spinaj tranzistorom ako na scheme. Kedze si nenapisal napatie cievkz rele, nevieme presnu schemu, ani hodnoty suciastok...

Neviem ako je navrhnuty vystup serioveho portu, takze by som radsej pouzil optoclen pre galvanicke oddelenie.

Re: Ovladanie RS232 v jazyku C

Napísané: 25 Feb 2015, 21:15
od používateľa retepko
Caute.
Už si nepamätám kto mi to hovoril, ale na moju pôvodnú otázku či sa dá ovládať RS232 v C som dostal odpoveď že to šlo ale na starých WIN (XP a nižšie), že na novších už len jedine vyšší jazyk ako napr c++ a pod.

Dnes som po dlhom čase (po tej odpovedi som po tom už ani nepátral) našiel a dávam do pozornosti toto:
http://www.teuniz.net/RS-232/

Odskúšané na Win 8.1 v CodeBlocks a funguje perfektne aj cez Bluetooth. Odporúčam :)

Re: Ovladanie RS232 v jazyku C

Napísané: 25 Feb 2015, 21:18
od používateľa dxr
Seriovy port je pristupny v kazdom OS a z kazdeho programovacieho jazyka niekto bol mudry
ako rozladeny klavir..... alebo to niekdy v nicom inom nerobil. Rozdiely su v pristupe API alebo Direct.

Re: Ovladanie RS232 v jazyku C

Napísané: 08 Aug 2015, 07:53
od používateľa Dumitru
čaute mam také niečo nakodene v C ako "stopky" akurát že idú až do nanosekúnd neviem síce presnosť som ešte neskúmal to až neskor chcem ich spúšťať a zastavovať vonkajším vplyvom mimo Pc potom získavať nameraný časový úsek takže asi jedine pomocou RS-232 ma napadlo ale ak by som ich spúšťal tým že pošlem niečo cez TxD napríklad písmeno "a" v Pc sa to detekuje if("a") tak spusti stopky tak ono to bude asi dosť oneskorene kým sa tých 8 bitov odošle kým to Pc prijme a tak ďalej dá sa použivať nejaký iný signál v RS-232 na daný účel nech to reaguje okamžite ? Rozmýšľam nad CTS alebo RI ale neviem ktorý je lepši a pripadne dá sa sledovať RI signál v jazyku C vôbec ? :) alebo pripadne iný trik nato nech je to oneskorenie medzi príkazom start a stop a reakciou programu čo najmenšia :)

Re: Ovladanie RS232 v jazyku C

Napísané: 08 Aug 2015, 09:37
od používateľa peterple
Neviem neviem čí je to správna cesta. Myslím že akýkoľvek jednočip pripojený na sérivý port bude dávať presnejšie výsledky. Samozrejme že sa dá čítať stav hocijakého signálu takže v princípe je jedno či RI alebo CTS. Záleží od OS ako sa k tomu dostať. Problém je že dnešné OS nedovolia pracovať rovno s hw. Takže tam je ukryté nepredvídateľné oneskorenie. Keď napríklad vidím ako vo win7 terminál nestíha zobrazovať znaky pri kontinuálnej komunikácii by som sa bál že toto by mohlo ísť až do rádu sekund.

Ono je to tak že PC nereaguje na žiadny signál sériového portu okamžite. Sériový port sa síce dá priradiť k prerušeniu, ale to reaguje na príjem a vysielanie znakov, nie na komunikačné signály. Navyše to prerušenie teraz nenabehne hneď ale až sa zaplní FIFO prijímača, alebo nastane timeout (možno sa dá nastaviť na 0, toto neviem). Lenže toto všetko chce low level prístup k hw a ten naposledy bol vo win98.

Jediné ako tak podľa mňa použiteľné by bolo prerušenie na paralelnom porte. To by mohlo byť okamžité v ráde stoviek nanosekund. Ale kde teraz nájsť paralelný port a problém s prístupom k hw je stále.

Na presné meranie som PC nikdy nepoužil, vždy som išiel cestou externého MCU a odosielania výsledkov.