Передать массив по COM-порту - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Передать массив по COM-порту
Передать массив по COM-порту
AndrF Дата: Пн, 28.05.2012, 14:49  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 148
Репутация: 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
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 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


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)

Сообщение отредактировал DAlexV - Пн, 28.05.2012, 23:52
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Передать массив по COM-порту
Страница 1 из 11
Поиск: