各位帅哥,美女,
小弟今天:
var s:byte; begin s:=171;
mscomm1.output:=char(s); //通过串口按件发送数据end;
//问题是在我通过MSCOMM进行发送数据时,为何截获是数据变成了 00 ,而不是应该出现的 AB 数据?不知为何,特请指教,
此献上50分做为悬赏分数,谢谢!
小弟今天:
var s:byte; begin s:=171;
mscomm1.output:=char(s); //通过串口按件发送数据end;
//问题是在我通过MSCOMM进行发送数据时,为何截获是数据变成了 00 ,而不是应该出现的 AB 数据?不知为何,特请指教,
此献上50分做为悬赏分数,谢谢!
mscomm1.output := 'AB'; 或者mscomm1.InputMode := comInputModeBinary;
mscomm1.output := 171;
跟输出什么关系?
begin
s:=171;
mscomm1.output:=char(s); //通过串口按件发送数据
end;
这种用法对于MSComm来说是错误的,因为你的S定义的是Byte类型,这样的话只能发送小于127的字节。
请各位仔细看一下MSComm的Output类型定义,它定义的是OleVariant类型,你将其它类型的数据赋值给OleVariant类型,中间编译程序会代你进行转换,但隐式转换是会出错的!这也是为什么不能发送大于127值的原因。
应该这样:procedure TForm1.SendButtonClick(Sender: TObject);
var
Data:OleVariant;
Bytes:Array [0..255] of Byte;
i:integer;
begin
//创建Variant类型的数组,数组元素为字节类型,个数256个
Data:=VarArrayCreate([0,255],varByte);
//为每个数组元素赋值
for i:=0 to 255 do
begin
Data[i]:=i;
end;
//发送这256个字节
MSComm1.Output:=Data;
end;
发送结果可用其它的串口调试器接收,发现其值是从00到FF的值,中间任何一个值都不缺,也就是说发送是成功的
var s:Variant; //当然也可以定义为var s:OleVariant;这两种类型都可以
begin
s:=Byte(171);
mscomm1.output:=s; //通过串口按件发送数据
end;
http://download.csdn.net/source/1498637
http://download.csdn.net/source/1498644
然后具体操作如下:var sa:array of byte;
begin
setlength(sa,2);
sa[0]:=171;
sa[1]:=181;
mscomm1.output:=sa;
end;
串口监听结果将会是 AB B5
这就解决的串口通讯发送大于128的问题了,这里谢了各位,结贴送分!