Zdravím, pokouším se rozchodit digitální odměřování na sériovém portu. Funguje to tak, že na port odešlu dva bajty např. tímto způsobem:
com1.Write(Convert.ToChar(CInt(&H11))) 'číslo osy = 1
com1.Write(Convert.ToChar(CInt(&H00))) 'dotaz na aktuální pozici
Což je dotaz na pozici první osy. Odměřovíní odpoví třemi bajty pozpátku v hex podobě. Např. tedy ED 4D 00 = 19949. Já to pomocí tohoto kódu odchytím a převedu na číslo:
Dim buff As String
'přečte data
buff = com1.ReadExisting
'otočit poředí (bajty chodí pozpátku)
'převést znaky na hex kód
Label4.Text = Microsoft.VisualBasic.Right("00" & Hex(Asc(buff.Substring(2, 1))).ToString(), 2) & Microsoft.VisualBasic.Right("00" & Hex(Asc(buff.Substring(1, 1))).ToString(), 2) & Microsoft.VisualBasic.Right("00" & Hex(Asc(buff.Substring(0, 1))).ToString(), 2)
'převede na dec číslo
Label6.Text = Convert.ToInt32(Label4.Text, 16).ToString()
Můj problém spočívá v kódování. Při různém kódování mi vrací program pokaždý jiný přečtený bajt.
com1.Encoding = System.Text.Encoding.GetEncoding(28605)
&H80 = &H3F
com1.Encoding = System.Text.Encoding.GetEncoding("Windows-1252")
&H83 = &66
Dá se toto kódování nějak obejít? Výše uvedené kódy jsou z testovací aplikace. Zatím se snažím vůbec zjistit, jak správně přečíst data.
|