www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Pošiljanje števil po RS-232
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Periferija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Tor Sep 18, 2007 10:43 am    Naslov sporočila:   Odgovori s citatom

Bolje je, da ustvariš nov thread, ki tvoj malo večji programski buffer pošilja preko RS-232, ko je le mogoče. To foro sicer uporabljam na mikrokontrolerju, kjer je hardware-ski buffer občutno premajhen in štopa program.
_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Tor Sep 18, 2007 1:45 pm    Naslov sporočila:   Odgovori s citatom

Z uporabo flow kontrole se programa ne ustavlja. Ustavlja se samo prenos podatkov. Je pa potrebno upoštevati, da flow kontrola ne prime takoj, ko se pošlje Xoff, ali se dvigne kakšen od signalov (DSR, RTS). Promet je potrebno začeti zaustavljati preden se buffer napolni.

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gkrusi
Član
Član



Pridružen-a: Tor 24 Jul 2007 17:22
Prispevkov: 811
Aktiv.: 3.72
Kraj: Ptuj

PrispevekObjavljeno: Ned Sep 23, 2007 2:09 pm    Naslov sporočila:   Odgovori s citatom

Še nekaj ne razumem. Uspel sem poslati le števke oziroma znake, kako pa naj pošljem spremenljivko?
Trenutno mi Visual C# spremenljivko ki jo želim poslati spremeni v besedilo in potem naprimer 51 pošlje 5 (53) in nato še 1 (49) po ASCII kodiranju.

Sedaj imam ta ukaz za pošiljanje iz C#:
x je definiran kot byte...

COM1.Write("" + x);

Če dam samo
COM1.Write(x);
mi javi, da ne more pertvorit tipa byte v string in da moram poslati obliko string. Ne vem, zakaj pa ne pusti pretvorbe
COM1.Write((string)x);
kajti če pred x dodam
"" +
pa pošlje x a po ASCII kodiranju (torej x pretvori v string in nato kodirano pošilja posamezne števke).

Ve kdo, s katerim ukazom se izognem kodiranju?

_________________
Zakaj bi bilo preprosto, če je lahko zakomplicirano???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
gaborp
Član
Član



Pridružen-a: Sob 16 Jul 2005 9:54
Prispevkov: 63
Aktiv.: 0.27
Kraj: Škofja Loka / Tržič

PrispevekObjavljeno: Ned Sep 23, 2007 4:11 pm    Naslov sporočila:   Odgovori s citatom

Razred System.IO.Ports.SerialPort pozna tri oblike metode Write:

- SerialPort.Write (String)
Writes the parameter string to the output.

- SerialPort.Write (Byte[], Int32, Int32)
Writes a specified number of bytes to an output buffer at the specified offset.

- SerialPort.Write (Char[], Int32, Int32)
Writes a specified number of characters to an output buffer at the specified offset.

Torej če želiš pošiljati 16bitna števila (2byta) kreiraj spremenjlivko tipa byte array z dolžino 2 in jo pošiljaj na serijski port z metodo SerialPort.Write(spremenljivka, 0 ,2).

Priporočam ti uporabo Helpa, ki je vključen v Visual C#. Zelo uporabna funkvija je Dynamic Help, do katere prideš preko menija Help.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gkrusi
Član
Član



Pridružen-a: Tor 24 Jul 2007 17:22
Prispevkov: 811
Aktiv.: 3.72
Kraj: Ptuj

PrispevekObjavljeno: Ned Sep 23, 2007 4:41 pm    Naslov sporočila:   Odgovori s citatom

Kako točno pa kreiram spremenljivko byte arry in kaj arry sploh pomeni v tem primeru? Kolikor sem enkrat že ugotavljal sta to dva na nek poseben način povezana byta ... in ne le dvo bytna spremenljivka.

Na help se zanašam kar pogosto (večinoma na "how to:"), a pomoči zaradi določenih "osnovnih" poimenovanj še ne vem popolnoma uporabljati.

