Проблема с открытием COM-порта

Предыдущая тема Следующая тема Перейти вниз

Проблема с открытием COM-порта

Сообщение  Дмитрий Скородумов в Чт Ноя 18, 2010 9:36 pm

Набрёл недавно на FreeBasic и решил, что он был бы очень удобен для переноса старых программ, написанных на QBasic'е, на платформу WinXP.
Но столкнулся с такой незадачей.

Имеется устройство, которое управляется от компьютера через модуль DLP-USB232 (производства фирмы FTDI). Модуль подключается к компьютеру по интерфейсу USB, а с другой стороны общается с устройством по последовательному каналу (UART). Работоспособность устройства не вызывает сомнений - с ним долго работали сначала под DOS, затем под XP (в последнем случае управляющая программа написана на языке JustBasic).

Поставил драйвер виртуального порта - всё в порядке, диспетчер устройств сообщает о появлении в системе нового порта COM9.
Проверка обмена данными с устройством посредством Гипертерминала - обмен через порт COM9 идёт, данные передаются и принимаются.
А вот программа на FreeBasic'е открыть порт не может. После оператора

open Com "com9:115200,n,8" as #1

возвращается код ошибки = 1.
При попытке последующей записи в порт

print #1, chr$(28)

также код ошибки равен 1.

При попытке открыть несуществующий порт с другим номером код ошибки равен 2.

Ещё несколько смущает то обстоятельство, что редактор файлов (я использую оболочку FBIde) операторы языка распознаёт и отображает жирным шрифтом, а слово "Com" в операторе "open Com" жирным не выделяет.

Буду весьма признателен за помощь советом.

Дмитрий Скородумов

Сообщения : 2
Дата регистрации : 2010-11-18

Посмотреть профиль

Вернуться к началу Перейти вниз

Проблема решена

Сообщение  Дмитрий Скородумов в Пт Ноя 19, 2010 8:43 pm

Чтение сообщений на форуме www.freebasic.net навело на решение. Порт нормально открывается, если запретить проверку сигнала DSR:

open Com "COM9:115200,n,8,1,ds0" as 1

Очевидно, FreeBasic честно проверяет этот сигнал, а драйвер его не эмулирует.

Дмитрий Скородумов

Сообщения : 2
Дата регистрации : 2010-11-18

Посмотреть профиль

Вернуться к началу Перейти вниз

Прием данных СОМ-портом

Сообщение  workman в Сб Июн 11, 2011 1:58 pm

Есть микроконтроллер передающий данные на СОМ-порт в формате: старт_бит, байт_данных, бит_четности, стоп_бит


Передача данных производится в одну сторону по одному проводу RXD (плюс земля).
Как напечатать символ (например в режиме screen 12) пришедший на СОМ-порт?
Очевидно, основная программа должна начинаться с открытия СОМ-порта:
open Com "COM1:1200,o,8,1,ds0" as #1
(или так: open Com "COM1:1200,o,8,1,ds0,cs0" as #1)
А дальше?

workman

Сообщения : 25
Дата регистрации : 2010-12-03

Посмотреть профиль

Вернуться к началу Перейти вниз

Прием данных СОМ-портом

Сообщение  workman в Сб Июн 11, 2011 5:37 pm

Кажется разобрался. Для чтения СОМ-порта и вывода результата использую такой код:
Код:

Open com "COM1:1200,o,8,1,CD0,CS0,DS0" As #1
GET #1, , buffer
Print buffer

workman

Сообщения : 25
Дата регистрации : 2010-12-03

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Проблема с открытием COM-порта

Сообщение  alx32 в Вт Июн 26, 2012 11:43 am

Люди, помогите с буфером приёма в линукс, как я понял он тама 4Кб величиной, а мне нужно загрузить с устройства 64Кб.
В общем код:
Код:

open com Command(1)&":38400,N,8,1,BIN,CD0,CS0,DS0" as #1 'открываю порт
...
'здесь гружу данные
put #1, , bt 'в bt команда чтения для устройства
sleep 20000 'ждём заполнения буфера
get #1, ,*buffer,65536 'здесь читаю содержимое буфера
в общем, при любой задержке в sleep'е в сохранённом файле только первые 4095 байт заполнены полезной инфой, а остальное забито нулями.

Можно конечно же организовать приём данных кусками по 256 байт, но при этом младший бит всегда в единице и данные портятся, и повторяются с периодичностью в 256 байт, то есть буфер не обновляется... Mad

alx32

Сообщения : 2
Дата регистрации : 2012-06-20

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Проблема с открытием COM-порта

Сообщение  electrik в Вс Июл 01, 2012 1:15 pm

попробуй создать буфер типа zstring
dim buffer as zstring * 65536

get #1,,buffer

поидее функция гет, сама должна работать с линуксовыми буферами, а тебе лишь без забот нужно читать.

а вообще в документации есть следующее:
'TBn'
Set the 'Transmit Buffer' size (n>=0), 0 = default, depends on platform 
'RBn'
Set the 'Receive Buffer' size (n>=0), 0 = default, depends on platform 

мы хотим изменить размеры буферов, будет так
open com "com1:9600,n,8,1,TB65536,RB65536"
вроде так, ну там уж по эксперементируешь.
у меня тоже были проблемы с ком портом, но я нестал юзать fb функции, а под виндами родной api юзаю.
просто, была проблема с xon/xof, в fb оно отключено, покрайней мере в исходниках ковырялся, под win оно вырублено.
там есть флаг, включающий управление потоком xon/xoff, он почему-то не поставлен.
я стал юзать winapi, написал свои функции, не ставил флаг, приходящий xon/xoff с машины где-то терялся. как поставил флаг, все сразу стало нормально.
хотя народ модемами пользуется, вродь там все приходит. чесно говоря, странности какие-то.

electrik

Сообщения : 394
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Проблема с открытием COM-порта

Сообщение  alx32 в Вс Июл 01, 2012 5:48 pm

С TB и RB уже химичил, не помогает...
Буфер у меня временный буфер у меня определяется в памяти как байтовый по allocate, в него пересылаются данные из приёмного буфера, а потом пишутся в файл.
Мне кажется, что нужно как-то сбрасывать приёмный буфер, толи выжидать какое-то время, чтобы драйвер сам его сбросил, или это решать повторным переоткрытием файла?

alx32

Сообщения : 2
Дата регистрации : 2012-06-20

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Проблема с открытием COM-порта

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения