|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не принимает данные с Com-порта
Источник сигнала микроконтроллер , который каждые 500мс , посыалет 1 байт информации. На приеме комп , чтение данных в синхронном режиме , тоесть 1 поток . Проблема в том , что считать данные не могу , вроде и порт открывается и настройка проходит. но не читает данные. Листинг программы приложен.
|
#2
|
||||
|
||||
у вас
Цитата:
лучше определять количество "готовых к чтению" из порта байт так Код:
var ComStat:TComStat; // состояние порта Errs:Dword; // значение ошибки RCBuf:PChar; //Буфер данных для приема nToRead:Cardinal; //Число байт для чтения nRead:Cardinal; //Число прочитанных байт begin ClearCommError(FHandlePort,Errs,@ComStat); // получаем состояние порта nToRead:=ComStat.cbInQue; // получаем число байт для чтения if nToRead>0 then begin ReadFile(FHandlePort,RCBuf^[1],nToRead,nRead,nil); ByteRead.Caption:=IntToStr(nRead); //выводим на форму число прочитанных байт Buf.Caption:=RCBuf; end; end; Последний раз редактировалось cotseec, 24.03.2012 в 21:02. |
#3
|
|||
|
|||
Так не работает
Последний раз редактировалось Profmax, 24.03.2012 в 22:59. |
#4
|
|||
|
|||
Дело в том что, для корректной работы , мне нужн опринимать определенное кол-во байт , по крайней мере на данном этапе разработки, а в приведенном вами примере , при нажатии на кнопку (допустим) считываться будет весь буффер приема.
|
#5
|
||||
|
||||
для начала просто посмотрите, есть ли что-то в буфере приема, если есть, тогда и читайте необходимое вам количество байт (что станет с непрочитанными байтами в буфере после прихода новой порции данных - загадка), да.... и если вы работаете не в борландовской дельфи, а в рад студиях, то PChar у вас unicod, т.е. один символ занимает 2 байта, следовательно, если вы читаете в буфер (обратите внимание на чтение из буфера) в юникодную строку, а потом выводите, то может показать....ничего не показать
Последний раз редактировалось cotseec, 24.03.2012 в 23:32. |
#6
|
|||
|
|||
В том то и дело , что возвращает значение прочитанных байт равным нулю , тоесть в буффере ничего нет , данные не принимает , скорости одинаковые, таймауты выставленны на мгновенный прием. Делал по примеру , все работает в нем , хотя у меня все так же. Если не сложно посмотрите в чем у меня ошибка.
|
#7
|
||||
|
||||
посмотрел, кое-что изменил, проверил - принимает (только 6 байт, как указано), прикрепляю архив
ошибка в том, что перед тем как куда-то считывать, надо это распределить в памяти (если PChar, то StrAlloc(nToRead), потом StrDispose) Последний раз редактировалось cotseec, 24.03.2012 в 23:41. |
Эти 2 пользователя(ей) сказали Спасибо cotseec за это полезное сообщение: | ||
Misha_White (17.09.2018),
Profmax (24.03.2012)
|