seriovy port
seriovy port
Zdravim, mam mensi problem. Potrebujem citat cez seriovy port z mcu nejake data a mam to spravene nasledovne:
pri inicializacii serioveho portu mam:
serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
a pre prijem a vypis mam funkcie:
private void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string sprava = serial.ReadExisting();
vypis(sprava);
}
private void vypis(string vypis)
{
richTextBox2.Text = vypis;
}
Následne po spusteni aplikacie a inicializacii mi VS vypise hlasku pri richTextBox2.Text = vypis;
"Operace mezi podprocesy není platná: Přístup k ovládacímu prvku richTextBox2 proběhl z jiného podprocesu než z podprocesu, v rámci kterého byl vytvořen."
Neviete niekto poradit kde by mohol byt problem???
pri inicializacii serioveho portu mam:
serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
a pre prijem a vypis mam funkcie:
private void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string sprava = serial.ReadExisting();
vypis(sprava);
}
private void vypis(string vypis)
{
richTextBox2.Text = vypis;
}
Následne po spusteni aplikacie a inicializacii mi VS vypise hlasku pri richTextBox2.Text = vypis;
"Operace mezi podprocesy není platná: Přístup k ovládacímu prvku richTextBox2 proběhl z jiného podprocesu než z podprocesu, v rámci kterého byl vytvořen."
Neviete niekto poradit kde by mohol byt problem???
-
refr0
Star
- Príspevky: 521
- Registrovaný: 26 nov 2005, 10:55
- Bydlisko: Trenčín
- Kontaktovať používateľa:
Re: seriovy port
Nemozes pristupovat z jedneho vlakna (DataReceived) krizom do vlakna GUI. Je to z bezp. dovodov zablokovane.
Re: seriovy port
A ako mam teraz tie prijate data zapisať tam kam potrebujem?
-
refr0
Star
- Príspevky: 521
- Registrovaný: 26 nov 2005, 10:55
- Bydlisko: Trenčín
- Kontaktovať používateľa:
Re: seriovy port
No mozes napr vyuzit delegata a funckiu Invoke.
Priklad impl.:
serial_DataReceived:
vypis:
vypisDelegate:
Pisem to z hlavy tak hadam to bude fungovat 
Priklad impl.:
serial_DataReceived:
Kód: Vybrať všetko
private void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string sprava = serial.ReadExisting();
vypis(sprava);
}
Kód: Vybrať všetko
private void vypis(string value)
{
// Pokial sa vola metoda z ineho vlakna
if (InvokeRequired)
{
Invoke(new vypisDelegate(vypis), value);
}
else
{
richTextBox2.Text = value;
}
}
Kód: Vybrať všetko
delegate void vypisDelegate(string value);
Re: seriovy port
refr0: paraaada funguje to. dakujem
A ešte k tomuto dotaz. Môže sa stať, že sa mi pri takomto spôsobe nejake dáta stratia? Že ich nestihnem prečítať, prípadne že prečítam neúplné slovo , alebo niečo podobné?
A ešte k tomuto dotaz. Môže sa stať, že sa mi pri takomto spôsobe nejake dáta stratia? Že ich nestihnem prečítať, prípadne že prečítam neúplné slovo , alebo niečo podobné?
-
axxis
Addict
- Príspevky: 3690
- Registrovaný: 29 máj 2007, 21:53
- Bydlisko: Spálené mlyny
- Kontaktovať používateľa:
Re: seriovy port
stat sa to samozrejme moze, vzdy ked robis citania ci z portov, socketov alebo stremov tak ich po praci zatvaraj. tym zaistis, ze vsetko bude tak ako ma byt.pokrivnik napísal:refr0: paraaada funguje to. dakujem![]()
A ešte k tomuto dotaz. Môže sa stať, že sa mi pri takomto spôsobe nejake dáta stratia? Že ich nestihnem prečítať, prípadne že prečítam neúplné slovo , alebo niečo podobné?
(idealne to zatvaranie rob v bloku finally chytania vynimky, tak si zaistis konzistenciu za vsetkych okolnosti)
-
refr0
Star
- Príspevky: 521
- Registrovaný: 26 nov 2005, 10:55
- Bydlisko: Trenčín
- Kontaktovať používateľa:
Re: seriovy port
Najlepsie by bolo keby si si precital dokumentaciu k danemu zariadeniu a cital pole bytov z bufferu. Urcite to ma nejaku kontrolu. Ci uz nejaky ACK (NAK) byte pri posielani poziadavky popripade nejaky BCC (Block Check Character) na overenie kompletnosti spravy. Co sa tyka otvarania a zatvarania komunikacie po kazdom prikaze nemyslim si ze je to dobra volba pri vsetkych situaciach. Hlavne nie ak prichodzia sprava je vyvolana na zariadeni a nie nejakou poziadavkou od uzivatela z programu.
-
axxis
Addict
- Príspevky: 3690
- Registrovaný: 29 máj 2007, 21:53
- Bydlisko: Spálené mlyny
- Kontaktovať používateľa:
Re: seriovy port
ja som napisal zatvorit po skonceni prace, nie po kazdom prikaze. 
ale ked si komunikaciu flushne po kazdom citani nic sa mu nestane
ale ked si komunikaciu flushne po kazdom citani nic sa mu nestane
Re: seriovy port
No ja si data posielam z mikrokontrolera, nic dolezite, teplota, napetie a podobne, no potrebujem to v aplikacii zobrazovat. Budem to este musiet dat do nejakej formy, pretoze zatial posielam iba napetie, ale bude toho viac a budem to musiet nejak rozlisit.
Port zatvaram az pri ukonceni programu, pretoze aplikacia ovlada mikrokontroler a bolo by zbitocne ho stale otvarat a zatvarat ak nieco porebujem spravit.
Este by som sa opytal, aky prvok je najidealnejsi na zobrazovanie jednej hodnoty, napr. napetie 7.2V?? Skusam to v richtextbox aj v label, no ak tu hodnotu stale prepisujem po jednej sekunde, vzdy mi to vypise a potom sa akoby zmaze, cize to vlastne preblikava. Ak to ale v richtextbox necham zapisovat pod seba richTextBox2.Text += hodnota; tak to funguje
Port zatvaram az pri ukonceni programu, pretoze aplikacia ovlada mikrokontroler a bolo by zbitocne ho stale otvarat a zatvarat ak nieco porebujem spravit.
Este by som sa opytal, aky prvok je najidealnejsi na zobrazovanie jednej hodnoty, napr. napetie 7.2V?? Skusam to v richtextbox aj v label, no ak tu hodnotu stale prepisujem po jednej sekunde, vzdy mi to vypise a potom sa akoby zmaze, cize to vlastne preblikava. Ak to ale v richtextbox necham zapisovat pod seba richTextBox2.Text += hodnota; tak to funguje
-
refr0
Star
- Príspevky: 521
- Registrovaný: 26 nov 2005, 10:55
- Bydlisko: Trenčín
- Kontaktovať používateľa:
Re: seriovy port
Jj sry prehliadol somaxxis napísal:ja som napisal zatvorit po skonceni prace, nie po kazdom prikaze.
ale ked si komunikaciu flushne po kazdom citani nic sa mu nestane
Hm no jasne ze to preblikne vsak sa predsa musi nejako zmenit to cislo... Samozrejme predpokladam ze slovo "napatie" mas v jednom label a to cislo samotne v dalsiom nech to nepreblikava cele.
Re: seriovy port
jj to je samozrejme, ze je to osobitne
len sa mi nepaci ze to preblikava 
-
refr0
Star
- Príspevky: 521
- Registrovaný: 26 nov 2005, 10:55
- Bydlisko: Trenčín
- Kontaktovať používateľa:
Re: seriovy port
No hej ale ako to chces potom prekreslit.
Inac k tomu zasielaniu tych hodnot ak to chces mat korektne...
Tak si urob taku vlastnu sadu instrukcii. A na konci vzdy posli nejaky BCC kod ktorym si overis kompletnost spravy.
Inac k tomu zasielaniu tych hodnot ak to chces mat korektne...
Tak si urob taku vlastnu sadu instrukcii. A na konci vzdy posli nejaky BCC kod ktorym si overis kompletnost spravy.
Re: seriovy port
a neslo by to spravit tak, aby mi v rich text box zapisovalo stale na prvy riadok?
//autoeditácia príspevku (16 Apr 2012, 17:04)
Teraz som prisiel na to, ze ono mne tam nevadi preblikavanie vykreslovania. ono to ne nejaky iny problem. mne zapise hodnotu do poľa a potom ju akoby vymaže/prepíše nejakým prázdnym elementom
//autoeditácia príspevku (16 Apr 2012, 17:18)
Tak preblikávanie mám vyriešené. Ja som posielal som z mikrokontrolera navyše znak 0x0D. A to tam blblo. Čo sa mi ale nepodarilo vyriešiť je to, že mi niekedy zobrazí iba posledné 3 znaky z prijatého reťazca. V terminále mi to ale funguje dobre.
//autoeditácia príspevku (16 Apr 2012, 17:04)
Teraz som prisiel na to, ze ono mne tam nevadi preblikavanie vykreslovania. ono to ne nejaky iny problem. mne zapise hodnotu do poľa a potom ju akoby vymaže/prepíše nejakým prázdnym elementom
//autoeditácia príspevku (16 Apr 2012, 17:18)
Tak preblikávanie mám vyriešené. Ja som posielal som z mikrokontrolera navyše znak 0x0D. A to tam blblo. Čo sa mi ale nepodarilo vyriešiť je to, že mi niekedy zobrazí iba posledné 3 znaky z prijatého reťazca. V terminále mi to ale funguje dobre.