Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Serial pordist datastringi lugemine C# User Interface jaoks Windowsis märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
tiipla
HV vaatleja

liitunud: 17.12.2013




sõnum 17.12.2013 18:17:45 Serial pordist datastringi lugemine C# User Interface jaoks Windowsis vasta tsitaadiga

Kas siin liigub keegi kes oleks antud teemaga süvitsi kursis? Meie meeskonnal on programmikood olemas, mis loeb (USB emuleeritud) serial pordist küsimise peale stringi ning tegeleb selle edasise töötlemisega. Kahjuks jookseb see üsna tihti kokku väljastades eri kohtades veateated kuna string jääb kas lühikeseks või toimub reavahetus (UI aknas mis näitab väljaloetud stringi) keset stringi lugemist. Viga tekib enne kui andmed jõuavad nö. oma programmeeritud puhvrisse.

Kui keegi suudaks/sooviks antud küsimuses aidata viga/lahendust leida võiks võtta ühendust meilil tiit at adek.ee (ilma tühikuteta)
Huvi korral saan siia ka koodijupi kopida; ise ei ole progeja vaid projektijuht, seega vabandan võimalike ebatäpsuste pärast.
tagasi üles
vaata kasutaja infot saada privaatsõnum
Mnator
HV Guru

liitunud: 18.10.2007




sõnum 17.12.2013 18:51:21 vasta tsitaadiga

Tänapäeval on siiski veel ehtsa com pordiga arvuteid saada. Soovitan soojalt neid kasutada aga mitte usb-emulaatoriga jännata.

Ja töövahendusfoorum on allpool.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
tiipla
HV vaatleja

liitunud: 17.12.2013




sõnum 17.12.2013 19:06:36 vasta tsitaadiga

Vahet pole, töötab sisuliselt sama moodi nii emuleeritud kui ka otsese RS232 pordi korral. Asi peab stabiilselt toimima igal juhul
tagasi üles
vaata kasutaja infot saada privaatsõnum
Mnator
HV Guru

liitunud: 18.10.2007




sõnum 17.12.2013 19:30:40 vasta tsitaadiga

Kui muud nõksud enam ei aita, siis võta kiirus alla.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 17.12.2013 23:16:09 vasta tsitaadiga

Võibolla pole probleem üldse serial pordi spetsiifiline, stringi lugedes peab alati arvestama, et saad kätte mingi suvalise tükki mitte ridahaaval. Seda isegi siis, kui protokoll on selline, et saadetakse ainult üks rida ja enne vastuse saamist muud ei saadeta.
Vahel võib jama olla ka windowsi IO puhvritega, proovi need välja lülitada. Omal ajal C/C++-ga sai seda pordist lugemist ikka tehtud ja ei meenu küll, et sellega suuremat jama oleks olnud. Aga see oli muidugi peamiselt winXP ja vanemata windowsitega, võibolla on uuematel mingid iseärasused kuigi väga ei usu, et serial pordi osa kapitaalselt muutunud on.
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
Mnator
HV Guru

liitunud: 18.10.2007




sõnum 18.12.2013 09:13:18 vasta tsitaadiga

Kapitaalselt muutunud pole, kontrollerikivid on samad mis varem, on kasvanud tarkvaraline vahekiht ja sellevõrra mõnikord vigu raskem jälitada.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
tiipla
HV vaatleja

liitunud: 17.12.2013




sõnum 18.12.2013 10:51:51 vasta tsitaadiga

Aastate eest oli asi lahendatud delphis ja probleeme polnud; nüüd aga C#/Visual Studiole üle minnes on jamad tekkinud; ja ilmselt tõesti selles mainitud "tarkvaralises vahekihis" ja olekski vaja seal lähemalt tuhnida.
tagasi üles
vaata kasutaja infot saada privaatsõnum
Mnator
HV Guru

liitunud: 18.10.2007




sõnum 18.12.2013 11:17:53 vasta tsitaadiga

Teed katsetusteks vajadusel eraldi programmi ja ajad järge, et kus sul viga tekib.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
i8080
Kreisi kasutaja
i8080

liitunud: 15.03.2002



Autoriseeritud ID-kaardiga

sõnum 19.12.2013 00:23:28 vasta tsitaadiga

