关于spcom的一个问题,请各位大侠帮帮小弟(100分)

  • 主题发起人 主题发起人 yz_wxd
  • 开始时间 开始时间
Y

yz_wxd

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟初学用spcom写了个从COM口接收数据的例子,但在memo中却收不到数据,请各
位专家帮小弟改改,代码如下:
unit test1;

interface

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

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Comm1: TComm;
ComboBox1: TComboBox;
Button3: TButton;
SaveDialog1: TSaveDialog;
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
// procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
s: string;
begin
SetLength(S, BufferLength);
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
Memo1.Invalidate;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
comm1.CommName:=combobox1.Text;
comm1.StartComm;
button1.Enabled:=false;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
comm1.StopComm;
savedialog1.Execute;
memo1.Lines.SaveToFile(savedialog1.filename);
memo1.Clear;
button1.Enabled:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Clear;
end;

end.
 
你接受的是什么数据?16进制的吗?
如果是,就要考虑转型:)
 
主要是从一PC的并口输出文本,至另一PC的串口接收,谢谢。go on!
 
我想你首先得知道你得程序是否已经收到数据了,你可以在Comm1ReceiveData的事件中设个断点
如果确实已经收到,那剩下的就只是显示的问题了,那就好办多了。否则你的控件可能存在问题
,其实并口的通讯已有控件,找一个就是了,还是蛮好用的,速度也比串口快多了
 
我一直没有找到并口通讯的,你能不能给我一个。
 
lvxq:
我想在memo中显示是没有问题的,可能问题就出在接收数据上,望能指教,
帮帮我改改。谢谢!
 
你把你的frm贴出来,大家看看,是不是属性设错了
 
能给我一个串口通讯的例子吗?
 
// spcomm 是通过间隔时间判断接收完成,检查间隔时间设置,大于0即可
procedure TForm1.Button1Click(Sender: TObject);
begin
comm1.CommName:=combobox1.Text;
comm1.StartComm;
//Add one line
Application.ProcessMessage;
button1.Enabled:=false;
end;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
pcBuffer:PChar;
begin
//好象是这样的
pcBuffer:=GetMem(BufferLength+1);
StrCopy(pcBuffer,Buffer);
//Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(String(pcBuffer));
Application.ProcessMessage;
// Memo1.Invalidate;
FreeMem(pcBuffer);
end;
 
提问者:
如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.asp
 
估计yz_wxd四月底换SERVER以后几次上不了DFW,所以以为DFW关闭了!发分算了!如何?
 
我一直没有找到并口通讯的控件,你能不能给我一个。
或告我下载地址也行.
 
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var rbuf :array[0..100] of byte;
ReceStr,ViewStr:String;
begin
ZeroMemory(pchar(@rbuf),100);
Move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=0 to bufferlength-1 do
ReceStr:=ReceStr+InttoHex(rbuf,2);
ViewStr:='接收'+ReceStr;
MoInfo.lines.ADD(ViewStr);
end;
别忘了给分 :)

 
并口送出数据串口接收???
有没有进行电平转换?
你知道串口标准电平是-12V和+12V而并口电平为0V和5V没有?
 
后退
顶部