_________________
Zakaj bi bilo preprosto, če je lahko zakomplicirano???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
gaborp
Član
Član



Pridružen-a: Sob 16 Jul 2005 9:54
Prispevkov: 63
Aktiv.: 0.27
Kraj: Škofja Loka / Tržič

PrispevekObjavljeno: Ned Sep 23, 2007 5:56 pm    Naslov sporočila:   Odgovori s citatom

:google:

Aray je polje spremenljivk istega tipa.

Deklariraš jo takole: byte[] spremenljivka = new byte[dolžina spremenljivke], kjer dolžina spremenljivke pomeni število bytov v polju.

Vrednost xyz-tega byta (x-te lokacije) v polju prebereš takole: byte xyz = spremenljivka[x], podobno je z pisanjem: spremenljivka[x] = xyz, kjer je xyz spremenljivka tipa byte.

Poglej si tole.

V prvem prispevku si rekel da znaš pretvoriti 16 bitno število v dve 8 bitni števili, ker na port pošiljaš byte, predvidevam da si število razbil na dva byta, ki sta v ločenih spremenljivkah in ju tudi ločeno pošiljaš na port. Namesto da število ločiš kreiraj byte array dolžine 2, v prvo lokacijo daš prvi byte (prvih 8bitov števila) in v drugo drugega.

Tak podatek na port pošlješ z metodo Serialport.Write(spremenljivka, 0, spremenljivka.Length), kar pomeni da bo metoda v izhodni buffer serijskega porta vpisala vrednosti polja spremenljivka z ofsetom 0 (s pisanjem začne pri prvi lokaciji polja).

SerialPort.Write (Byte[], Int32, Int32) metoda sprejme tri parametre:
- podatek tipa byte array, iz katerega želiš poslati podatke
- offset (poveš od katere lokacije naprej v polju želiš poslati)
- št bytov, ki jih želiš poslati

Za število bytov, ki jih želim poslati sem uporabil spremenljivka.Length, Length je lastnost vseh array spremenljivk, ki vsebuje kot že samo ime pove dolžino spremenljivke.

Ali lahko podrobneje opišeš kaj pravzaprav želiš narediti, aji je v osnovi 16 bitno število dvomestni intiger, ki ga razbiješ v posamezni cifri in ju vpišeš v byte?

Ali si komunikacijski protokol že definiral? Kateri byte se bo pošiljal najprej LSB ali MSB, ...


Nazadnje urejal/a gaborp Pon Sep 24, 2007 9:13 am; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gkrusi
Član
Član



Pridružen-a: Tor 24 Jul 2007 17:22
Prispevkov: 811
Aktiv.: 3.72
Kraj: Ptuj

PrispevekObjavljeno: Pon Sep 24, 2007 7:17 am    Naslov sporočila:   Odgovori s citatom

Prav razumem, da v tvojem primeru ime spremenljivke xyz pomeni tri posamezne spremenljivke (x, y in z)?

RS232 povezavo potrebujem za svoj CNC. Iz računalnika moram poslati mikrokrmilniku tri 16 bitne spremenljivke (za položaj rezkarja na posamezni osi) in eno 8 bitno za krmiljenje motorja. Iz mikrokrmiilnika pa moram vrnit vsaj eno 8 bitno spremenljivko, fajn bi bilo 16 bitno (za stanja senzorjev in zahtevo po naslednjem položaju...).

Bom danes poskusil izvesti zadevo, upam da mi bo uspelo (včeraj še mi ni).
Sicer pa hvala zaenkrat!

_________________
Zakaj bi bilo preprosto, če je lahko zakomplicirano???


Nazadnje urejal/a gkrusi Pon Sep 24, 2007 3:00 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
gaborp
Član
Član



Pridružen-a: Sob 16 Jul 2005 9:54
Prispevkov: 63
Aktiv.: 0.27
Kraj: Škofja Loka / Tržič

PrispevekObjavljeno: Pon Sep 24, 2007 9:11 am    Naslov sporočila:   Odgovori s citatom

