首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么更好的接收和发送串口数据(去除串口收到的#0)

2012-02-21 
如何更好的接收和发送串口数据(去除串口收到的#0)各位好:小弟现在变成碰到了几个问题,请各位帮忙看一下。小

如何更好的接收和发送串口数据(去除串口收到的#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好多了

热点排行