请教串口通信中数据接收的问题

YOUYOUDAMOTOU 2004-09-19 11:03:05
使用MOXA的PCOMM带的动态链接库编程,其中读串口函数定义如下
function sio_read(port: Longint; buf: PChar; len: Longint): Longint;
接收代码放在一个进程中,为MOXA例程,代码大意如下:
var
m_buf:array[0..511] of byte;

procedure TREADTHD.Execute;
begin
while not ComExit do
begin
Sleep(10);
Len:=sio_read(2,@m_buf,511);
a:=Len;
if (Len>0) then
begin
m_buf[Len]:=Char(0);
Synchronize(ShowData);
end;
end;
end;

procedure TREADTHD.ShowData;
var
Lend:LongInt;
begin
Lend:=Length(MainForm.Memo2.Text);
if (Lend>25000) then
begin
MainForm.Memo2.Text:=string(m_buf);
Exit;
end;
MainForm.Memo2.SelStart:=Lend;
MainForm.Memo2.SelLength:=0;
MainForm.Memo2.SelText:=String(m_buf);

MainForm.Edit2.Text:=inttostr(strlen(m_buf));
end;

问题为:1.接收数据时,用串口阿秀发字符串,多次发送数据MEMO能正常显示接收到的数
据,而EDIT则在发送字符>7个时,接收到的数据不正常,多次发送的结果时有
无,百思不得其解,请各位大虾答疑,谢谢。

2.用串口阿秀发送十六进制数据时,以上代码不能接收数据,改用以下代码可以
接收十六进制。

但小弟的问题在于不能找到一个方法将接收到的数据变为'000ma'或'00 00 00
4A'之类的数据用于进行判断接收到的数据进而下发相应的指令代码。小弟的
问题1也如此,EDIT主要用途就是整合接收到的数据进行逻辑比较判断。

或许串口通信接收的数据处理方法另有其他路途,若各位大虾有知,请一并
告之,谢谢!
var
s:array[0..15] of char;
n:integer;
begin
for i:=0 to 9 do
s[i]:=chr(48+i);
for i:=10 to 15 do
s[i]:=chr(55+i);
for i:=1 to Len do
begin
n:=ord(m_buf[i]);
MainForm.Memo1.Lines.Add(s[n div 16]+s[n mod 16]);
end;
MainForm.Memo1.Refresh;
end;
...全文
137 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
YOUYOUDAMOTOU 2004-09-20
  • 打赏
  • 举报
回复
发现昨天写错误一些地方,问题应该为

1.字符串接收的问题
有一个
m_buf:array[0..511] of char;
m_buf中有
m_buf[Len]:=Char(0);//Len是m_buf的长度

如何将m_buf转换为可以用于进行逻辑判断的字符串,如string的格式而保证数据不丢失?

2.16进制接收的问题
有一个
m_buf:array[0..511] of byte
也是如何将m_buf转换为用于进行逻辑判断的字符串,如string的格式?

谢谢楼上两位,并期待高人指点。

yinzhiw 2004-09-19
  • 打赏
  • 举报
回复

不会,帮你顶顶把
YOHOYOHO 2004-09-19
  • 打赏
  • 举报
回复
同上。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