十万火急请各位大虾出手相(100分)

  • 主题发起人 主题发起人 lruikun
  • 开始时间 开始时间
L

lruikun

Unregistered / Unconfirmed
GUEST, unregistred user!
我是通讯方面的新手,请各个不要见笑.
1.如何通过向串口传送AT指令?是以字符串形式直接写到串口上吗?
2.我手头上有一份通讯协议的结构但小的不明白应如何具体使用它来编程,是把它在程序中
定义成一定的数据结构进行调用吗,请举个例子加以说明,Thanks!
 
1. 没错. ^_^
2. 只要想办法将结构中的数据按顺序串行发出, 就可以了, 不一定要定义成结构类型的.
当然, 定义成结构类型的看起来比较舒服, 但实际发送的时候还是要编码转换的.比如:
CommStruct=record
CommandID:integer;
CommandParamLength:integer;
CommandParamString:string;
end;

那么发送的时候要:
var send_buf:pchar; i:integer;

send_buf:=stralloc(1024);
i:=0;
copyint(CommTo.CommandID, send_buf, sizeof(int));
i:=i+sizeof(int);
copyint(CommTo.CommandParamLength, (send_buf+i), sizeof(int));
i:=i+sizeof(int);
move(commTo.CommandParamString, (send_buf+i)^, CommTo.CommParamLength);
i:=i+CommTo.ParamLength;

{then send send_buf via communication port or network, etc.}

其中Copyint是将Int数据填入缓冲区内的, 比如:
procedure CopyInt(var I;s:pchar;int_length:integer);
pII:pchar absolute i;
begin
move(pII^, s^, int_length);
end;
 
呵呵,上面的已经说得很好了,不要以为我来抢分哦
关于通信协议,发送的时候问题不大,关键是接收的时候的语法分析。
 
首先很多谢大家的帮忙,但请恕小弟愚钝,我还有很多地方不明白:
1.实际上发送到串口或从串口接收的数据是什么类型的呢?二进制、十六进制或是字符串?
2.我要按照我的通讯协议进行通讯的时候又要怎样读取串口的数据并解释为我想要的数据呢?
麻烦再举一个例子。
拜托,很急,保证一解决就给分。
 
1. 是比特(bit)。不管二进制、十六进制还是字符串不都要表示成比特。
根据具体情况可能还有校验位、停止位等。
2. 首先用CreateFile()打开串口,再调用ReadFile()把数据读到缓冲区,
你的通讯协议总该有些标识信息吧,就在你读出的数据中找标识信息,
从而进行判断或定位。
 
可否说得具体一点
 
接受答案了.
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部