Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > обработка ответов rs232


Автор: z006 19.6.2013, 23:54
Добрый день.сел разбираться в работе с 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


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)