PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » COM порт


COM порт

Сообщений 1 страница 13 из 13

1

Добрый день. Хочу запустить любую программу для работы с COM портом,но при компиляции выскакивает ошибка
Стоит операц. система W8 (x64), PB 4.51(x64).Программа с другими кодами работает. Не могу установить LibInstall_MVCOM.exe  с офф. сайта (пишет, что не находит указанный путь). Может кто сталкивался с проблемой. Подскажите пожалуйста
http://s9.uploads.ru/eSaxl.png

0

2

Зачем MVCOM если есть функции для работы с COM портом? http://purebasic.com/documentation/seri … index.html

ub8xak написал(а):

PB 4.51(x64)

Библиотека MVCOM для x86 системы. Нужно использовать встроенную библиотеку SerialPort (ссылка выше на список ее функций).

0

3

Самому начать сложно. Решил разобраться на примерах. А тут ошибка появилась.

0

4

Ошибка потому что библиотека для x86,  а не для x64. Если нужно работать с портом в x64 системе, то следует использовать встроенную библиотеку SerialPort.
Так же можно установить PureBasic x86, с которым библиотека MVCOM нормально работает.

0

5

Пётр, спасибо. Разобрался. Заработало.

0

6

А подскажите такой момент.
Используем штатную функцию.
Заслали что-то в буфер для отправки.
Следом, в другом месте программы требуется ещё отправить данные.
Видим, что буфер ещё не опустошился.
Как быть?
Можно ли как-то "объединить" эти два буфера данных?

0

7

Функция WriteSerialPortData ожидает завершения отправки.

Код:
If OpenSerialPort(0, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
  Debug "Успешно"
  Dim Buff.a(1024)
  t=ElapsedMilliseconds()
  WriteSerialPortData(0, @Buff(), ArraySize(Buff()))
  Debug ElapsedMilliseconds()-t
  CloseSerialPort(0)
Else
  Debug "Не удалось"
EndIf

0

8

Пётр написал(а):

WriteSerialPortData ожидает

Т.е. программа "зависает" на строке WriteSerialPortData, пока буфер не опустошится?

0

9

Да.

0

10

Пётр написал(а):

Функция WriteSerialPortData ожидает завершения отправки.

Как оказалось, только под Виндой.
Под Линухом ничего не ожидает, и программа двигается дальше (что, кстати, на мой взгляд, логичнее).
По своему вопросу: пока решил использовать дополнительный кольцевой буфер, и отдельный поток для передачи из кольцевого буфера в ком-порт.

0

11

Что-то у меня так и не получается нормально организовать передачу.
Использую функцию AvailableSerialPortOutput для определения окончания передачи.
Но, насколько понимаю, она передаёт значение буфера операционки.
Предполагаю, что в момент записи в этот буфер, байты сразу же начинают передаваться в передатчик УАРТа (или в его аппаратные буферы), в независимости от того, закончена реально передача, или нет.
Косвенно это подтверждается выставлением принудительной задержки в несколько миллисекунд после записи байта в передающий буфер (напомню, что мне надо передавать по одному байту).
Поделитесь, плиз, своими наработками/идеями?

0

12

Наблюдается потеря данных? Иначе зачем контролировать количество байт в буфере передачи?

0

13

Наблюдается зависание программы.
Собственно надо контролировать не количество байт в буфере, а окончание передачи (необходимо передавать байт только после окончания передачи предыдущего).

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » COM порт