Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.208.203.36] |
|
Сообщ.
#1
,
|
|
|
Как реализовать прием передачу последовательных данных через COM порт?
|
Сообщ.
#3
,
|
|
|
Зачем усложнять себе жизнь? Не проще ли использовать готовый компонент?
Например, TComPort 3.0 работает с C Builder версии от 3 до 6 Использовать вообще очень просто ComPort1->ShowSetupDialog(); // Диалог настроек COM-порта ComPort1->Open(); // Соединяемся ComPort1->WriteStr("Hello!"); // Пишем строку ComPort1->Close(); // Закрываем COM-порт и такъ далее |
Сообщ.
#4
,
|
|
|
Vovik Если есть желание можешь глянуть как осуществить последовательный прием-передачу посредством COM порта с использованием WinAPI на стр.7, тема "Работа с COM портом". Там есть небольшая прога с коментариями.
|
Сообщ.
#5
,
|
|
|
програмируй сам, без компанентов, разберёшся - будешь мастером! поищи как програмируют через API функции, в нете есть статьи по программированию последовательных интерфейсов с помощью API функций. так и пиши в поисковиках. Тема интересная, и не такая уж сложная если разобраться. Пользуй статьи и MSDN, там описание API. Погляди CreateFile(), ReadFile(), WriteFile(), GetCommState(), структуры DCB, и ещё там несколько. а вообще в чём твоя задача?
|
Сообщ.
#6
,
|
|
|
W_in_d тебе отличную ссылку кинул! (http://www.rs232.ru/doc002.html) респект ему. больше ничего и не надо, MSDN тока.
|
Сообщ.
#7
,
|
|
|
Возникла следующая проблема при работе с нестандартным СOM устройством: данные от устройства поступают пакетами по 18 байт, потом пауза = времени передачи 2-ух байтов, затем следующая посылка... Данные в посылке произвольные двоичные, поэтому нельзя использовать XON, XOFF символы. Вопрос: как отследить начало (конец) посылки в среде Win32?
|
Сообщ.
#8
,
|
|
|
Vovik поделись знаниями - как продвигаеться работа с Com-портом. Чем пользуешься компонентом или WinApi?
А я тут с Чтением из порта встрял..... |
Сообщ.
#9
,
|
|
|
Цитата makaka @ Возникла следующая проблема при работе с нестандартным СOM устройством: данные от устройства поступают пакетами по 18 байт, потом пауза = времени передачи 2-ух байтов, затем следующая посылка... Данные в посылке произвольные двоичные, поэтому нельзя использовать XON, XOFF символы. Вопрос: как отследить начало (конец) посылки в среде Win32? И даже заголовка у пакете нет? 1. С помощью COMMTIMEOUTS настроить таймауты и читать данные блоками по 18 байт - контроллер COM-порта сам выровняется на границы блока данных. Недостаток - высокие требования к исполнению протокола. 2. Читать по одному байту и отсчитывать интервалы времени между байтами. Оба варианта, естественно, надо делать в отдельном потоке. |
Сообщ.
#10
,
|
|
|
Господа! Подскажите пожалуйста, че должна вернуть функция GetLastError, если я пытаюсь открыть уже открытый СОМ порт и получаю INVALID_HANDLE_VALUE от CreateFile. По логике должно возвращаться ERROR_ALREADY_EXISTS, хотя тоже сомнительно - ведь в вызове CreateFile при работе с коммуникационными устройствами параметр dwCreationDistribution устанавливается OPEN_EXISTING. Короче тот код, который выплевывает GetLastError при попытке открыть уже открытый в моем процессе порт или несуществующий физически - нигде не зарегестрирован. Описания стандартных системных кодов ошибок заканчивается на 6118L, а этот - 0x77F51502. Никак не пойму...
|
Сообщ.
#11
,
|
|
|
На счет кода ошибки фиг знает.
Цитата Seva @ 1. С помощью COMMTIMEOUTS настроить таймауты и читать данные блоками по 18 байт - контроллер COM-порта сам выровняется на границы блока данных. Недостаток - высокие требования к исполнению протокола. 2. Читать по одному байту и отсчитывать интервалы времени между байтами. Оба варианта, естественно, надо делать в отдельном потоке. Засинхронизировать по времени порт очень трудно. А читать по одному байту долго на мой взгляд. Мой совет использовать функцию ClearCommError, где один из параметров адрес на структуру COMSTAT, где в свою очередь есть поле cbInQue которое содержит количество байт не считанных из буффера. код типа таков: DWORD dwValue; COMSTAT stat; byte *buf; while(){ // сдесь можно подождать WaitCommEvent ClearCommError(hFile, &dwValue, &stat); if(stat.cbInQue == 0) continue; buf = new BYTE[stat.cbInQue]; ReadFile(hFile, buf, stat.cbInQue, &dwValue, &ov_read); ... delete buf; } Далее можно byf добавлять в большой buf и обрабатывать (разбивать на 18б блоки). Но так как размер пакета фиксирован в том что я написал, я смысла мало вижу . А вообще Seva прав - пакет должен иметь заголовок. |
Сообщ.
#12
,
|
|
|
А вот мне нужно обратиться в midlet к порту, на котором сидит bluetooth в сотке. Необходимо принимать и получать данные с gps приемника, обрабатывать их, формировать в sms, отправлять его на другую сотку, а там посылать по bluetooth на комп. Задача - врагу не пожелаешь. Это для диплома. Просьба ко всем, кто знает как делать хоть что-нибудь из перечисленного, поделиться толковым рабочим примером/исходником в j2me
M Вообще-то на этом форуме есть раздел, посвященный Java. Писать вопрос куда попало не следует. Сообщение будет через некоторое время удалено |
Сообщ.
#13
,
|
|
|
У меня типо подобное. Только надо принять сигнал с GPS приёмника - Com порта - разослать этот сигнал по локальной сети. Конечная система обрабатывает сигнал и пересылает к себе на порт. И приложение с GPS навигацией сможет работать на удалённом компьютере.
|