spcomm的使用(如何传输结构体)(50分)

  • 主题发起人 主题发起人 rockmmm
  • 开始时间 开始时间
R

rockmmm

Unregistered / Unconfirmed
GUEST, unregistred user!
如题:
type
PCMD = ^TCMD;
TCMD = packed record
msg:string[100];
age:Integer;
end;
怎么发送,怎么接收???
发送放在button中,接收放在procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
 
不可能没人知道啊!
 
TCMD tp;
BYTE sBuf[200];
strcpy(tp.msg,"123456");
tp.age=100;
CopyMemory( sBuf ,&tp,sizeof(TCMD) ) ;
接下去直接写就行
 
procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
t:TCMD;
p:PCMD;
begin
s:='酒厂听抽';
t.msg:=s;
t.age:=54;
New(P);
p^:=t;
Comm1.WriteCommData(Pchar(p),SizeOf(TCMD));
end;
这是写的,我不知道能不能这样。
收是这样的:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
len:integer;
s:array of Char;
str:string;
t:TCMD;
p:PCMD;
begin
len:=BufferLength;
p:=Buffer;
t:=p^;
Memo1.Lines.Append(t.msg);
Memo1.Lines.Append(inttostr(t.age));
end;
但是打出来的t.age是0,很奇怪!
有哪位高人知道么?
 
1. 串口通讯是一种电脑系统中最简单的数字通讯方式;
2. 理论上是可以完成你的任务的, 但程序控制稍微麻烦一点;
3. 首先要设置好基础的通讯协议: 基本要求8位数据位、Xon/Xoff=None、CTS/DTR=Off...
这些具体的内容你必须掌握, 要保证标准的流传输(不要过滤掉控制字符);
4. 最难的是你必须自己控制流, 因为串口通讯不是以高级的数据包的形式进行的:
4.1. 你必须加上你自己的控制字节(或者多字节);
例如: 你要传送一个数据块, 你最好前面加上特征字符+数据块长度;
4.2. 在接收端, 你要监视特征字符与数据块长度字节(或者双字节), 后面紧跟的才是你要的数据块;
4.3. 当然最好在最后还加上校验字节;
5. 懂得这些原理后, 还要多做一些试验...
 
谢谢新世纪的指教,那串口有没有办法实现TCP/IP那样的数据结构体的传输?有没有第三方的控件可以实现这个?
 
你自己做一个串行口控件嘛
 
我想创建一个公共单元,只有unit,没有form的。(这点很重要)
过程:procedure mydata(...........);
现在我想把这个过程赋过动态创建的spcomm的onrecievedata事件,如下
...........
mycomm:=Tcomm.create(nil);
mycomm.onrecievedata:=mydata//////////////这就要我想要的
...........
但是取类型不正解这个错误,但是把mydata这个过程定义到类下就没有问题,有没有什么好办法可以解决呢?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部