Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.08.2011, 21:11
Аватар для Graf33rus
Graf33rus Graf33rus вне форума
Прохожий
 
Регистрация: 25.03.2009
Сообщения: 10
Репутация: 10
По умолчанию Кракозябры в терминале, как избавиться?

Всем доброго вечара!
Хочу написать програмку для чтения информации с ком порта, пробовал писать через 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  
Старый 09.08.2011, 21:46
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Возможно, нужно использовать что то из серии OemToChar, для преобразования.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 09.08.2011, 22:19
Аватар для Graf33rus
Graf33rus Graf33rus вне форума
Прохожий
 
Регистрация: 25.03.2009
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Возможно, нужно использовать что то из серии OemToChar, для преобразования.
Можно маленько по подробней? =)
Ответить с цитированием
  #4  
Старый 09.08.2011, 22:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Есть подозрение, что символы приходят в OEM кодировке, если так, то конвертируй их.
P.S. Посмотрел рисунок, похоже на юникод.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 09.08.2011 в 22:38.
Ответить с цитированием
  #5  
Старый 09.08.2011, 22:36
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

так там данные структурированные приходят... нужно как минимум знать протокол передачи данных с этого устройства, тупо чтением байт здесь не обойтись..
а что за терминал??
Ответить с цитированием
  #6  
Старый 09.08.2011, 22:53
Аватар для Graf33rus
Graf33rus Graf33rus вне форума
Прохожий
 
Регистрация: 25.03.2009
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pilot_Red
так там данные структурированные приходят... нужно как минимум знать протокол передачи данных с этого устройства, тупо чтением байт здесь не обойтись..
а что за терминал??

На картинке 3 терминала, 2 из них работают) 3й мой, не знаю как заставить показывать что и те 2... данные приходят в одном и том же формате - заголовок "STARLINE " потом 8 байт динамической части, затем 6 бай статической и еще 2 байта динамики.. передача осуществляеться в таком же формате...

вот я только никак понять не могу как же воспользоватья функцией OemToChar

взодящие данные в string, далее они выводится в richedit
пишу так:
Код:
OemToChar(PAnsiChar(RCBuf), PWideChar(str));
RichEdit1.Lines.Add (str);
(вычитал на каком то форуме)
Приложение компилируеться без проблем, стоит только запросить данные порта, так сразу вылазиет ерор....
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025