Mscom串口通讯的问题(20分)

  • 主题发起人 主题发起人 surely2008
  • 开始时间 开始时间
S

surely2008

Unregistered / Unconfirmed
GUEST, unregistred user!
我用VB与宇光AI-808型仪表通讯时用的是数组的方式,及Mscomm1.output=array.但是在Delphi中
使用这一句时提示类型不对,请问该怎么办?
 
顶一下,为什么没有人关心串口通讯呢?
 
没用过MSCOMM,为什么不用SPCOMM或COMPORT呢?这些是DELPHI的控件,再说“Mscomm1.output=array”这句怎么看都是错的,
array是关键字,不能当变量的。
 
我这里array1是定义的一个数组,在vb中我都是这样做的.源程序如下,取了一段:
procedure TForm1.FormCreate(Sender: TObject);
begin
mscomm1.CommPort:=1;
mscomm1.Settings:='9600,n,8,2';
mscomm1.InputLen:=0;
mscomm1.InputMode:=comInputModeBinary;
mscomm1.PortOpen:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
type Tarray1=array[1..8] of byte;
var arr2:Tarray1;
str:integer;
begin
arr2[1]:=129;
arr2[2]:=129;
arr2[3]:=67;
arr2[4]:=0;
arr2[5]:=232;
arr2[6]:=3;
arr2[7]:=44;
arr2[8]:=4;
edit1.Text:=inttostr(arr2[1]);
MSComm1.InBufferCount:=0;
//MSComm1.Output:=chr(129)+chr(129)+chr(67)+chr(0)+chr(232)+chr(3)+chr(44)+chr(4);
MSComm1.Output:=arr2;
end;

end.
 
顺便问一下你说的spcomm和COMPORT控件在什么位置?我没找到.
 
这个句不要这样写啊。Delphi我就知道你可以
MSComm1.Output:='你要传送的字符';
数组我没有这样用过。我通常都是直接传一串数字或批令过端口。
 
MSComm1.Output:='你要传送的字符';
 
你的意思是这样的吗?
MSComm1.Output:=chr(129)+chr(129)+chr(67)+chr(0)+chr(232)+chr(3)+chr(44)+chr(4);
好像不行.
 
这样也不行mscomm1.Output:='129 129 67 0 232 3 44 4';
 
哪位DFW帮帮忙,解决一下.谢谢.
 
DFW都上哪里去了?[:(!]
 
你的那段程序我看明白了,由于没用过MSCOMM,所以不知道MSCOMM。OUTPUTA在DELPHI里是怎么定义的类型,你是不是要
将arr2这个数组里的数据一次性发出?建议你改用COMPORT这个第三方控件,它有函数将指定地址的数据按指定数量发出,
例如你的程序可以这样:ComPort.Write((@arr2)^,8);
这个控件很容易找到的,找不到我可以发给你。MSCOMM是VB带的,我不敢说它不好,但到底不是为DELPHI开发的。
 
好人做到底吧,http://61.132.118.185:8080/control/cport2.63.zip,不过现在2.64也出了
 
谢谢你了.我去下载一个看看.
 
这里大富翁大多对底层的东西不感兴趣!!!你还是自己看书解决吧!以前我也问过串口问题
可是。。。。。最后自己买了书,哎!!
 
串口通信,SPCOMM可以轻松搞定的。
打开串口:comm1.StartComm;
关闭串口:comm1.StopComm;
发送数据:
procedure TTryfrm.senddata;
var
sendstr:string;
begin
sendstr:=edit1.Text;
if not Comm1.WriteCommData(pchar(sendstr),length(sendstr)) then
messagebox(Application.Handle,pchar('发送时,发生错误!'),pchar(Caption),MB_ICONWARNING);
end;

收到数据:
procedure TTryfrm.Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word);
var
s: string;
begin

SetLength(S, BufferLength);
//接收RS232的数据并显示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.add('收到消息:');
Memo1.Lines.Add(S);
memo1.lines.add('');
Memo1.Invalidate;
end;

 
多人接受答案了。
 
后退
顶部