請教前輩,spcomm与plc通信中斷 |
尚未結案
|
82547013
一般會員 發表:1 回覆:1 積分:0 註冊:2005-11-12 發送簡訊給我 |
多謝長輩了,程式運行大約10多秒,就不再發送資料了,而且,
數據顯示有時也不是正確,先謝謝長輩們。
程式如下: var
Harmonics: THarmonics;
sbuf:array[1..8] of byte;
rbuf:array[1..100] of byte;
DateDecAu:array[1..100] of word;
DateDecBu:array[1..100] of word;
DateDecCu:array[1..100] of word;
DateDecAi:array[1..100] of word;
DateDecBi:array[1..100] of word;
DateDecCi:array[1..100] of word;
Signal:boolean;
implementation uses Oscilloscope;
var
choice,readnum:Integer;
{$R *.dfm} function hex(c:char):Integer ;
var
x:integer;
begin
if c=' ' then
x:=0
else if (Ord(c)>=ord('0')) and (Ord(c)<=ord('9')) then
x:=Ord(c)-Ord('0')
else if (Ord(c)>=ord('a')) and (Ord(c)<=ord('f')) then
x:=Ord(c)-Ord('a') 10
else if (Ord(c)>=ord('A')) and (Ord(c)<=ord('F')) then
x:=Ord(c)-Ord('A') 10
else
//輸入錯誤
x:=-1;
Result:=x;
end; function HexToInt(S:String): Integer;
var
tmpInt1,tmpInt2:Integer ;
tmpInt3,tmpInt4:Integer ;
begin
tmpInt1:=hex(S[1]);
tmpInt2:=hex(S[2]);
tmpInt3:=hex(S[3]);
tmpInt4:=hex(S[4]);
Result:=tmpInt1*4096 tmpInt2*256 tmpInt3*16 tmpInt4; end; //發送資料自定義的發送過程
procedure senddata;
var
i:integer;
commflg:boolean;
begin
commflg:=true;
for i:=1 to 8 do
begin
if not Harmonics.comm1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
if not commflg then
messagedlg('發送失敗!',mterror,[mbyes],0);
end;
end; //發送資料初始化過程
{
01 03 02 00 00 32 C5 A7 :Ua 01 03 03 00 00 32 C4 5B :Ub 01 03 04 00 00 32 C5 2F :Uc 01 03 05 00 00 32 C4 D3 :Ia 01 03 06 00 00 32 C4 97 :Ib 01 03 07 00 00 32 C5 6B :Ic
}
procedure THarmonics.sendClick(Sender: TObject);
begin //Ic
sbuf[1]:=byte($01); //幀頭
sbuf[2]:=byte($03); //命令號
sbuf[3]:=byte($07);
sbuf[4]:=byte($00);
sbuf[5]:=byte($00);
sbuf[6]:=byte($32);
sbuf[7]:=byte($C5);
sbuf[8]:=byte($6B); //幀尾
choice:=1;readnum:=2;
senddata;//調用發送函數
end;
//Ub
procedure THarmonics.send2Click(Sender: TObject);
begin
sbuf[1]:=byte($01);
sbuf[2]:=byte($03);
sbuf[3]:=byte($03);
sbuf[4]:=byte($00);
sbuf[5]:=byte($00);
sbuf[6]:=byte($32);
sbuf[7]:=byte($C4);
sbuf[8]:=byte($5B);
choice:=2;readnum:=3;
senddata;//調用發送函數
end;
//Uc
procedure THarmonics.send3Click(Sender: TObject);
begin
sbuf[1]:=byte($01);
sbuf[2]:=byte($03);
sbuf[3]:=byte($04);
sbuf[4]:=byte($00);
sbuf[5]:=byte($00);
sbuf[6]:=byte($32);
sbuf[7]:=byte($C5);
sbuf[8]:=byte($2F);
choice:=3;readnum:=4;
senddata;//調用發送函數
end;
//Ia
procedure THarmonics.send4Click(Sender: TObject);
begin
sbuf[1]:=byte($01);
sbuf[2]:=byte($03);
sbuf[3]:=byte($05);
sbuf[4]:=byte($00);
sbuf[5]:=byte($00);
sbuf[6]:=byte($32);
sbuf[7]:=byte($C4);
sbuf[8]:=byte($D3);
choice:=4;readnum:=5;
senddata;//調用發送函數
end;
//Ib
procedure THarmonics.send5Click(Sender: TObject);
begin
sbuf[1]:=byte($01);
sbuf[2]:=byte($03);
sbuf[3]:=byte($06);
sbuf[4]:=byte($00);
sbuf[5]:=byte($00);
sbuf[6]:=byte($32);
sbuf[7]:=byte($C4);
sbuf[8]:=byte($97);
choice:=5;readnum:=6;
senddata;//調用發送函數
end;
//Ua
procedure THarmonics.send6Click(Sender: TObject);
begin
sbuf[1]:=byte($01);
sbuf[2]:=byte($03);
sbuf[3]:=byte($02);
sbuf[4]:=byte($00);
sbuf[5]:=byte($00);
sbuf[6]:=byte($32);
sbuf[7]:=byte($C5);
sbuf[8]:=byte($A7);
choice:=6;readnum:=1;
senddata;//調用發送函數
end; //計時器在指定的事件內觸發該事件,實現資料的定時發送 procedure THarmonics.timer1Timer(Sender: TObject);
begin
if readnum=1 then
begin
signal:=false;
send.Click;
end
else if readnum=2 then
begin
send2.Click;
end
else if readnum=3 then
begin
send3.Click;
end
else if readnum=4 then
begin
send4.Click;
end
else if readnum=5 then
begin
send5.Click;
end
else if readnum=6 then
send6.Click;
end; procedure THarmonics.FormShow(Sender: TObject);
begin
comm1.StartComm;
choice:=0;readnum:=1;
end; procedure THarmonics.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end; //接受數據
procedure THarmonics.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i,j:integer;
s:string;
begin
// 從源到目標複製位元組
begin
move(buffer^,pchar(@rbuf)^,bufferlength);
i:=4;j:=1;
while ((i<=bufferlength-5) and (j<=100)) do
begin
s:=inttohex(rbuf[i],2) inttohex(rbuf[i 1],2);
if choice=6 then
begin
DateDecAu[j]:=HexToInt(s);
end
else if choice=2 then
begin
DateDecBu[j]:=HexToInt(s);
end
else if choice=3 then
begin
DateDecCu[j]:=HexToInt(s);
end
else if choice=4 then
begin
DateDecAi[j]:=HexToInt(s);
end
else if choice=5 then
begin
DateDecBi[j]:=HexToInt(s);
end
else if choice=1 then
begin
DateDecCi[j]:=HexToInt(s);
end;
i:=i 2;j:=j 1;
end;
end;
// 資料顯示
if choice=6 then
begin
signal:=true;
//Ua
THDUa.text:=floattostr(DateDecAu[1]/100);
Edit1.text:=floattostr(DateDecAu[3]/100);
Edit2.text:=floattostr(DateDecAu[5]/100);
Edit3.text:=floattostr(DateDecAu[7]/100);
Edit4.text:=floattostr(DateDecAu[9]/100);
Edit5.text:=floattostr(DateDecAu[11]/100);
Edit6.text:=floattostr(DateDecAu[13]/100);
Edit7.text:=floattostr(DateDecAu[15]/100);
Edit8.text:=floattostr(DateDecAu[17]/100);
Edit9.text:=floattostr(DateDecAu[19]/100);
Edit10.text:=floattostr(DateDecAu[21]/100);
Edit11.text:=floattostr(DateDecAu[23]/100);
Edit12.text:=floattostr(DateDecAu[25]/100);
Edit13.text:=floattostr(DateDecAu[27]/100);
Edit14.text:=floattostr(DateDecAu[29]/100);
Edit15.text:=floattostr(DateDecAu[31]/100);
//Ub
THDUb.text:=floattostr(DateDecBu[1]/100);
Edit17.text:=floattostr(DateDecBu[3]/100);
Edit18.text:=floattostr(DateDecBu[5]/100);
Edit19.text:=floattostr(DateDecBu[7]/100);
Edit20.text:=floattostr(DateDecBu[9]/100);
Edit21.text:=floattostr(DateDecBu[11]/100);
Edit22.text:=floattostr(DateDecBu[13]/100);
Edit23.text:=floattostr(DateDecBu[15]/100);
Edit24.text:=floattostr(DateDecBu[17]/100);
Edit25.text:=floattostr(DateDecBu[19]/100);
Edit26.text:=floattostr(DateDecBu[21]/100);
Edit27.text:=floattostr(DateDecBu[23]/100);
Edit28.text:=floattostr(DateDecBu[25]/100);
Edit29.text:=floattostr(DateDecBu[27]/100);
Edit30.text:=floattostr(DateDecBu[29]/100);
Edit31.text:=floattostr(DateDecBu[31]/100);
//Uc
THDUc.text:=floattostr(DateDecCu[1]/100);
Edit32.text:=floattostr(DateDecCu[3]/100);
Edit33.text:=floattostr(DateDecCu[5]/100);
Edit34.text:=floattostr(DateDecCu[7]/100);
Edit35.text:=floattostr(DateDecCu[9]/100);
Edit36.text:=floattostr(DateDecCu[11]/100);
Edit37.text:=floattostr(DateDecCu[13]/100);
Edit38.text:=floattostr(DateDecCu[15]/100);
Edit39.text:=floattostr(DateDecCu[17]/100);
Edit40.text:=floattostr(DateDecCu[19]/100);
Edit41.text:=floattostr(DateDecCu[21]/100);
Edit42.text:=floattostr(DateDecCu[23]/100);
Edit43.text:=floattostr(DateDecCu[25]/100);
Edit44.text:=floattostr(DateDecCu[27]/100);
Edit45.text:=floattostr(DateDecCu[29]/100);
Edit46.text:=floattostr(DateDecCu[31]/100);
//Ia
THDIa.text:=floattostr(DateDecAi[1]/100);
Edit47.text:=floattostr(DateDecAi[3]/100);
Edit48.text:=floattostr(DateDecAi[5]/100);
Edit49.text:=floattostr(DateDecAi[7]/100);
Edit50.text:=floattostr(DateDecAi[9]/100);
Edit51.text:=floattostr(DateDecAi[11]/100);
Edit52.text:=floattostr(DateDecAi[13]/100);
Edit53.text:=floattostr(DateDecAi[15]/100);
Edit54.text:=floattostr(DateDecAi[17]/100);
Edit55.text:=floattostr(DateDecAi[19]/100);
Edit56.text:=floattostr(DateDecAi[21]/100);
Edit57.text:=floattostr(DateDecAi[23]/100);
Edit58.text:=floattostr(DateDecAi[25]/100);
Edit59.text:=floattostr(DateDecAi[27]/100);
Edit60.text:=floattostr(DateDecAi[29]/100);
Edit61.text:=floattostr(DateDecAi[31]/100);
//Ib
THDIb.text:=floattostr(DateDecBi[1]/100);
Edit62.text:=floattostr(DateDecBi[3]/100);
Edit63.text:=floattostr(DateDecBi[5]/100);
Edit64.text:=floattostr(DateDecBi[7]/100);
Edit65.text:=floattostr(DateDecBi[9]/100);
Edit66.text:=floattostr(DateDecBi[11]/100);
Edit67.text:=floattostr(DateDecBi[13]/100);
Edit68.text:=floattostr(DateDecBi[15]/100);
Edit69.text:=floattostr(DateDecBi[17]/100);
Edit70.text:=floattostr(DateDecBi[19]/100);
Edit71.text:=floattostr(DateDecBi[21]/100);
Edit72.text:=floattostr(DateDecBi[23]/100);
Edit73.text:=floattostr(DateDecBi[25]/100);
Edit74.text:=floattostr(DateDecBi[27]/100);
Edit75.text:=floattostr(DateDecBi[29]/100);
Edit76.text:=floattostr(DateDecBi[31]/100);
//Ic
THDIc.text:=floattostr(DateDecCi[1]/100);
Edit77.text:=floattostr(DateDecCi[3]/100);
Edit78.text:=floattostr(DateDecCi[5]/100);
Edit79.text:=floattostr(DateDecCi[7]/100);
Edit80.text:=floattostr(DateDecCi[9]/100);
Edit81.text:=floattostr(DateDecCi[11]/100);
Edit82.text:=floattostr(DateDecCi[13]/100);
Edit83.text:=floattostr(DateDecCi[15]/100);
Edit84.text:=floattostr(DateDecCi[17]/100);
Edit85.text:=floattostr(DateDecCi[19]/100);
Edit86.text:=floattostr(DateDecCi[21]/100);
Edit87.text:=floattostr(DateDecCi[23]/100);
Edit88.text:=floattostr(DateDecCi[25]/100);
Edit89.text:=floattostr(DateDecCi[27]/100);
Edit90.text:=floattostr(DateDecCi[29]/100);
Edit91.text:=floattostr(DateDecCi[31]/100);
end; end; procedure THarmonics.Chart1Click(Sender: TObject);
begin
column.show;
end; procedure THarmonics.Exit1Click(Sender: TObject);
begin
self.close;
end; end.
|
DavidLo
高階會員 發表:17 回覆:225 積分:168 註冊:2004-07-21 發送簡訊給我 |
|
82547013
一般會員 發表:1 回覆:1 積分:0 註冊:2005-11-12 發送簡訊給我 |
|
DavidLo
高階會員 發表:17 回覆:225 積分:168 註冊:2004-07-21 發送簡訊給我 |
|
HomeSound
中階會員 發表:44 回覆:178 積分:94 註冊:2002-08-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |