怎样把16进制数EF从串口发出,最好给完整的收发原代码(收到的也是16进制的数),我用的MSCOMM控件,我真的实在想不出来了。我的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
send:array[1..1] of byte;//因为16进制EF大于127。我所以用了BYTE。
//并且协议要求发16进制的EF。
begin
send[1]:=byte(239);
MSComm1.Output :=send[1];
//编译没错。执行时提示:无效的属性值。MSDN中查到错误号380。
end;我的QQ:83743478。[email protected]
procedure TForm1.Button1Click(Sender: TObject);
var
send:array[1..1] of byte;//因为16进制EF大于127。我所以用了BYTE。
//并且协议要求发16进制的EF。
begin
send[1]:=byte(239);
MSComm1.Output :=send[1];
//编译没错。执行时提示:无效的属性值。MSDN中查到错误号380。
end;我的QQ:83743478。[email protected]
解决方案 »
- delphi初学者适合看什么书?
- delphi目录下的一个makefile文件,谁能帮我解释一下??
- missing connection or connectionstring是什么问题啊
- C中的Char型对应该用哪种呢???
- TdxDBlookupEdit控件如何实现助记符输入功能
- 请“版主”或“高手”解决RichEdit难题
- 江湖救急,com读些问题
- 关于报表总计的一个问题 在线等您回答
- 求使用TThread产生多进程的最简单例子
- 如何在Delphi中用ADO打开有密码保护的Access2000数据库?
- 就这点分了。如何在DELPHI里面实现RPC呢?或者通过网络传递对象?
- 对时间字段进行查询,用filter和where有差别吗?
vTmp:variant;
begin
if not MsCommCall.PortOpen then begin
AddLog(Translate('IdleError','Comm closed when send idle code!'),false);
exit;
end;
vTmp:=VarArrayCreate([0,0],varByte);
vTmp[0]:=Byte(239);//the code is 0xefh
MsCommCall.Output:=vTmp;
www.tonixsoft.com
我原来的程序错在那里了?请指教!
使用你原来的方法传的只是一个字符,而字符在127以上的就属于扩展字符了。反正这个组件是不认的,所以就必须使用variant型
具体的我也不太明白,可以参考一下《Delphi串口通信编程》一书,讲到一部分。要请我吃饭??你要到上海来请我了。。呵呵。。
动态数组的定义:
buf:array of byte
mscomm的读:
var
B:variant;
I:word;
InByte: Array of Byte;
m16: String;
Begin
B:=MsComm1.input;
if length(b)=0 then
exit;
SetLength(InByte,length(b));
inByte:=b;
For I:=Low(InByte) To High(InByte) Do begin
M16:=intTohex(inbyte[i],2);
showmessage(M16)
end;
end;MScomm写:
var bf:array of byte;
begin
SetLength(Bf,2);bf[0]:=2;
bf[1]:=6;
Buf:=Bf;mscomm1.Output:=Buf;
end;