gkrusi je napisal/a:
Prav razumem, da v tvojem primernu ime spremenljivke xyz pomeni tri posamezne spremenljivke (x, y in z)?


Ne, to je ena spremenljivka tipa byte, kar sem tudi napisal. Ime xyz sem ji dal zato da je nebi mešal z lokacijo (indeksom) x.

Polje si lahko predstavljaš kot matriko z enim stolpcem in poljubnim številom vrstic, ki vsebujejo podatke istega tipa. Število vrstic določiš ob deklaraciji polja.

Računalništvo 2 Zapiski predavanj, avtor: prof. Iztok Fajfar je napisal/a:

Polje
Matematično gledano je polje vektor. Polje združuje dva ali več podatkov oziroma elementov istega tipa, ki imajo vsi enako ime, med sabo pa jih ločimo s celoštevilskim
indeksom.
Tako kot enostavne spremenljivke, moramo tudi polja deklarirati, preden jih lahko
uporabimo v programu. Deklaracija polja se glasi takole:

tip_elementa ime_polja[število_elementov];

S tem ustvarimo polje, ki obsega število_elementov elementov tipa tip_elementa.
Na primer:

short meritve[100];

ustvari polje 100 elementov tipa short. Elementi se v pomnilniku nanizajo eden za
drugim in skupaj zasedejo toliko pomnilnika, kolikor bi ga enako število enostavnih
spremenljivk istega tipa. ime_polja predstavlja pomnilniški naslov prvega elementa
v polju. O naslovih bomo podrobneje govorili v poglavju o kazalcih. V primeru
polja meritve dobimo v pomnilniku takšno stanje:

meritve[0]
meritve[1]
meritve[2]
.
.
.

meritve[99]

Naj te ne zbega oblika deklaracije polja v gornjem citatu, ta se nanaša na programski jezik C in ne C#.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Pon Sep 24, 2007 9:40 am    Naslov sporočila:   Odgovori s citatom

gkrusi je napisal/a:
RS232 povezavo potrebujem za svoj CNC.


COM port in CNC:

- obvezno mora biti nastavljen pravilen flow control. Če PC pošlje CNCju nek ukaz (na primer naj izrezka krog), je jasno, da je ukaz za risanje kroga dolg nekaj bajtov, rezkanje pa traja dolgo. Med risanjem kroga je CNC zaposlen z rezanjem in nima časa za interpretiranje novih ukazov. Zaradi tega mora CNC machina pravočasnu ustaviti PCja, da ne pošlje preveč dela: flow control.

- FIFO Buffering (medpomnilnik) je potrebno izključiti. Flow control ne deluje na buffer.

Jur



tmp.JPG
 Opis:
 Velikost datoteke:  26.82 KB
 Pogledana:  15 krat

tmp.JPG


Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gkrusi
Član
Član



Pridružen-a: Tor 24 Jul 2007 17:22
Prispevkov: 811
Aktiv.: 3.72
Kraj: Ptuj

PrispevekObjavljeno: Pon Sep 24, 2007 2:58 pm    Naslov sporočila:   Odgovori s citatom

Evo, sedaj sem poskušal, kako se uporablja array in zadevo naštudiral, tako da jo vem uporabljati. Hvala gaborp!
Sedaj pa jo moram še poslati.

btw... Še eno vprašanje, kako se v visual C# v RichTextBox-u premakneš na naslednjo vrstico (enter)? V pomoči namreč po že kar veliko kratnem iskanju ne najdem nič primernega Confused .

Flow controll pa če prav razumem, kaj to pomeni nameravam rešit tako:
-računalnik PIC-u pošlje, na kateri položaj naj se rezkar premakne,
-ko ta doseže zahtevan položaj, PIC računalniku pošlje signal, da je končal (računalnik v tem času že preračuna, naslednji položaj),
-računalnik mu pošlje naslednji zahtevan položaj....
(ali tukaj kaj ne bo delovalo?)

