请问串口问题? (30分)

  • 主题发起人 主题发起人 dreamya
  • 开始时间 开始时间
D

dreamya

Unregistered / Unconfirmed
GUEST, unregistred user!
我想通过串口发送一组数组,数组每个元素是放的16进制数,怎么建立数组,怎么传,同样我要收数而不是字符应怎么做?
是不是用vararratcreate建数组,如果是,怎么装入16进制数,谢谢?
procedure
var buf:variant;
subuffer:olevariant;
begin
buf:=vararraycreate([1,12],varbyte);
buf[1]:=byte($09);
buf[2]:=byte($0c);
buf[3]:=byte($01);
buf[4]:=byte($07);
buf[5]:=byte($06);
buf[6]:=byte($01);
buf[7]:=byte($07);
buf[8]:=byte($02);
buf[9]:=byte($00);
buf[10]:=byte($2d);
buf[11]:=byte($00);
buf[12]:=byte($00);
rbuf:=buf;
MScomm1.portopen:=true;
MScomm1.output:=rbuf;
delay; {等待下位机的信号}
rbuf:=MScomm1.input;
MScomm1.portopen:=false;
sbuffer:=rbuf;
memo1.text:=sbuffer;
end;
这个程序总是调试不正确,应怎么改,谢谢?
 
可用字符串做
procedure
var buf:string;
begin
buf:=Chr($09)+Chr($0c)+...+Chr($00);
MScomm1.portopen:=true;
MScomm1.output:=rbuf;
delay; {等待下位机的信号}
rbuf:=MScomm1.input;
MScomm1.portopen:=false;
sbuffer:=rbuf;
memo1.text:=sbuffer;
end;
 
procedure
var buf,rbuf:array of byte;
subuffer:olevariant;
begin
setlength(buf,12);
buf[1]:=$09;
buf[2]:=$0c;
buf[3]:=$01;
buf[4]:=$07;
buf[5]:=$06;
buf[6]:=$01;
buf[7]:=$07;
buf[8]:=$02;
buf[9]:=$00;
buf[10]:=$2d;
buf[11]:=$00;
buf[0]:=$00;

MScomm1.portopen:=true;
MScomm1.output:=buf;
delay; {等待下位机的信号}
setlength(rbuf,12);
rbuf:=MScomm1.input;
MScomm1.portopen:=false;
{如果要显示字符形式}
for i:=0 to 11 do
begin
memo1.add(chr(rubf));
end;
{如果显示十六进制数}
for i:=0 to 11 do
begin
memo1.add(inttohex(rbuf,2));
end;
end;
end;
 
上面的程序还是调试不成功,请大家帮忙谢谢?
 
我有用spcomm的例子
和我自己的下位机通讯的
cook@sina.com
 
后退
顶部