spcomm接收数据总是报内存错误,(100分)

  • 主题发起人 主题发起人 梦幻天使
  • 开始时间 开始时间

梦幻天使

Unregistered / Unconfirmed
GUEST, unregistred user!
spcomm接收数据有时能接收正常,有时报内存错误。困惑了半个月了,大家一定要帮帮我
 
應該是接收時處理數據不正常。仔細檢查就可以了。
 
你看看我的代码哪儿有问题
procedure TFormMain.Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word);
var
i,Count,num:integer;
TemStr:String;
rbuf:array of byte;
//rbuf:array of byte;
ReTurnByteArr : TByteArr;
TemByteArr : array of byte;
begin
try
setLength(rbuf,BufferLength);
Move(Buffer^, PChar(@rbuf)^,BufferLength);
if ( rbuf[0] = 192 ) and ( rbuf[high(rbuf)] = 192 ) then
//两端都是'C0'表示一帧信息
ReTurnByteArr := ReNewReceiveData(rbuf)
else
exit;
TemStr:='';
for i:=0 to length(ReTurnByteArr)-1do
//
TemStr := TemStr + inttohex(ReTurnByteArr,2);
SetLength(ByteArrForReCrc,length(ReTurnByteArr)-8);
ByteArrForReCrc[0] := ReTurnByteArr[5];
ByteArrForReCrc[1] := ReTurnByteArr[6];
ByteArrForReCrc[2] := ReTurnByteArr[7];
ByteArrForReCrc[3] := ReTurnByteArr[8];
for i:=0 to length(rbuf)-13do
//只算消息字的
ByteArrForReCrc[i+4] := ReTurnByteArr[i +11 ];
Self.CRC16(ByteArrForReCrc);
TemStr := AnsiLowerCase(TemStr);
Self.DisplayReceiveData(TemStr);
except
ShowError('串口接收数据错误!');

end;

end;
 
把rbuf设成固定长度的试试
 
试了
那样就接收不到数据了
 
rbuf设置成固定长度
rbuf数组就被初始化随机整数
同时Move(Buffer^, PChar(@rbuf)^,BufferLength);
之后,还是原来随机整数
这是为什么呀?
 
不会吧,把这行注释//setLength(rbuf,BufferLength);
 

就是
rbuf:array[0..248] of byte;
同时把
setLength(rbuf,BufferLength);
这行注释掉了
 
这样收不到数据吗?把你的spcomm的属性贴上来看看
 
串口号:com1
波特率:115200
校验位:NONE
数据位:8
停止位:1
 
刚才我调试还是报这种错误
project PrjCommunication.exe raised exception class EAccessViolation
with message 'Access Violation at address 004028FF in module 'PrjCommunication.exe',
Write of address 00130000',Process stopped. Use Step or Run to continue.
 
这样说吧,你的固定长度收不到数据,这就是一个问题,
是不是你的数据量很大
 
数据最大是1161字节,具体原因还不清楚
我用for循环改为单字节发送就行了。
 
多人接受答案了。
 

Similar threads

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