Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Передать массив по COM-порту
AndrF Дата: Пн, 28.05.2012, 14:49  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 145
Репутация: 3   ±
Замечания:   ±
На сайте с 03.02.2012

Статус: Offline

Что-то не получается...

Есть массив байт, надо передать его на компьютер по COM-порту. Передаю как:

Code
HRSOut "$=", Str m, 13, 10


Все работает отлично, пока в массиве находятся символьные данные. Но мне нужны бинарные - типа:

Code
For i = 0 to 15
     m[i] = i
Next i

HRSOut "$=", Str m\16, 13, 10


И тут я спотыкаюсь - не могу принять их на компе (программа на VB6). Порт инициализирую как:

Code
With Me.MSComm3
         .CommPort = 3
         .InputLen = 0
         .SThreshold = 0
         .RTSEnable = False
         .InputMode = comInputModeBinary
         .NullDiscard = False
         .InBufferSize = 512
         .OutBufferSize = 512
         .Settings = "38400,n,8,1"
         .PortOpen = True
         .RThreshold = 1
     End With


Но событие OnComm возникает через раз и получаемая строка содержит лишь:

36 61 13 10

--------------------------
В чем может быть дело и как лучше победить? Готов принять и не бинарные данные, но как тогда массив лучше преобразовать в HEX-вид?
ЯНДЕКС Дата: 28.05.2012
passer_by Дата: Пн, 28.05.2012, 16:00  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Новенький
Сообщений: 17
Репутация: 0   ±
Замечания:   ±
На сайте с 23.10.2011

Статус: Offline

Quote
.Settings = "38400,n,8,1"

А откуда такая бешеная скорость? А так VB6 не знаю, как там все прописывается... Но что то уж больно все просто.
P.S. Вообще сложная штука этот СОМ порт. Вот мне подсказывали в теме Программирование на Pascal. Пробовали писать на основе компонента BComPort, но вот первый байт пропускает и все тут cry . Прописал порт полностью, с WinAPI. Та же история, пока не прописал в DCB - маску EV_RXFLAG (событие на получение определенного символа) вместо EV_RXCHAR (событие на получение хотя бы одного символа). Вроде пока все идет... Буду дальше экспериментировать.

Сообщение отредактировал passer_by - Пн, 28.05.2012, 20:36
DAlexV Дата: Пн, 28.05.2012, 23:48  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (AndrF)
Но событие OnComm возникает через раз и получаемая строка содержит лишь
Первым делом советую попробовать посмотреть Com-портовой прослушкой что выдает процессор. Может проц что то не то кидает. Если все верно, то вот рабочая прога для приема из порта(VB6) на изучение. Если нет, вариант реализации отправки в виде массива(Примерно что и STR но скорее всего именно для бинарной передачи. STR может затыкаться и не отправлять символы если они не выводятся на экран компутера(спецсимовлы))

dim Mass[15] as byte
For i = 0 to 15
Mass[i] = i
Next i

HRSOUT Mass \16,10,13

И в свойствах MSComm не нужно столько. достаточно
.CommPort = 3
.InputMode = comInputModeBinary
.Settings = "38400,n,8,1"
.PortOpen = True

Удачи wink


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал DAlexV - Пн, 28.05.2012, 23:52
  • Страница 1 из 1
  • 1
Поиск: