今天遇见了一个很郁闷的问题
昨天用cnrs232 写了一个测试程序
结果完好
今天加上了CnRS232Dialog 后问题来了
无法获取串口返回的信息
在这之前 我只看了看cnvcl 的 例子
发现问题后 为了排除原因 将系统还原 然后再安装cnvcl
还是没有发现根源
结果在无意间 打开 了 调试信息查看器 后 程序正常了
非常郁闷 不知道是怎么回事
代码如下
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 编辑 ]