2012-05-10 3 views
1

У меня есть шлюз SMS, который я контролирую с помощью AT Commands, компонент работает нормально, но я не могу разобрать строки, полученные с устройства по-разному.TComPort действующий wierd

Прежде всего, я использую аппаратное управление потоком, как это влияет на меня?

Я использую компонент TComDataPacket, у которого есть событие onPacket(), где я получаю строку, если я использую отладчик, я могу видеть строку ok, но если я использую pos() для поиска или ShowMessage(), чтобы показать строку, строка очень короткая, и я не вижу никаких # 00

Я попытался использовать событие RxChar, но не был вызван, и RxBuf дает нарушение доступа.

Я использую Delphi XE 2, что-то не так с компонентом, или я что-то делаю неправильно?

LE: onPacket событие() зависает, если я не вставить сон в конце метода здесь мой код:

procedure TfrmMain.comPacketPacket(Sender: TObject; const Str: string); 
var 
    S,numar,coord : string; 
    i,poi,rr,j,tmp2 : Integer; 
const 
    Readul = 'READ|'; 
    delim = 'gps='; 
    CMG = 'CMGL'; 
begin 
    if pos('CMTI',Str) > 0 then 
          SendATCommand('AT+CMGL="ALL"'); 
    for i := 1 to Length(Str) do 
    if Str[i] in ['A'..'Z','a'..'z','0'..'9','=','.'] then S := S + Str[i] 
    else if Str[i] = '"' then S := S + '|'; 
    repeat 
     poi := Pos('gps=',S); 
     if poi > 0 then 
     begin 
      j := poi; 
      repeat 
      Dec(j); 
      rr := PosEx(Readul,S,j); 
      if rr >= poi then rr := 0; 
      until (rr>0) or (j = 1); 
      numar := Copy(S,rr+Length(Readul)+1,PosEx('|',S,(rr+Length(Readul)+1)) - (rr + Length(Readul) + 1)); 
      ShowMessage('Trimit la numarul ' + numar); 
      coord := Copy(S,poi + Length(delim),PosEx(CMG,S,poi) - poi - Length(CMG)); 
      S := Copy(S,poi + Length(delim),Length(S)); 
     end; 
    until poi = 0; 
    Sleep(1500); 
end; 
+0

В какой версии вы используете? Существует несколько конкурирующих версий. Многие версии имеют серьезные ошибки в компоненте пакета. Я печально и смиренно признаюсь, что я не использую пакет, и поэтому я был противен тому, чтобы никогда не исправлять ошибки Packet. Избегайте пакетов. Без него. Готово. –

+0

@WarrenP последняя версия этого компонента http://sourceforge.net/projects/comport/ – opc0de

+0

Я считаю, что в версии все еще есть ошибки пакетов в Unicode delphi. –

ответ

1

Проблема здесь строка. В XE2 строка - это строка в Юникоде. в Delphi 2007 и ниже, строка - строка ansi. Их размер отличается. Вы должны убедиться в этом, проверив источник TComport.