![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Всем доброго вечара!
Хочу написать програмку для чтения информации с ком порта, пробовал писать через winapi, так же пробовал через компонент(BComPort), результат везде одниковый, хотя в hyper терминале и терминале Bray отображаеться все корректно... вот кусок кода отвечающий за чтение Код:
procedure TForm1.Button4Click(Sender: TObject); Var RCBuf:PChar; //Буфер данных для приема nToRead:Cardinal; //Число байт для чтения nRead:Cardinal; //Число прочитанных байт ComStat:TComStat; //состояние порта Errs:Dword; i:integer; tmpDec,tmpHex:string; begin ClearCommError(POrt,Errs,@ComStat); //считываем состояние порта nToRead:=ComStat.cbInQue; //считываем число байт для чтения из структуры nToReadLabel.Caption:=IntToStr(nToRead); //выводим на форму число байт для чтения ReadFile(Port,RCBuf^,nToRead,nRead,nil); //считываем данные nReadLabel.Caption:=IntToStr(nRead); //выводим на форму число прочитанных байт RichEdit1.Lines.Add( RCBuf); RcDataLabel.Caption:=RCBuf; end; http://imagepost.ru/?v=texpqnvoenetu...fampmxwkmu.JPG |
#2
|
||||
|
||||
![]() Возможно, нужно использовать что то из серии OemToChar, для преобразования.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
||||
|
||||
![]() Цитата:
|
#4
|
||||
|
||||
![]() Есть подозрение, что символы приходят в OEM кодировке, если так, то конвертируй их.
P.S. Посмотрел рисунок, похоже на юникод. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 09.08.2011 в 22:38. |
#5
|
||||
|
||||
![]() так там данные структурированные приходят... нужно как минимум знать протокол передачи данных с этого устройства, тупо чтением байт здесь не обойтись..
а что за терминал?? |
#6
|
||||
|
||||
![]() Цитата:
На картинке 3 терминала, 2 из них работают) 3й мой, не знаю как заставить показывать что и те 2... данные приходят в одном и том же формате - заголовок "STARLINE " потом 8 байт динамической части, затем 6 бай статической и еще 2 байта динамики.. передача осуществляеться в таком же формате... вот я только никак понять не могу как же воспользоватья функцией OemToChar взодящие данные в string, далее они выводится в richedit пишу так: Код:
OemToChar(PAnsiChar(RCBuf), PWideChar(str)); RichEdit1.Lines.Add (str); Приложение компилируеться без проблем, стоит только запросить данные порта, так сразу вылазиет ерор.... |