Ovladani serioveho portu ve Visual C++

Ing. Vladimír Anděl vaelektronik
Středa Březen 17 12:03:09 CET 2004


Jen obecnou poznamku. V takovychto aplikacich je zvykem (aspon u nas)
pouzivat casovy dohled a to jak na strane pocitace, tak i na strane
jednocipu. Neresi to sice podstatu problemu (ten by mel byt vyresen pouzitim
adekvatnich algoritmu), ale je to pojistka pro vsechny pripady. Pokud
komunikace po stanovenou dobu nepokracuje,  kasle se na ni a dotycny pocitac
se zase za chvili ozve. Pokud by na rozsahle siti kazdym rusenim melo nekde
neco zaseknout, bylo by to na masli.

Andel


> nevim co vidite na visual c zavadneho, ja osobne se domnivam, ze jde o
> vubec nejlepsi kompilator pro platformu windows, a to jak co se tyce
> ovladatelnosti, tak kompatibility se samotnymi windows. co se tyce
> vaseho problemu:
> seriak se vetsinou - pokud potrebujete jenom prenosy dat ovlada tak, ze
> si otevrete
> jako OPEN_EXISTING pipe s nazvem COM1-x (prikaz createfile), potom
> pomoci getdcb, modifikace dat a setdcb (popripade pomoci buildcommdcb si
> strukturu sestavite) a pak se k tomu chovate uplne stejne jako k
> souboru, tj. writefile zapisuje data na port, readfile je cte. lze
> nastavit setcommtimeouts pro nastaveni timeoutu. pokud potrebujete
> prijimat data asynchronne, lze to take pouzit pomoci posledniho
> parametru k read/write file kterym se k asynchronnim operacim
> pristupuje. pomoci nektereho z event prikazu lze nastavit frontu zprav
> tak, aby pri napr. zmene RTS/CTS signalu posilala do fronty zprav EVENT
> command. vsechno se deje pres API, nikoliv pres ten OCX (ktery byl
> mimochodem v puvodni verzi vs napsan pro visual basic a nikoliv visual
> c, tudiz se ocekavalo _velmi zakladni_ pouziti). jeste poznamka:
> problemy nastavaji v techto prikazech s pouzitim fifo, ktera  zpusobi
> to, ze vy ty hlasky (v pripade cteni) a zapisy realizujete se zpozdenim
> a to dokud nemate naplnene fifo. z tohoto duvodu mrkvosoft doporucuje (~
> doporuceni neni na 2 cd msdn, ale najdete jej nekde na
> msdn.microsoft.com) fifo vypinat pri prenosu kratkych datovych zprav.
>
> -- to jsou asi tak me zkusenosti.
> -- abych predesel flamewar: nemam rad microsoft, jako svuj hlavni
> operacni system pouzivam mandrake linux (v. 8.0), nicmene clovek se musi
> ridit pranim zakaznika a tak kdyz potrebujete naprogramovat neco pro
> _obycejneho_ uzivatele, tak se bohuzel prozatim musite smirit s tim, ze
> pod W$ programovat proste budete :). co se tyce mrkvosoftu: existuji
> snad pouze 2 dobre aplikace co kdy vyrobili: internet explorer (pocinaje
> verzi 4:) a visual studio (pocinaje verzi 4)
>
> -- jeste me ted napadlo: pri ukonceni programu: zavirate ten port? v
> okamziku kdy jej neuzavrete a program je ukoncen mohou vzniknout
> problemy
>
> -- v pripade zajmu se ozvete na soukr. mail, mohu poslat draft zdrojaku
> ve kterem je ukazka jednoduche implementace seriaku
>
> d.
>
>
> zoodiskus@mbox.vol.cz wrote:
> >
> > Uz me ten Mrkvosoft vazne se.. !!
> >
> > Pisu sw, ktery z modulu osazenych AT89C2051 pres RS-485 cte data.
> > Zadny velky zazrak, v podstate jde o to z PC poslat na seriovy port
balik dat (10-bytu) na ktery odpovi
> > osloveny modul. Ovladani smeru komunikace po RS-485 je pres RTS a
kontrolu spravnosti dat zajistuje CRC16.
> >
> > V podstate mi to chodi, ale nikoliv bez problemu.
> >
> > Pro ovladani portu jsem pouzil MSCOMM32.ocx a zde jsem narazil na prvni
zadrhel. Ackoliv mam kompletni dokumentace k
> > Visual Studiu (2ks CD) o pouziti MSCOMM v C++ se zde taktne mlci a tak
jsem byl nucen postupovat metodou pokus omyl a
> > vyznam jednotlivych funkci dedukovat z jejich nazvu.
> >
> > Kupodivu to chodi k plne spokojenosti a to az do okamziku kdy program
vypnu. Pri druhem spusteni programu jiz pripojeny modul
> > nereaguje a pomuze pouze jeho reset.
> >
> > Napadlo me, ze pri zavreni portu dojde na portu k stavu, ktery AT89C2051
vyhodnoti jako pokus o komunikaci (komunikace v aT89C2051 je rizena
prerusenim)
> > a program v Atmelu mi zatuhne. Rozumejsi vysvetleni me nenapadlo.
> >
> > Pro sledovani komunikace na protu jsem pouzil program Portmon a v tom
okamziku vse ustalo a komunikace funguje skvele bez ohledu na to kolikrat
ridici sw
> > na PC vypnu a zapnu.
> >
> > Cele to bezi pod Windows 2000 a chova se to stejne i pokud vyhodim
prevodniky na RS485 a komunikuji primo pomoci RS-235. Pokud mam zapnuty
portmon je vse OK.
> > A ted babo rad, respektive:
> >
> > 1. Nevite kde sehnat nejakou pouzitelno dokumentaci pro pouziti MSComm
ve VisualC++ ?
> > 2. Nevite o nejakem jim vhodmejsim zpusobu ovladani protu v VisualC++ ?
> > 3. Nesetkal jste se nekdo s podobnym problemem, pripadne nemate napad
cim by to mohl byt ?
> > 4. Nevite o programu pro sledovani komunikace na portech pro Win2000 ?
Neco jako je Portmon, ktery mi naprosto vyhovuje,
> >    ale PC po jeho pouziti nelze uspat a pomuze pouze znovunajeti systemu
a to mi vadi.
> >
> > Predem dekuji.






Další informace o konferenci Hw-list