现在希望用SPCOMM控件用串口发送:‘*0100EW*0100MD=1’这样的ASCII码,然后接收‘*0001MD=1’这样的ASCII码。希望大家给些代码谢谢了。

解决方案 »

  1.   

    接收已经搞定了。
    procedure Tfcomm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var
     i:integer;
     ModemSt:DWORD;
     recedata:Pchar;//字符串都是指针类型,包括pchar和string
    begin
     viewstring:='COM受到的字符:'; //接受到的是字符串
     getmem(recedata,bufferlength);
     if sendtype then    //sendtype:true; 发送全部字符,false:挨个发送
       begin
         move(buffer^,ReceData,bufferlength);//Pchar已经是指针类型的,不需要使用任何指针
         for i:=0 to bufferlength-1 do
          begin
           memo1.Lines.Add(inttostr(i)+' 内容:'+string(recedata[i]));
           viewstring:=viewstring+string(recedata[i]);
          end;
       end
     else    //挨个接收字符串
       begin
         recedata:=buffer;
         viewstring:=viewstring+pchar(recedata);
       end;
    of an integer.
     memo1.lines.add(viewstring);
     memo1.lines.add(' ');
    end;
      

  2.   

    定义一个byte型的数组,给数组单元赋ascii值,然后writecommdata就可以阿,接收到你在把ascii值转为字符就好了
      

  3.   

    网上有个spcomm的收发例子,你看看
      

  4.   

    To:luxuewei5214(小卢) 
    定义一个byte型的数组,给数组单元赋ascii值.
    具体的该怎么做呢?该怎么把ASCII赋值给bute类型?这个类型好像发16进制的比较方便啊。如:$12。之类的。如果发ASCII的华,感觉直接发Pchar就差不多了吧。因为我的接收部分已经做好了。而且都正常,我接收的时候就是用Pchar类型接收的。那么发送的华,用Pchar应该也不错的。
      

  5.   

    Var SendByte:TByte;
    .....
    SPCOMM.WriteCommData(@SendByte,Length(SendByte));
    .....
      

  6.   

    发送ASCII码,应该就是发送Pchar类型的发送出去就可以了。
    而楼上的Var SendByte:TByte;
    .....
    SPCOMM.WriteCommData(@SendByte,Length(SendByte));
    我怎么觉得发送的是二进制吧。
    希望楼下的能确认一下,TByte类型是不是ASCII类型。PChar我知道是字符类型,但是不清楚是不是ASCII类型!
      

  7.   

    现在的问题已经不是发送的问题。
    现在的问题是数据类型的问题了。
    ASCII到底是TByte还是Pchar?
    请楼下的明确一下。
    TByte是二进制还是ASCII
    Pchar是ASCII码吗?
      

  8.   

    呵~~。这好办啊。ASCII码取值范围为:0~255;
    在DELPHI中取值范围与之相同的有BYTE与CHAR两种类型的数据了;
    如果你用BYTE数据发送时这样操作:
      var
         senddata:array of byte;
         i:=integer;
      const
        data='*0100EW*0100MD=1';  setlength(senddata,length(data));
      for i:=1 to length(data) do
        senddata[i-1]:=ord(data[i]); 
      COMM1.WriteCommData(senddata[0],Length(data));用CHAR类型发送时,你可以用上面同样的代码,只是数据类型都要换成CHAR类型;
     senddata[i-1]:=data[i];//----这一句改一下。当然,你可以直接用STRING类型来发送,因STRING类型本身也是一种动态字符数组类型了;
    方法参考前面兄台提供的方法:
      COMM1.WriteCommData(data[1],Length(data));
      

  9.   

    //----------更正下呵~~。这好办啊。ASCII码取值范围为:0~255;
    在DELPHI中取值范围与之相同的有BYTE与CHAR两种类型的数据了;
    如果你用BYTE数据发送时这样操作:
      var
         senddata:array of byte;
         i:=integer;
      const
        data='*0100EW*0100MD=1';  setlength(senddata,length(data));
      for i:=1 to length(data) do
        senddata[i-1]:=ord(data[i]); 
      COMM1.WriteCommData(pchar(senddata),Length(data));用CHAR类型发送时,你可以用上面同样的代码,只是数据类型都要换成CHAR类型;
     senddata[i-1]:=data[i];//----这一句改一下。当然,你可以直接用STRING类型来发送,因STRING类型本身也是一种动态字符数组类型了;
    方法参考前面兄台提供的方法:
      var data:string;
      COMM1.WriteCommData(pchar(data),Length(data));
      

  10.   

    呵呵,看来楼上的最后发送的都是Pchar啊,调试一下通过。
    看来如果要是发送接收的都是ASCII,那么发送的时候一定要以PCHAR类型发送,接收的话也要以PCHAR类型接收。
    至于BYTE的发送和接收,那就不一样了。
    散分。