Проблема с открытием COM-порта
Участников: 4
Страница 1 из 1
Проблема с открытием COM-порта
Набрёл недавно на 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" жирным не выделяет.
Буду весьма признателен за помощь советом.
Но столкнулся с такой незадачей.
Имеется устройство, которое управляется от компьютера через модуль 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
Проблема решена
Чтение сообщений на форуме www.freebasic.net навело на решение. Порт нормально открывается, если запретить проверку сигнала DSR:
open Com "COM9:115200,n,8,1,ds0" as 1
Очевидно, FreeBasic честно проверяет этот сигнал, а драйвер его не эмулирует.
open Com "COM9:115200,n,8,1,ds0" as 1
Очевидно, FreeBasic честно проверяет этот сигнал, а драйвер его не эмулирует.
Дмитрий Скородумов- Сообщения : 2
Дата регистрации : 2010-11-18
Прием данных СОМ-портом
Есть микроконтроллер передающий данные на СОМ-порт в формате: старт_бит, байт_данных, бит_четности, стоп_бит
Передача данных производится в одну сторону по одному проводу RXD (плюс земля).
Как напечатать символ (например в режиме screen 12) пришедший на СОМ-порт?
Очевидно, основная программа должна начинаться с открытия СОМ-порта:
open Com "COM1:1200,o,8,1,ds0" as #1
(или так: open Com "COM1:1200,o,8,1,ds0,cs0" as #1)
А дальше?
Передача данных производится в одну сторону по одному проводу 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
Прием данных СОМ-портом
Кажется разобрался. Для чтения СОМ-порта и вывода результата использую такой код:
- Код:
Open com "COM1:1200,o,8,1,CD0,CS0,DS0" As #1
GET #1, , buffer
Print buffer
workman- Сообщения : 25
Дата регистрации : 2010-12-03
Re: Проблема с открытием COM-порта
Люди, помогите с буфером приёма в линукс, как я понял он тама 4Кб величиной, а мне нужно загрузить с устройства 64Кб.
В общем код:
Можно конечно же организовать приём данных кусками по 256 байт, но при этом младший бит всегда в единице и данные портятся, и повторяются с периодичностью в 256 байт, то есть буфер не обновляется...
В общем код:
- Код:
open com Command(1)&":38400,N,8,1,BIN,CD0,CS0,DS0" as #1 'открываю порт
...
'здесь гружу данные
put #1, , bt 'в bt команда чтения для устройства
sleep 20000 'ждём заполнения буфера
get #1, ,*buffer,65536 'здесь читаю содержимое буфера
Можно конечно же организовать приём данных кусками по 256 байт, но при этом младший бит всегда в единице и данные портятся, и повторяются с периодичностью в 256 байт, то есть буфер не обновляется...
alx32- Сообщения : 2
Дата регистрации : 2012-06-20
Re: Проблема с открытием COM-порта
попробуй создать буфер типа 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 с машины где-то терялся. как поставил флаг, все сразу стало нормально.
хотя народ модемами пользуется, вродь там все приходит. чесно говоря, странности какие-то.
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- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Проблема с открытием COM-порта
С TB и RB уже химичил, не помогает...
Буфер у меня временный буфер у меня определяется в памяти как байтовый по allocate, в него пересылаются данные из приёмного буфера, а потом пишутся в файл.
Мне кажется, что нужно как-то сбрасывать приёмный буфер, толи выжидать какое-то время, чтобы драйвер сам его сбросил, или это решать повторным переоткрытием файла?
Буфер у меня временный буфер у меня определяется в памяти как байтовый по allocate, в него пересылаются данные из приёмного буфера, а потом пишутся в файл.
Мне кажется, что нужно как-то сбрасывать приёмный буфер, толи выжидать какое-то время, чтобы драйвер сам его сбросил, или это решать повторным переоткрытием файла?
alx32- Сообщения : 2
Дата регистрации : 2012-06-20
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|