Board logo

Subject: 关于cnrs232的问题 [Print This Page]

Author: kobaer    Time: 2010-9-1 15:40     Subject: 关于cnrs232的问题

今天遇见了一个很郁闷的问题

昨天用cnrs232 写了一个测试程序

结果完好


今天加上了CnRS232Dialog 后问题来了

无法获取串口返回的信息

在这之前 我只看了看cnvcl 的 例子

发现问题后 为了排除原因 将系统还原 然后再安装cnvcl

还是没有发现根源

结果在无意间 打开 了 调试信息查看器 后 程序正常了

非常郁闷  不知道是怎么回事  
代码如下

[Copy to clipboard]
CODE:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  rs1.StopComm;
end;
procedure TForm1.btn1Click(Sender: TObject);
var i: Integer;
  str, str1, temp: string;
begin
  temp := edt1.Text;
  str1 := edt1.Text;
  i := Pos(' ', Trim(str1));
  if i <> 0 then
  begin
    while i <> 0 do
    begin
      i := Pos(' ', Trim(str1));
      str := str + Trim(Copy(str1, 0, 3));
      str1 := Trim(Copy(str1, 4, Length(str1)));
    end;
    str1 := Trim(str);
    senddata(str1, Length(str1) div 2); //调用发送函数
  end
  else
    senddata(temp, Length(temp) div 2); //调用发送函数
end;

procedure TForm1.rs1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var
  i: integer;
begin
  viewstring := '';
  move(buffer^, rbuf, bufferlength);
  for i := 0 to bufferlength - 1 do
    viewstring := viewstring + inttohex(rbuf, 2) + '';
  viewstring := '接收' + viewstring;
  mmo1.lines.add(viewstring);
  mmo1.lines.add('');
end;
procedure TForm1.senddata(s: string; count: Integer);
var
  i, j: integer;
  commflg: boolean;
  a: array of Byte;
begin
  SetLength(a, count);
  i := 1;
  j := 1;
  //将string转换成byte数组
  while i < Length(s) do
  begin
    a[j] := Byte(strtoint('$' + copy(s, i, 2)));
    i := i + 2;
    j := j + 1;
  end;
  viewstring := '';
  commflg := true;
  for i := 1 to count do
  begin
    //调用组件写函数
    if not rs1.writecommdata(@a, 1) then
    begin
      commflg := false;
      break;
    end;
    //发送时字节间的延时
    sleep(2);
    viewstring := viewstring + inttohex(a, 2) + '';
  end;
  viewstring := '发送' + viewstring;
  mmo1.lines.add(viewstring);
  mmo1.lines.add('');
  if not commflg then messagedlg('发送失败 !', mterror, [mbyes], 0);
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
  if btn2.Caption = '连接' then
  begin
    rsd1.CommName := 'com1';
    rsd1.CommConfig := rs1.CommConfig;
    rsd1.Timeouts := rs1.Timeouts;
    if rsd1.Execute then
    begin
      rs1.CommConfig := rsd1.CommConfig;
      //mmo1.Lines.Add(IntToStr(rs1.CommConfig.BaudRate));
      rs1.Timeouts := rsd1.Timeouts;
      try
    //打开串口
        rs1.StartComm;
        mmo1.Lines.Add('串口打开成功');
        btn2.Caption := '关闭';
      except
    //如果错误则关闭
        rs1.StopComm;
        btn2.Caption := '连接';
        mmo1.Lines.Add('串口打开失败已关闭!');
      end;
    end
    else
    begin
      btn2.Caption := '连接';
      mmo1.Lines.Add('没有设置属性!无法打开串口!');
    end;
  end
  else
  begin
    rs1.StopComm;
    btn2.Caption := '连接';
    mmo1.Lines.Add('串口已关闭!');
  end;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
  mmo1.Clear;
end;

[ 本帖最后由 kobaer 于 2010-9-1 15:43 编辑 ]
Author: kobaer    Time: 2010-9-1 15:45

我使用其他的程序测试时没有错误的
排除是我机器的问题




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0