使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

Description of your first forum.

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子jinms » 星期日, 2005年10月16日 20:28


我使用SPCOMM控件连接汇邦的转速表,发送完读测量值的数据后,没有返回值,
转速表连在我机器的COM1口上;
我用我的发送程序发送数据,没问题,COM1发的数据,COM2用超级终端显示都能正确收到;
其中读测量值的数据格式和转速表返回的数据格式如下:
主方发送帧格式信息如下:
地址  代码  地址  字数    CRC16
01     03 高位 低位 高位  低位    高位  低位
            00   04   00    03     40    CA
------------------------------------------------------------------------------
从方应答发送帧格式信息如下:
地址  代码  数据字节长度  数据                       CRC16
01     03   06           00  03  0D  41  00  02 79 84
-------------------------------------------------------------------------------
各位大侠帮我看看问题可能出在哪里,代码如下:
-------------------------------------------------------------------------------
unit Unt_send;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, SPComm, StdCtrls, Buttons, ExtCtrls, CPort;

type
 TForm1 = class(TForm)
   BitBtn1: TBitBtn;
   Timer1: TTimer;
   Memo1: TMemo;
   Edit1: TEdit;
   Edit2: TEdit;
   BitBtn2: TBitBtn;
   Edit3: TEdit;
   Label1: TLabel;
   Edit4: TEdit;
   Label2: TLabel;
   Edit5: TEdit;
   Label3: TLabel;
   CheckBox1: TCheckBox;
   Edit6: TEdit;
   Label4: TLabel;
   Comm1: TComm;
   ComPort1: TComPort;
   procedure FormCreate(Sender: TObject);
   procedure BitBtn1Click(Sender: TObject);
   procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
   procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
     BufferLength: Word);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Comm1.StartComm;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 tmpStr :string;
 fg :Boolean;
begin
 if BitBtn1.Caption='发送数据'then
 begin
   BitBtn1.Caption :='停止';
   tmpStr :='010300040003';
   Comm1.WriteCommData(pchar(tmpStr) , length(tmpStr));
 end
 else begin
   BitBtn1.Caption :='发送数据';
 end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 Comm1.StopComm;
end;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
 BufferLength: Word);
var
 tmpStr :string;
begin
 SetLength(tmpStr , BufferLength);
 Move(Buffer^,Pchar(tmpStr)^,BufferLength);
 memo1.Lines.Add(tmpStr);
end;
end.
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子我就是一个问题 » 星期日, 2005年10月16日 21:07


Comm1.WriteCommData(pchar(tmpStr) , length(tmpStr));
这句你为什么不向下面的这样写啊!你动态跟踪的时候能保证你写入的数据就是你给出的数据吗?
Move(Buffer^,Pchar(tmpStr)^,BufferLength);
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子jinms » 星期日, 2005年10月16日 21:25


to :我就是一个问题
先谢谢你的关注,我用我的发送程序发出‘010300040003’
在超级终端监测的COM2口上收到的就是发出‘010300040003’
应该没问题,但不知为什么,下位机就不给返回数据
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子wanshi131 » 星期日, 2005年10月16日 21:34


每次发送的时候要清除读写缓冲区的内容
你读取数据的时间间隔是多少?
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子jinms » 星期日, 2005年10月16日 21:40


TO:wanshi131
每次发送的时候要清除读写缓冲区的内容
-----------------------------------
怎么清除读写读写缓冲区的内容??
///////////////////////////////////
你读取数据的时间间隔是多少?  
-----------------------------------
ReadIntervalTimeout :=100
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子wanshi131 » 星期日, 2005年10月16日 22:38


PurgeComm(Comm1.hCommFile, PURGE_RXCLEAR + PURGE_TXCLEAR);//清发送和接收缓冲区

你可以把设置长一点试试,也可以直接引用SPCOMM.PAS调试一下看看问题在什么地方
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子jinms » 星期日, 2005年10月16日 22:53


我再试试
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子fthanyong » 星期日, 2005年10月23日 18:18


不知道需要发送的数据格式是怎么样的,这你需要确定好了,我想你要发的数据不会十进制的吧?
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子YANGWEI0308 » 星期日, 2005年10月23日 19:29


串口的波特率等参数设置是否正确,看看设备的串口工作参数。
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子Lucker » 星期日, 2005年10月23日 19:35


用 PComm 试试,这里有基于 PComm 的控件。
http://www.anylib.com
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子SPC_CLL » 星期日, 2005年10月23日 20:24


看看与下位机的通讯协议,估计是:你发给下位机的数据格式有问题,使得下位机无应答,
因而理所当然的,上位机接不到数据
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子jinms » 星期日, 2005年10月23日 21:17


谢谢各位大侠的关心,此题已解决,是因为下位机的通讯规约太旧了,参数的地址已经发生变化,所以取不到数
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子zxdcyl » 星期二, 2005年10月25日 12:15


汇邦公司下位机通地址我发给你了
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子jinms » 星期二, 2005年10月25日 12:16


谢谢
 
 
 

使用SPCOMM控件与串口通信,为什么收不到下位机返回的数据???

帖子jinms » 星期二, 2005年10月25日 12:17


多人接受答案了。