Добрый день. Хочу запустить любую программу для работы с COM портом,но при компиляции выскакивает ошибка
Стоит операц. система W8 (x64), PB 4.51(x64).Программа с другими кодами работает. Не могу установить LibInstall_MVCOM.exe с офф. сайта (пишет, что не находит указанный путь). Может кто сталкивался с проблемой. Подскажите пожалуйста
COM порт
Сообщений 1 страница 17 из 17
Поделиться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
Наблюдается зависание программы.
Собственно надо контролировать не количество байт в буфере, а окончание передачи (необходимо передавать байт только после окончания передачи предыдущего).
Поделиться1421.03.2021 15:00:07
Под Линухом ничего не ожидает, и программа двигается дальше
После WriteSerialPortData добавляете код
While AvailableSerialPortOutput(Port)>0 Delay(2) Wend
И будет ожидание как в винде.
Поделиться1530.03.2021 21:36:58
И будет ожидание как в винде.
Спасибо, Пётр, но зачем это делать?
Во-первых, 2ms мне не подходят, ибо время передачи байта всего 320us.
А потом я уже выше упоминал, что ИМХО как-раз не логично тормозить программу на время отправки, а логичнее использовать AvailableSerialPortOutput перед записью данных в порт.
Поделиться1630.03.2021 22:41:49
время передачи байта всего 320us.
Функции WriteSerialPortData можно передать больше байта.
Если 2 мс много, просто исключаем Delay из кода.
логичнее использовать AvailableSerialPortOutput перед записью данных в порт
Когда производится обмен методом запрос - ответ, перед тем как читать ответ нужно дождаться окончания передачи.
Поделиться1701.04.2021 00:00:20
нужно дождаться окончания передачи.
Так а в чём противоречие?
Та же функция AvailableSerialPortOutput (сами же выше код приводили).