kui kasutad System.IO.Ports.Serialport siis sellega on mingi anomaalia minu arust.
aga ma ise pole sellesse lõpuni süvenenud, kuna minu puhul viskas kopa ette see, et 115000baud (umbes 14kilobaiti sekundis) püsiva andmevboo korral oli korraliku masina CPU load 11-30% ja Atom prose korral üle 50% ja sealjuures mingi 1-10% baite läks suvaliselt kaduma.
võib olla oli vigane näide mida kasutasin (erinevad masinad ja riistvara probleem ei saanud seega olla)
http://www.codeproject.com/Tips/361285/Serial-Port-Communication

samas seal nagu pole ise midagi paremaks muuta ka kuna

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

eventi peale peaks kõik data kohale tulema, aga mul oli alati mingid suvalised baidid vahelt puudu suvalisel ajahetkel.

ja siis ise kasutasin kunagist win32api näidet tty.c ja sellest tehtud dll ja unmanaged code wrap.
ja toimib 100% ja priose kasutus on suht 0% ka megabitise trafficu korral ja midagi ei lähe vahelt kaduma.
winapi tty.c mingi netist leitud variant on muidu selline
http://lynx.uio.no/jon/gnokii-0.3.3_pre5/win32/winserial.c
Kommentaarid: 169 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 151
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
tiipla
HV vaatleja

liitunud: 17.12.2013




sõnum 19.12.2013 14:09:22 vasta tsitaadiga

jah just seesama koodirida

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)


on ka meil koodis. Ma saan aru, et asendasid pordi lugemise mingi vana (1999 a ) lahendusega. Rumal küsimus aga kuidas see haakub muus osas C# võimalusi kasutava programmiga, töötab ka win7/8 all korralikult?
tagasi üles
vaata kasutaja infot saada privaatsõnum
Mnator
HV Guru

liitunud: 18.10.2007




sõnum 19.12.2013 14:17:53 vasta tsitaadiga

Haakub seni kuni kasutatavad teegid on toetatud/lubatute nimekirjas. 7 ja 8 puhul veel on.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
i8080
Kreisi kasutaja
i8080

liitunud: 15.03.2002



Autoriseeritud ID-kaardiga

sõnum 20.12.2013 14:16:58 vasta tsitaadiga

iseenesest COM port on nii vana asi, et winapi ei saa selle põhimõtet kunagi muuta. see oma lowlevel tasemel jääb nii nagu on ja on ikkagi
CreateFile, ReadFile, WriteFile põhine, nagu enamus sisend-väljund seadmete ja objektide pöördumisi.

aga ma ise jah mingi paar aastat tagasi, kui seda C# SerialPort proovisin ja ei viitsinud pikalt süveneda, kui lisaks nägin, et kohe alguses segased probleemid olid. ja kuna mul oli juba varasemast see tty.c näidisel põhinev kood C keeles probleemideta kasutusel olnud - siis enda jaoks sain probleemi lahendatud ja ma ei hakanud pikemalt süvenema ega aega raiskama.

muidu mingid lehed, mida võiks uurida ja ehk selgub ka tõde kui ehk mingeid property väärtuseid veel muuta proovida. on teatud kahtlus, et näiteks madala kiiruse korral võib tekkida timeout ja sellepärast jätab baidid vahele või siis suure kiirusega saab puhver (piiratud suurusega) täis ja lähevad jällegi baidid kaduma.

ise prooviksin muuta neid
SerialPort.ReadTimeout
SerialPort.ReceivedBytesThreshold

ja mõned lingid antud teema kohta
http://blogs.msdn.com/b/bclteam/archive/2006/10/10/top-5-serialport-tips-_5b00_kim-hamilton_5d00_.aspx
http://stackoverflow.com/questions/466474/how-do-i-use-datareceived-event-of-the-serialport-port-object-in-c
http://stackoverflow.com/questions/2844928/will-serialport-datareceived-event-trigger-repeatedly
Kommentaarid: 169 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 151
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
napoleon
Unknown virus
napoleon

liitunud: 08.12.2008



Autoriseeritud ID-kaardiga

sõnum 20.12.2013 14:17:56 vasta tsitaadiga

Kui C# sellega tõesti hakkama ei saa(vähetõenäoline, kuid mitte 100% välistatud), siis üks võimalik workaround oleks serial pordiga toimetamiseks C++-s DLL kirjutada ja selle funktsiooni C#-s välja kutsuda.
Kommentaarid: 77 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 60
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Serial pordist datastringi lugemine C# User Interface jaoks Windowsis
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.