spcomm发送数据的问题(100分)

  • 主题发起人 主题发起人 dxm
  • 开始时间 开始时间
D

dxm

Unregistered / Unconfirmed
GUEST, unregistred user!
通信速率:9600bps,8个数据位,1个起始位,1个停止位,无校验。
两个字符间最大间隔不大于500ms。包回应超时不大于30s。

发送数据格式: STX (0x02) TXT ETX(0x03)
其中:txt为:
SEQ TAG LEN DATA LRC

SEQ :包顺序号,长度为1字节,循环累加,包序列号相同表示重发。
TAG :长度,1字节,标记码,用于定义DATA类型。
LEN :长度,2字节,DATA的长度,高字节在前。
DATA:传输的数据。
LRC :2字节,为SEQ、TAG、LEN、DATA的校验码,计算公式如下:
设有N字节数据,记为{xi},i=1,2…N。
令Q0=0,S0=0
Qi=Qi-1+xi mod 216
Si=Si-1+Qi mod 216
SN即为2字节校验码。
TXT结构中的所有数据均采用ASCII码传输。
STX SEQ TAG LEN DATA LRC ETX
02 30 30 33 31 30 30 30 30 没有 30 30 39 33 03
请问该怎样发送数据?
我程序是这样编写的:
procedure TForm1.Button5Click(Sender: TObject);
var
dat:array [1..14] of byte;
// sum:T2array2;
i:integer;
flag:boolean;
sen:boolean;
begin

dat[1]:=byte($02);
dat[2]:=byte($30);
dat[3]:=byte($30);
dat[4]:=byte($33);
dat[5]:=byte($31);
for i:=6 to 11 do
dat:=byte($30);
dat[12]:=byte($39);
dat[13]:=byte($33);
dat[14]:=byte($03);
comm1.StartComm;
flag:=true;
FOR i:=1 to 14 do
begin
sen:=comm1.WriteCommData(@dat,1);
if sen=true then continue
else break;
end;
end;
跟串口连接的硬件却什么数据也接收不到,而在别的程序上是接收得到数据的。还有怎样接收从
串口发送过来的数据。
如果谁能使我通过程序测试,马上给分。
 
首先必须初始化串口:
设置COMM的属性,然后StartComm
初始化串口以后,必须等待串口初始化完成(有一定的时间间隔)才能发送数据,
你上面的程序一定发送不出数据的,不信用示波器看。
你可以在程序启动时初始化串口,然后。。。
另外,数据的发送可以直接将所有数据放在缓冲区一起发送。你上面的发送效率太低了。
 
回答问题不痛不痒,不能给分
 
同意HostingLian
 
还有其他参数设置了没有?例如流控,DTS, Xoff等等,你可以先用一个超级终端看看
你的程序发出的东西到底能不能收到
 
我想这位提问的老兄是想实现数据发送的同时又可以在特定的条件或时刻停止发送,
这就是发送循环语句里面加上
if sen=true then continue
else break;
的道理吧?
看你的发送数据应该没有问题,问题在你连接的硬件上面。
说说你连接的是什么硬件吧?如果PC发送数据给硬件选用硬件流控吧!
 
哈哈,自己解决,原来是联想的串口不支持。
 
呵呵,我的联想主板接收也不对。
 

Similar threads

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