回 帖 发 新 帖 刷新版面

主题:哪位高手帮忙修改一段MSCOMM进行串口的程序!!!

哪位高手帮忙修改一下这段程序:
运行可以进行串口通信,可是接收的数据怎么都是错误的啊?
procedure Tmainfrm.MSComm1Comm(Sender: TObject);
var S_tshang:variant;
i:integer;
begin
  if MSComm1.CommEvent= comEvReceive   then
  begin
    S_tshang:=vararraycreate([0,20],varbyte);
    S_tshang:=mscomm1.input;
    for i:=0 to 20 do
    begin
    sleep(2);
      memo1.Text:=memo1.Text+inttostr(s_tshang[i]) +' ';
    end;
  end;
end;

procedure Tmainfrm.BitBtn3Click(Sender: TObject);
var S_tcanshu:variant;
begin
  if mscomm1.PortOpen=true then
    mscomm1.PortOpen:=false;
  mscomm1.CommPort:=strtoint(combobox1.Text);
  mscomm1.Settings:='19200,m,8,1';
  mscomm1.PortOpen:=true;
  S_tcanshu:=vararraycreate([0,0],varbyte);
  S_tcanshu[0]:=$+strtoint(edit1.Text);
  mscomm1.output:=S_tcanshu;
  mscomm1.PortOpen:=false;
  mscomm1.Settings:='19200,s,8,1';
  mscomm1.PortOpen:=true;
  S_tcanshu:=vararraycreate([0,7],varbyte);
  S_tcanshu[0]:=$AA;
  S_tcanshu[1]:=$AA;
  S_tcanshu[2]:=$84;
  S_tcanshu[3]:=$+strtoint(copy(edit2.Text,10,2));
  S_tcanshu[4]:=$+strtoint(copy(edit2.Text,13,2));
  S_tcanshu[5]:=$+strtoint(copy(edit2.Text,16,2));
  S_tcanshu[6]:=$+strtoint(copy(edit2.Text,19,2));
  S_tcanshu[7]:=$+strtoint(copy(edit2.Text,22,2));
try
  mscomm1.output:=S_tcanshu;
except
end;
end;

回复列表 (共4个回复)

沙发

没有设置数据的接收方式,在下面语句
if MSComm1.CommEvent= comEvReceive   then
  begin
在begin下面加上:
mscomm1.inputmode:=0;
这句话试试

板凳


运行时在这一行 memo1.Text:=memo1.Text+inttostr(s_tshang[i]) +' ';
出现:
Project Project1.exe raised exception class EVariantBadIndexError with message 'variant or safe array index out of bounds'.Process stopped .Use Step or Run to continue.的错误运行语句。
点击OK结果还是可以出来。

3 楼

从错误信息上看,问题在于数组越界啦。查查s_tshang...
路过,随口说的...

4 楼

我是新手,请多多指教!
数组越界是什么意思啊?

我来回复

您尚未登录,请登录后再回复。点此登录或注册