最近,做modbus通讯使用mscomm控件,发现一个问题,当数字大于127时,下位机不识别这个数字,原因是用232通讯时中文操作系统的内码库不能识别这个字符,听说在VB用使用字节数组可以解决这个问题,在delphi里试了一下array of byte,语法检查无错误,但直接赋把数组值给output时提示为数据类型不符,把一个数组元素赋值给output,语法无错误,但运行后提示无效属性,请教各位高手,这个问题在delphi中如何解决,代码简单如下:
procedure TForm1.Button1Click(Sender: TObject);
var
myarray:array[0..7]of byte;
begin
myarray[6]:=byte($c4);
mscomm1.output:=myarray[6];
end;
提示无效属性
procedure TForm1.Button1Click(Sender: TObject);
var
myarray:array[0..7]of byte;
begin
myarray[6]:=byte($c4);
mscomm1.output:=myarray;
end;
语法错误盼早日回复,谢谢,谢谢啦!!!!!!!!!

解决方案 »

  1.   

    只能一个一个的赋值,在发送完上一个以后再赋下一个。
    for i:= Low(myarray) to High(myarray) do
    begin
      mscom1.output := myarray[i];
    end;
      

  2.   

    那样也不行的,发送的数据不能是数字,会提示无效属性的,我试过了,而且你也看到了,我现在就是在发送单个数字,所以,你说的这个办法解决不了问题,而且实际上连续发送才是modbus的RTU模式,因为这种模式下要求每个字节间的时间间隔应小于3.5ms,这在windows环境下,用高级语言逐个发送数据是不可能实现的
      

  3.   

    救命啊~~~~~~~~~,以前就有人问过这个问题,但没见有人回答,大家帮忙啊,VB里可以实现的,我问的是delphi啊,求求你们了
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    myarray:variant;
    index:integer;
    begin
    myarray:=VarArrayCreate([0,6], varByte);
    for index:=0 to VarArrayDimCount(myarray)-1 do
      myarray[index]:=$0c;
    mscomm1.output:=myarray;
    end;