我有一个使用AT命令控制的短信网关组件工作正常,但我无法解析从设备中收到的字符串。
首先,我使用硬件流控制对我有何影响?
我使用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 :(得分:1)
这里的问题是字符串。 在XE2中,string是unicode字符串。 在Delphi 2007及以下版本中,string是ansi string。 它们的大小不同。 您必须通过检查TComport来确保它。