Принимаю данные с COM порта. Не могу отобразить.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Принимаю данные с COM порта. Не могу отобразить.

Сообщение Dimon111 » 14.10.2009 (Ср) 15:37

Принимаю данные с COM порта.

Получаю что - то вроде
?aect1u1t !uu1?t ?5A5=L5,( t?,

MSComm1.Input возвращает данные типа String даже если в настройках COM порта стоит .InputMode = comInputModeBinary. Кстати, .InputMode = comInputModeBinary ни на что не влияет.

Помогите советом, как преобразовать одиночные (один символ) данных типа String в Byte и отобразить в HEX виде.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Принимаю данные с COM порта. Не могу отобразить.

Сообщение iGrok » 14.10.2009 (Ср) 17:10

Как-то так, ЕМНИП.
Код: Выделить всё
Dim b() as byte, i as long
b = StrConv(str, vbFromUnicode)

For i = 0 to ubound(b)
debug.print hex(b(i))
next i
label:
cli
jmp label

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Принимаю данные с COM порта. Не могу отобразить.

Сообщение Dimon111 » 15.10.2009 (Чт) 9:40

Не помогло. На стадии отображения выдает несоответствие типа. Не нравится ему hex(b(i)).

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Принимаю данные с COM порта. Не могу отобразить.

Сообщение Dimon111 » 15.10.2009 (Чт) 10:52

Итак, это уже загадка для экспертов. Описываю ситуацию.

Пример
Код: Выделить всё
Private Sub MSComm1_OnComm()       'Срабатывание события COM порта
Dim Inp() As Byte
If MSComm1.CommEvent <> comEvReceive Then Exit Sub
Inp = MSComm1.Input
Terminal_Text = Terminal_Text & Hex(Inp(0))
I = I + 1
End Sub

работает исправно если вместо переменой объявить массив типа Byte и присвоить ему принятый байт (в настройках порта стоит RThreshold = 1, т.е. прерывание по приему каждого байта).

Если вы объявите Inp как переменную типа Byte на стадии присвоения (Inp = MSComm1.Input) получите несоответствие типов. В этом случае VB возжелает чтобы переменная Inp была типа String. И ему плевать, что в настройках стоит .InputMode = comInputModeBinary.

Как преобразовывать строку из одного символа в переменую типа Byte я так и не разобрался. И ну его к чертям собачьим вместе с дебилом Гейтсом.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Принимаю данные с COM порта. Не могу отобразить.

Сообщение iGrok » 15.10.2009 (Чт) 15:10

Dimon111 писал(а):Не помогло. На стадии отображения выдает несоответствие типа. Не нравится ему hex(b(i)).

Что значит "не помогло"??
Присвоение строки массиву байт происходит вообще вот так: b = str
Но в этом случае в массиве окажется юникодная строка (два байта на символ).

Код: Выделить всё
Public Sub test()
Dim str As String
    str = "TEST STRING"
Dim b() As Byte, i As Long
b = StrConv(str, vbFromUnicode)

For i = 0 To UBound(b)
    Debug.Print Hex(b(i))
Next i
End Sub

Вот это у тебя работает?

З.Ы. В чём там можно было "не разобраться" я не знаю, так что не надо на Гейтса-то гнать.
label:
cli
jmp label


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 97

    TopList