如何更好的接收和发送串口数据(去除串口收到的#0)
各位好:
小弟现在变成碰到了几个问题,请各位帮忙看一下。
小弟最近由于工作上要求,需要编写一个程序,以串口连接被测试主板和电脑,判断并接收的数据后,并发送命令数据至串口。
我是这样写的;
串口初始化按钮内容
with MSComm1 do
begin
// CommPort:=StrToInt(SerialTxt.Text); //使用Com1
CommPort:=1; //使用Com1
Settings:='38400,n,8,1'; //设置通信口参数
InBufferCount:=0; //清除接受缓冲区
OutBufferCount:=0; //清除发送缓冲区
InBufferSize:=1024; //设置接受缓冲区为1024字节
OutBufferSize:=1024; //设置发送缓冲区为1024字节
RThreshold:=1; //设置接受字节产生OnComm事件
SThreshold := 0; //一次发送所有数据
InputLen:=1;//每次从输入缓冲区中接收一个字符
InputMode:=ComInputModeText; // 设置接受数据模式为文本方式
Handshaking:=0;//由信号线RTS/CTS自动进行流量控制
end;
串口触发事件
procedure TForm1.MSComm1Comm(Sender: TObject);
var
C:string;
i:Integer;
begin
C:=MSComm1.Input;
Str:=Str+C;
if Pos(#13,C)<>0 then //收到回车,则显示一行数据
begin
mmo1.Lines.Add(Str);
Str:='';//全局变量
end;
end;
打开串口按钮事件
If (not MSComm1.PortOpen )then //判断通信口是否打开
MSComm1.PortOpen:=True;
关闭串口按钮事件
If MSComm1.PortOpen=True then //判断通信口是否打开
MSComm1.PortOpen:=False;
1、用delphi的使用MSCOMM控件接收串口数据时,接收到的第一个数据是#0,是空字符吗?后面的#$D和#$A是否是回车和换行的意思?
下图是读取到的串口信息
<img src="http://www.ouliu.net/r/20120105161642q4jji.jpg" alt="代码" /></img>
图片显示不出来,前几段是
#0#$D#$D#$A' VxWorks System Boot#$D#$D#$A'Copyright 1984-2005 Wind River Systems,……
类似这样的,
2、我如何写才能将这些信息显示出来,效果最好是类似Windows超级终端的那样。
3、我做了一下实验,发现如下规律:
打开程序后,先点初始化按钮
通电-->打开端口 有数据显示
打开端口-->通电 无数据显示
不关闭程序继续操作……
关闭端口-->断电-->通电-->打开端口 有数据显示
断电-->关闭端口-->通电-->打开端口 有数据显示
继续操作……
断电-->通电-->关闭端口-->打开端口 有数据显示
发现如果要得到显示的数据,必须先通电再打开串口,如果通电之前串口已打开的,必须先关闭串口,再打开才能显示出数据
但是使用“串口调试助手2.1”则没有这个问题,只要打开串口后,断电后不做其他操作,继续通电,立即可读取到串口的数据
那我要如何操作,才能使得在打开端口后,只要通电就能得到串口的数据?
恳请指点!
[解决办法]
换个组件啊,mscomm问题较多,我早就换asyncfree里的afcomport了
[解决办法]
MsComm接收操作字符,比如回车什么的,有时候会出问题,什么也不显示。
而且,触发不了接收过程的几率很大。。。
现在我用SpComm好多了