Добрый день. Хочу запустить любую программу для работы с COM портом,но при компиляции выскакивает ошибка
Стоит операц. система W8 (x64), PB 4.51(x64).Программа с другими кодами работает. Не могу установить LibInstall_MVCOM.exe с офф. сайта (пишет, что не находит указанный путь). Может кто сталкивался с проблемой. Подскажите пожалуйста
COM порт
Сообщений 1 страница 13 из 13
Поделиться119.03.2014 00:47:50
Поделиться219.03.2014 00:58:23
Зачем MVCOM если есть функции для работы с COM портом? http://purebasic.com/documentation/seri … index.html
PB 4.51(x64)
Библиотека MVCOM для x86 системы. Нужно использовать встроенную библиотеку SerialPort (ссылка выше на список ее функций).
Поделиться319.03.2014 01:11:10
Самому начать сложно. Решил разобраться на примерах. А тут ошибка появилась.
Поделиться419.03.2014 01:25:13
Ошибка потому что библиотека для x86, а не для x64. Если нужно работать с портом в x64 системе, то следует использовать встроенную библиотеку SerialPort.
Так же можно установить PureBasic x86, с которым библиотека MVCOM нормально работает.
Поделиться519.03.2014 01:42:28
Пётр, спасибо. Разобрался. Заработало.
Поделиться617.09.2020 21:18:53
А подскажите такой момент.
Используем штатную функцию.
Заслали что-то в буфер для отправки.
Следом, в другом месте программы требуется ещё отправить данные.
Видим, что буфер ещё не опустошился.
Как быть?
Можно ли как-то "объединить" эти два буфера данных?
Поделиться717.09.2020 21:34:21
Функция 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
Поделиться817.09.2020 21:56:52
WriteSerialPortData ожидает
Т.е. программа "зависает" на строке WriteSerialPortData, пока буфер не опустошится?
Поделиться1019.09.2020 15:49:31
Функция WriteSerialPortData ожидает завершения отправки.
Как оказалось, только под Виндой.
Под Линухом ничего не ожидает, и программа двигается дальше (что, кстати, на мой взгляд, логичнее).
По своему вопросу: пока решил использовать дополнительный кольцевой буфер, и отдельный поток для передачи из кольцевого буфера в ком-порт.
Поделиться1114.11.2020 11:18:37
Что-то у меня так и не получается нормально организовать передачу.
Использую функцию AvailableSerialPortOutput для определения окончания передачи.
Но, насколько понимаю, она передаёт значение буфера операционки.
Предполагаю, что в момент записи в этот буфер, байты сразу же начинают передаваться в передатчик УАРТа (или в его аппаратные буферы), в независимости от того, закончена реально передача, или нет.
Косвенно это подтверждается выставлением принудительной задержки в несколько миллисекунд после записи байта в передающий буфер (напомню, что мне надо передавать по одному байту).
Поделитесь, плиз, своими наработками/идеями?
Поделиться1214.11.2020 23:11:05
Наблюдается потеря данных? Иначе зачем контролировать количество байт в буфере передачи?
Поделиться1315.11.2020 17:25:13
Наблюдается зависание программы.
Собственно надо контролировать не количество байт в буфере, а окончание передачи (необходимо передавать байт только после окончания передачи предыдущего).