请问为何用SPCOMM在“发送”超过1KB数据时会出错?(小于1KB没任何问题)(100分)

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

RTA

Unregistered / Unconfirmed
GUEST, unregistred user!
请问为何用SPCOMM在“发送”超过1KB数据时会出错?(小于1KB没任何问题),还有Xon/Xoff
有什么用啊?为何SPCOMM默任设置打开了这两个东西,搞到一开始我接收不到13,11这两个数
谢谢!
 
是不是用的UDP协议呀,如果是,只有分包发送一条路。
客户端收到后在拼起来。
 
谢谢LeeChange,我不知什么UDP啊,我的传输对象是单片机,我发送的语句是下面这几条
procedure SENDDATA;
var
I:integer;
COMMFLG:BOOLEAN;
begin
S1:='';
S2:='';
COMMFLG:=TRUE;
For I:=1 to 1280 do
begin
IF NOT Form1.comm1.writecommdata(@SBUF,1) then
begin
COMMFLG:=FALSE;
BREAK;
end;
S1:=S1 + inttohex(SBUF,2)+ ' ';
end;
S1:='发送:' + ' ' + S1;
FORM1.MEMO1.TEXT:= S1;
if not commflg then messagedlg('发送失败 !' ,mterror,[mbyes],0);
end;
结果,我一调用这个过程时,只要I>1000,就出现'发送失败'了,I<1000就没问题,注意
这时我的串口并没有接任何的东西,所以我觉得应该是SPCOMM设置的问题,请各位高手帮帮
忙!
 
为什么要一个一个地发送,干嘛不一起发呢?
 
请问XIAO_MIN,我的数据都放在数组里了,怎么才能一次发送多个数据?数组是BYTE.
 
我用Cport264来和单片机通讯,可以直接写字符串,很好用
免费的,有源码
 
好啊,请ctx62将你的程序发给我看看吧,我的e-mail:RTAA@21CN.COM,谢谢!
 
呵呵,你用串口的,我怎么连看都不看仔细就乱说话,该死该死。
 
那么,leechange,用SPCOMM,应该怎么解决那么问题呢?请大家都来帮帮忙吧![:)]
 
WriteCommData(pNodeTemp^.Cmd,pNodeTemp^.CmdLen);
cmd是array [0..255] of char
你自己的你试一下就知道了
 
xiao_min,那我怎么才能将原先BYTE转为CHAR类型呢?
 
procedure TForm1.Button1Click(Sender: TObject);
var
a:array [0..5] of byte;
b:array [0..5] of char;
begin
a[0]:=$31;
a[1]:=$31;
a[2]:=$32;
a[3]:=$33;
a[4]:=$34;
a[5]:=$35;
strpcopy(b,pchar(@a));
showmessage(b);
end;
要照我说呢,。。。干嘛要用BYTE数组,直接用CHAR数据或是PCHAR不就OK?
 
这个问题好搞,其实用SPCOMM没问题的,关键是WriteCommData(PChar(@sbuf),I)的使用
I是要发送内容的数目,因此,若要发送SBUF为[1..2048],那么发送全部内容,则写成
WriteCommData(PChar(@sbuf),2048),这样就不用使用循环程序,减少出错的机会。
BYTE可以是BYTE型。
procedure TForm1.Button2Click(Sender: TObject);[8D]
var
RESULT:BOOLEAN;
I:INTEGER;
S:STRING;
begin
S:='';
FOR I:= 1 TO len DO
S:= S + INTTOHEX(SBUF,2) + ' ';
I:=len;
RESULT:= Form1.comm1.WriteCommData(PChar(@sbuf),I);
IF RESULT THEN
MEMO1.TEXT:='发送: ' + S + ' ' + '成功!'
ELSE
MEMO1.TEXT:='发送: ' + S + ' ' + '失败!';

end;
 
to RAT
Cport264已经发给你,查收
 
谢谢大家的帮助,我使用KAYA的方法已经成功发送大于1K的数据,谢谢!
 
多人接受答案了。
 
后退
顶部