Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработка ответов rs232 
:(
    Опции темы
z006
Дата 19.6.2013, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.6.2009

Репутация: нет
Всего: нет



Добрый день.сел разбираться в работе с rs232,и что-то столкнулся с не понятным мне явлением.
если читаю ответ от модема по кол-ву пришедших бит-то ответ "рвется" на части.думал дело в стоп-бите,пробую читать ответ (приш.биты-1) а мне ответ так-же рвет,да ещё и не пойми откуда впихивает кучу левых бит.одним словом не пойму что не так.
модем рабочий,проверяют его на Terminal 1.9-там читает ответы нормально.значит где-то у меня косяк,но не пойму где.дальше покажу код инициализации порта,и код чтения ответа:

Код

procedure PortInit;
  var
   ThreadID:dword;
  begin
  KolByte:=0;

  CommHandle := CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
  SetCommMask(CommHandle,EV_RXFLAG);

  GetCommState(CommHandle,DCB);
   DCB.BaudRate:=CBR_9600;
   DCB.Parity:=NOPARITY;
   DCB.ByteSize:=8;
   DCB.StopBits:=ONESTOPBIT;
   DCB.EvtChar:=chr(13);
   SetCommState(CommHandle,DCB);
   CommThread := CreateThread(nil,0,@ReadComm,nil,0,ThreadID);
  end;



Код

procedure ReadComm;
  var
   Resive:array [0..$FF] of char;
  begin
  while true do
   begin
    TransMask:=0;
    WaitCommEvent(CommHandle,TransMask,@Ovr);
    if (TransMask and EV_RXFLAG)=EV_RXFLAG then 
     begin
      ClearCommError(CommHandle,Errs,@Stat);
      Kols := Stat.cbInQue;
      ReadFile(CommHandle,Resive,Kols,Kolsp,@Ovr);
      form1.Memo1.Text:=form1.Memo1.Text+string(Resive);
      Form1.Memo1.Lines.Add('----------');
      Form1.Memo2.Lines.Add(StrToHex(string(Resive)));
      Form1.Memo2.Lines.Add('----------');
     end;
    end;
  end;


теперь наглядно покажу что происходит:
скрины делались так:запустил прогу-инициализировал порт-позвонил на модем-сбросил звонок на модем-отключил прогу от порта-сделал скрин-закрыл прогу.затем цикл повторялся,т.е. изменений между скринами не вносилось в код никаких вообще.
порция скринов №1,читаем со стоп-битом:
http://s48.radikal.ru/i120/1306/89/77605d504297.jpg
http://s020.radikal.ru/i722/1306/16/61ed6e5d7f11.jpg
http://s52.radikal.ru/i137/1306/d1/875b98bea672.jpg

порция скринов №2,читаем БЕЗ стоп-бита:
http://s61.radikal.ru/i174/1306/86/d110446273ca.jpg
http://i060.radikal.ru/1306/e4/06594e6cfbd4.jpg
http://s09.radikal.ru/i182/1306/d4/4ab9e69763bb.jpg


что за ерунда творится?????

Это сообщение отредактировал(а) z006 - 19.6.2013, 23:55
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.