Ovladanie RS232 v jazyku C

C,C++,C#

Moderátori: psichac, Moderátori

retepko
Stály člen
Stály člen
Príspevky: 126
Dátum registrácie: 31 Mar 2012, 12:12
Bydlisko: Spišská Nová Ves
Vek: 28

Ovladanie RS232 v jazyku C

Príspevok od používateľa retepko » 01 Jan 2014, 22:47

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).
0

Používateľov profilový obrázok
BFX
Ultimate člen
Ultimate člen
Príspevky: 2506
Dátum registrácie: 04 Sep 2013, 19:41
Bydlisko: Košice
Vek: 50

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa BFX » 01 Jan 2014, 22:49

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
0
“Nice looking” circuit construction doesn't always equate to good circuit performance.
http://www.arrl.org/files/file/Product% ... pter_1.pdf
Na predaj: p-bfx-predava-kto-zavaha-prerobi-t41148.html

Používateľov profilový obrázok
BFX
Ultimate člen
Ultimate člen
Príspevky: 2506
Dátum registrácie: 04 Sep 2013, 19:41
Bydlisko: Košice
Vek: 50

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa BFX » 01 Jan 2014, 22:55

0
“Nice looking” circuit construction doesn't always equate to good circuit performance.
http://www.arrl.org/files/file/Product% ... pter_1.pdf
Na predaj: p-bfx-predava-kto-zavaha-prerobi-t41148.html

Wulpo

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa Wulpo » 10 Jan 2014, 10:03

z tohoto som sa učil ja:

Kód: Vybrať všetko

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

Používateľov profilový obrázok
Washu
Power user
Power user
Príspevky: 4521
Dátum registrácie: 15 Apr 2010, 00:00
Bydlisko: Multiverse
Vek: -1998
Kontaktovať používateľa:

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa Washu » 10 Jan 2014, 11:37

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.
0
It doesn't matter how beautiful your theory is, it doesn't matter how smart you are. If it doesn't agree with experiment, it's wrong
(Richard Feynman)

Používateľov profilový obrázok
daqq
Power user
Power user
Príspevky: 2528
Dátum registrácie: 10 Jún 2008, 00:00
Bydlisko: Bratislava
Vek: 36
Kontaktovať používateľa:

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa daqq » 10 Jan 2014, 11:39

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
0
Outsource your thinking: Get religious!
Zistenie: Ked robite sucasne v C, C++, C#, Matlabe, trocha pokukujete po VHDL, sialenstvo nemoze byt daleko...este stastie, ze som lietadlo a nemam tieto problemy.

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa jaromir » 10 Jan 2014, 12:59

Mne to nehovor, Washu sa pytal :)
0

Používateľov profilový obrázok
daqq
Power user
Power user
Príspevky: 2528
Dátum registrácie: 10 Jún 2008, 00:00
Bydlisko: Bratislava
Vek: 36
Kontaktovať používateľa:

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa daqq » 10 Jan 2014, 13:03

:D sorry, neviem preco som si vas zmylil.
0
Outsource your thinking: Get religious!
Zistenie: Ked robite sucasne v C, C++, C#, Matlabe, trocha pokukujete po VHDL, sialenstvo nemoze byt daleko...este stastie, ze som lietadlo a nemam tieto problemy.

Marekodzapadu
Stály člen
Stály člen
Príspevky: 175
Dátum registrácie: 25 Apr 2010, 00:00
Vek: 12

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa Marekodzapadu » 11 Jan 2014, 11:56

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...
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa dxr » 11 Jan 2014, 13:04

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 ;)?
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

Marekodzapadu
Stály člen
Stály člen
Príspevky: 175
Dátum registrácie: 25 Apr 2010, 00:00
Vek: 12

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa Marekodzapadu » 11 Jan 2014, 14:03

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...
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa dxr » 11 Jan 2014, 15:15

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
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

Marekodzapadu
Stály člen
Stály člen
Príspevky: 175
Dátum registrácie: 25 Apr 2010, 00:00
Vek: 12

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa Marekodzapadu » 11 Jan 2014, 15:41

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 :)
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa dxr » 11 Jan 2014, 16:34

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 :)
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

Erik1989slepy
Nový člen
Nový člen
Príspevky: 58
Dátum registrácie: 25 Aug 2012, 12:51
Bydlisko: Košice
Vek: 27

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa Erik1989slepy » 04 Feb 2014, 15:32

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
0

Používateľov profilový obrázok
eurobastler
Ultimate člen
Ultimate člen
Príspevky: 3903
Dátum registrácie: 19 Apr 2009, 00:00
Bydlisko: BA
Vek: 35

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa eurobastler » 13 Okt 2014, 12:32

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.
0
Obrázok

retepko
Stály člen
Stály člen
Príspevky: 126
Dátum registrácie: 31 Mar 2012, 12:12
Bydlisko: Spišská Nová Ves
Vek: 28

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa retepko » 25 Feb 2015, 21:15

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 :)
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa dxr » 25 Feb 2015, 21:18

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.
0
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

Dumitru
Stály člen
Stály člen
Príspevky: 374
Dátum registrácie: 06 Nov 2011, 22:19
Vek: 32

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa Dumitru » 08 Aug 2015, 07:53

č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 :)
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Ovladanie RS232 v jazyku C

Príspevok od používateľa peterple » 08 Aug 2015, 09:37

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.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok