TComPort действует странно
У меня есть SMS-шлюз, которым я управляю с помощью AT-команд, компонент работает нормально, но я не могу анализировать строки, полученные с устройства.
Прежде всего, я использую аппаратный контроль потока, как это влияет на меня?
Я использую компонент TComDataPacket, у которого есть событие onPacket(), где я получаю строку, если я использую отладчик, я могу видеть строку в порядке, но если я использую 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;
1 ответ
Проблема здесь в строке. В XE2 строка является строкой Юникода. в Delphi 2007 и ниже строка является строкой ansi. Их размер отличается. Вы должны убедиться в этом, проверив источник TComport.