 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Tor Sep 18, 2007 10:43 am Naslov sporočila: |
|
|
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 |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Tor Sep 18, 2007 1:45 pm Naslov sporočila: |
|
|
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 |
|
 |
gkrusi Član



Pridružen-a: Tor 24 Jul 2007 17:22 Prispevkov: 811 Aktiv.: 3.72 Kraj: Ptuj
|
Objavljeno: Ned Sep 23, 2007 2:09 pm Naslov sporočila: |
|
|
Š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 |
|
 |
gaborp Član

Pridružen-a: Sob 16 Jul 2005 9:54 Prispevkov: 63 Aktiv.: 0.27 Kraj: Škofja Loka / Tržič
|
Objavljeno: Ned Sep 23, 2007 4:11 pm Naslov sporočila: |
|
|
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 |
|
 |
gkrusi Član



Pridružen-a: Tor 24 Jul 2007 17:22 Prispevkov: 811 Aktiv.: 3.72 Kraj: Ptuj
|
Objavljeno: Ned Sep 23, 2007 4:41 pm Naslov sporočila: |
|
|
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 |
|
 |
gaborp Član

Pridružen-a: Sob 16 Jul 2005 9:54 Prispevkov: 63 Aktiv.: 0.27 Kraj: Škofja Loka / Tržič
|
Objavljeno: Ned Sep 23, 2007 5:56 pm Naslov sporočila: |
|
|
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 |
|
 |
gkrusi Član



Pridružen-a: Tor 24 Jul 2007 17:22 Prispevkov: 811 Aktiv.: 3.72 Kraj: Ptuj
|
Objavljeno: Pon Sep 24, 2007 7:17 am Naslov sporočila: |
|
|
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 |
|
 |
gaborp Član

Pridružen-a: Sob 16 Jul 2005 9:54 Prispevkov: 63 Aktiv.: 0.27 Kraj: Škofja Loka / Tržič
|
Objavljeno: Pon Sep 24, 2007 9:11 am Naslov sporočila: |
|
|
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 |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pon Sep 24, 2007 9:40 am Naslov sporočila: |
|
|
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
Opis: |
|
Velikost datoteke: |
26.82 KB |
Pogledana: |
15 krat |

|
|
|
Nazaj na vrh |
|
 |
gkrusi Član



Pridružen-a: Tor 24 Jul 2007 17:22 Prispevkov: 811 Aktiv.: 3.72 Kraj: Ptuj
|
Objavljeno: Pon Sep 24, 2007 2:58 pm Naslov sporočila: |
|
|
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 .
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 |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Tor Sep 25, 2007 11:10 am Naslov sporočila: |
|
|
Misliš tole:
Koda: |
richTextBox1.Text = "Pozdrav!\nPozdrav iz druge vrstice"; |
_________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Tor Sep 25, 2007 11:26 am Naslov sporočila: |
|
|
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 |
|
 |
gkrusi Član



Pridružen-a: Tor 24 Jul 2007 17:22 Prispevkov: 811 Aktiv.: 3.72 Kraj: Ptuj
|
Objavljeno: Tor Sep 25, 2007 12:07 pm Naslov sporočila: |
|
|
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 |
|
 |
gkrusi Član



Pridružen-a: Tor 24 Jul 2007 17:22 Prispevkov: 811 Aktiv.: 3.72 Kraj: Ptuj
|
|
Nazaj na vrh |
|
 |
gkrusi Član



Pridružen-a: Tor 24 Jul 2007 17:22 Prispevkov: 811 Aktiv.: 3.72 Kraj: Ptuj
|
Objavljeno: Tor Okt 02, 2007 9:49 pm Naslov sporočila: |
|
|
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?
Še enkrat hvala za odgovore, kajti s to napako je celoten (do sedaj 2000 vrstični) program skoraj neizvedljiv!
_________________ Zakaj bi bilo preprosto, če je lahko zakomplicirano??? |
|
Nazaj na vrh |
|
 |
|
|
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
|