小弟初识delphi 对mscomm控件已经有一定了解,现在编写一个上位机软件,实现通过串口与一传感器收发数据,使用Modbus通讯协议(异步11位:1位起始位,8位数据位,2位停止位,无校验位)。 
     目前具体内容是 用一个EDIT文本框 写入像串口发送数据 ,触发click后,在一个MEMO中显示接收倒的数据
     例如:发送01 03 00 00 00 08 44 0c 接收:01 03 0E 25 1C 1F 40 1F 36 1F 30 23 28 23 20 23 25 EE 
是着编了很长时间,功能一直不能实现,请各位指点,最好能有代码为例,谢谢,不胜感激!!!!

解决方案 »

  1.   

    恩 最开始是当作字符串发送了 其实最不明白的就这点 那具体应该怎样发送呢?Variant型变量怎么用啊?
      

  2.   

    var
      buffer2:array of byte;
     setlength(buffer2,8);   buffer2[0]:=$01;  //$01怎么获得你自己想
       buffer2[1]:=$03;
       buffer2[2]:=$00;
       buffer2[3]:=$00;
       buffer2[4]:=$00;
       buffer2[5]:=$08;
       buffer2[6]:=$44;
       buffer2[7]:=$0c;
       mscomm.output:=buffer2;  //发送var
      s:=Variant;
      buffer3:array of byte;
      s:=VarArrayCreate([0,0], varByte);
       SetLength(buffer3,11);
       i:=0;
          if MSComm.InBufferCount=11 then
          begin
              for i:=0 to 10 do
              begin
                  s:=MSComm.Input ;
                  buffer3[i]:=s[0];
              end;
         end;
      

  3.   

    比如你的edit.text是"01"
    如果你发送edit.text,实际上送出去的是一个字符串,这个串有两个字节,也就是你实际发送的是 $31 $32('0'和'1'对应的asc码)
    但一般来说,命令要求发送的都是二进制数据.比如要你发"01",实际上是发$01 (只有一个字节)比如你发送"01 03 00 00 00 08 44 0c "
    应该这样:var
       buf:array[1..8]of byte;
    begin
    buf[1]:=$01;
    buf[2]:=$03;
    buf[3]:=$00;
    buf[4]:=$00;
    buf[5]:=$00;
    buf[6]:=$08;
    buf[7]:=$44;
    buf[8]:=$0c;....
    end;然后发送buf你要自己理解字符串和二进制数据的区别
      

  4.   

    关键是mscomm.InputMode := 1 ;   
    此时为二进制接收方式