_________________
Zakaj bi bilo preprosto, če je lahko zakomplicirano???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Tor Sep 25, 2007 11:10 am    Naslov sporočila:   Odgovori s citatom

Misliš tole:
Koda:
richTextBox1.Text = "Pozdrav!\nPozdrav iz druge vrstice";

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Tor Sep 25, 2007 11:26 am    Naslov sporočila:   Odgovori s citatom

Ja, flow control deluje približno tako. Računalnik izračunava neprimerno hitreje od delovanja CNCja. In če flow ni nastavljen prav, lahko dobiš negativne efekte, pri katerih sploh ne bi pomislil na flow.

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
gkrusi
Član
Član



Pridružen-a: Tor 24 Jul 2007 17:22
Prispevkov: 811
Aktiv.: 3.72
Kraj: Ptuj

PrispevekObjavljeno: Tor Sep 25, 2007 12:07 pm    Naslov sporočila:   Odgovori s citatom

NeoTO je napisal/a:
Misliš tole:
Koda:
richTextBox1.Text = "Pozdrav!\nPozdrav iz druge vrstice";


Točno to, hvala NeoTO!

_________________
Zakaj bi bilo preprosto, če je lahko zakomplicirano???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
gkrusi
Član
Član



Pridružen-a: Tor 24 Jul 2007 17:22
Prispevkov: 811
Aktiv.: 3.72
Kraj: Ptuj

PrispevekObjavljeno: Pon Okt 01, 2007 4:20 pm    Naslov sporočila:   Odgovori s citatom

Spet imam težavo s C# in RS-232 povezavo, ki je sam z navodili za uporabo ne znam rešit Confused .

Če ustvarim prekinitev serialPort_DataReceived in v njo vnesem na primer ukaz za izpis besedila (label1.Text="Moje besedilo"; ), se mi ob prejemu podatka preko RS-232, izvajanje programa prekine in pojavi se opozorilo:
Citiram:
Cross-thread operation not valid: Control 'label1' accessed from a thread other than the thread it was created on.

Če želim namesto besedila na primer omogočit timer, pa se ne zgodi nič - nobene napake, le timer se ne vklopi Evil or Very Mad .

Preizkusil sem kar nekaj postopkov iz navodil, a mi nobeden ni uspel. Najbolj sem se zapičil v to rešitev:
Citiram:
You can disable this exception by setting the value of the CheckForIllegalCrossThreadCalls property to false. This causes your control to run the same way as it would run under Visual Studio 2003.

Je to zanesljiva in uporabna rešitev? Če je, prosim za pojasnilo kam in kako naj vstavim ukaz:
Koda:
public static bool CheckForIllegalCrossThreadCalls { get; set; }

Ali se lahko opozorila rešim tudi kako drugače in kaj točno to opozorilo sploh pomeni?

V naprej hvala za odgovore!



Napaka C#.jpg
 Opis:
 Velikost datoteke:  31.15 KB
 Pogledana:  24 krat

Napaka C#.jpg



_________________
Zakaj bi bilo preprosto, če je lahko zakomplicirano???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
gkrusi
Član
Član



Pridružen-a: Tor 24 Jul 2007 17:22
Prispevkov: 811
Aktiv.: 3.72
Kraj: Ptuj

PrispevekObjavljeno: Tor Okt 02, 2007 9:49 pm    Naslov sporočila:   Odgovori s citatom

Osvežujem to temo (da ne trošim prostora z novo), ker je ta zelo hitro šla v pozabo, jaz pa še vedno nisem uspel rešit težave s prekinitvijo iz com porta.

Ali morda nihče ne pozna rešitve? Sad

Še enkrat hvala za odgovore, kajti s to napako je celoten (do sedaj 2000 vrstični) program skoraj neizvedljiv! Confused

_________________
Zakaj bi bilo preprosto, če je lahko zakomplicirano???
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Periferija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3  Naslednja
Stran 2 od 3

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group