![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Источник сигнала микроконтроллер , который каждые 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)
  | ||