|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
COM порт, чтение байта равного 00h
Нужно читать байты приходящие на COM порт от внешнего устройства. Пробовал компоненты TBComPort ver.2.10, ComDrv32, ТComPort Library version 4.10 by Dejan Crnila.
Формат сообщений таков, что нулевой байт не является признаком конца, а является информацией. Получается при приеме сообщения 09 AF 06 00 00 01 05 1F 90 BB BB BB EC 02, я получаю только 09 AF 06. Взято из примера для ТComPort. Код:
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer); var Str: String; begin ComPort.ReadStr(Str, Count); Memo.Text := Memo.Text + Str; end; Но это событие происходит при получении нулевого байта. Аналогично обстоят дела при использовании других компонентов. Как реализовать запись сообщения из COM порта в массив из байтов? |
#2
|
|||
|
|||
Не надо собирать получаемое сообщение в Memo, всё равно ничего не увидите.
Заведите строку, и собирайте сообщение в неё. А затем печатайте побайтно. |
#3
|
||||
|
||||
Я бы даже не стал читать строку, а читал бы буфер.
Скорее всего есть функция/процедура ReadBuf. Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#4
|
|||
|
|||
спасибо за ответы.
затупил что-то Код:
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer); var //Str: String; i: Integer; begin ComPort.Read(buf, Count); for i:=1 to Count do Memo.Text := Memo.Text + ' ' + IntToHex(buf[i],1); end; |