小弟在使用spccom,一直出現程式過幾個小時就無顧退出,而串口通訊部分的功能不執行,則沒有此現象。如事件記錄如下:
錯誤應用程式 myplc.exe,版本 0.0.0.0,錯誤模塊 kernel32.dll,版本 5.2.3790.3959,錯誤地址 0x0000bee7。
懷疑是否有內在泄露問題,請教一下,串口的buffer區,是否要free。再進入下次發送和接收,或應當如何更好處理。我的代碼如下:
function Tform1.senddata():Integer;
var
i: integer;
commflg: boolean;
begin
viewstring := '';
commflg := true;
for i := 1 to 8 do
begin
if not Comm1.WriteCommData(@sbuf[i], 1) then
begin
commflg := false;
break;
end;
sleep(2);
viewstring := viewstring + inttohex(sbuf[i], 2);
end;
result:=1;
if not commflg then
result:=0;
if N8.Checked then statusbar1.Panels[0].Text:='發送:'+viewstring;
//memo1.Lines.Add('send:'+viewstring);
Delay(2000);
end;
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i: integer;
begin
viewstring:='';
move(buffer^, pchar(@rbuf)^, bufferlength);
for i := 1 to bufferlength do
viewstring := viewstring+inttohex(rbuf[i],2);
gotdevid:=rbuf[1]; //接收到的設備編碼,默認取第一個資料內容,即前二個位元組
gotregid:=sbuf[4];//讀到的暫存器地址 ,直接取第4位
statusbar1.Panels[2].Text:='收到資料:'+viewstring+',校驗'+booltostr(mycrc.iscrcright(viewstring))+'設備地址:'+inttostr(gotdevid)+',暫存器:'+inttostr(gotregid)+',插入資料:'+inttostr(processdata(viewstring))+'條';
// memo1.Lines.Add('收到資料:'+viewstring+',校驗'+booltostr(mycrc.iscrcright(viewstring))+'設備地址:'+inttostr(gotdevid)+',暫存器:'+inttostr(gotregid));
end;
procedure TForm1.Timer1Timer(Sender: TObject); //定時發送,往sbuf陣列放資料
begin
sbuf[1] := byte($01);
sbuf[2] := byte($03);
sbuf[3] := byte($00);
sbuf[4] := byte($03);
sbuf[5] := byte($00);
sbuf[6] := byte($01);
sbuf[7] := byte($74);
sbuf[8] := byte($0A);
senddata;
sbuf[1] := byte($01);
sbuf[2] := byte($03);
sbuf[3] := byte($00);
sbuf[4] := byte($04);
sbuf[5] := byte($00);
sbuf[6] := byte($01);
sbuf[7] := byte($C5);
sbuf[8] := byte($CB);
senddata;
end;
uj5u.com熱心網友回復:
緩沖要清除啊,每次發送前清一下發送和接收的緩沖區,不是Free是clearuj5u.com熱心網友回復:
緩沖要清除啊,每次發送前清一下發送和接收的緩沖區uj5u.com熱心網友回復:
如果緩沖區是動態申請的,肯定嘚釋放uj5u.com熱心網友回復:
請教下如何clear緩沖區以及如何釋放動態陣列占用的記憶體?
uj5u.com熱心網友回復:
沒用SPCOMM,一直用CPORT,組件包裝的功能更完整。比如:CPORT緩沖區是靜態的,組件有2個屬性可以分別設定收發緩沖區大小,還有CelarBuffer方法可以呼叫,方便。
感覺spcomm只是簡單對API進行了包裝,許多便捷功能還有待自己進行改造
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/87389.html
標籤:網絡通信/分布式開發
上一篇:delphi7 如何顯示CAD圖
下一篇:如何撰寫遠程接入軟體??
