線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2706
推到 Plurk!
推到 Facebook!

SPCOMM接收資料的問題

尚未結案
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-09 10:43:47 IP:59.36.xxx.xxx 未訂閱
大家好! 我用SPCOMM元件與PLC通訊.現有碰到問題,還請各位大大耐心幫忙看一下代碼,謝謝: class="code"> var fmMain: TfmMain; viewstring: string; rbuf, sbuf: array[0..22] of byte; sTest : Boolean ; procedure TfmMain.FormCreate(Sender: TObject); begin sTest := False ; end; procedure TfmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i,p: integer; a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6 : array[1..8] of string ; sWy1,sWd1,sWy2,sWd2,sWy3,sWd3,sWy4,sWd4,sWy5,sWd5,sWy6,sWd6 :string; begin viewstring:=''; move(buffer^,rbuf,bufferlength); //接受buffer中的位元組 for i:=0 to bufferlength-1 do viewstring:=viewstring inttohex(rbuf[i],2) ' '; //接收到的所有資料集合 //****************第一組位移,溫度********************* if not(sTest) then begin p := 19 ; //第一組 位移 sWy1 := ''; for i := 1 to 8 do begin a1[i] := midbstr(viewstring,p,2) ; p := p 3 ; b1[i] := Char(StrToInt('$' a1[i])); sWy1 := sWy1 b1[i] ; end; sWy1 := midbstr(sWy1,1,4) '.' rightstr(sWy1,4); //將接收的位移8位,加4位小數 p := 43 ; //第一組 溫度 sWd1 := ''; for i := 1 to 8 do begin a1[i] := midbstr(viewstring,p,2) ; p := p 3 ; b1[i] := Char(StrToInt('$' a1[i])); sWd1 := sWd1 b1[i] ; end; sWd1 := midbstr(sWd1,1,7) '.' rightstr(sWd1,1); //將接收的溫度8位,加一位小數 iSSAg1.Value := strtofloat(sWy1) ; // 第一組位移 iSSAg2.Value := strtofloat(sWd1); // 第一組溫度 Savedata; // 存位移,溫度資料 end ; if (iSSAg1.Value >=1) then //當位移值大於1時,結束測試 begin sTest := true ; Memo1.Lines.Add('第一組測試完成') ; end; //****************第二組位移,溫度********************* ... ... ... //****************第六組位移,溫度********************* end; procedure TfmMain.SaveData; //接收PLC的資料存資料檔 var i : Integer ; iWd,iWy : Real ; //溫度、位移 begin iWy := iSSAg1.Value ; iWd := iSSAg2.Value ; with Query1 do begin Close; SQL.Clear; SQL.Add('INSERT INTO Test (Wd,Wy) VALUES (:Wd,:Wy)') ; ParamByName('Wd').AsFloat := iWd ; ParamByName('Wy').AsFloat := iWy ; ExecSQL ; end; end; 發表人 - zxy666666 於 2005/04/09 10:51:58
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-11 18:37:06 IP:202.39.xxx.xxx 未訂閱
1.您可以用一個 TMemo 元件將 sTest 為 True 時的各相關變數記錄下來,  然後再來查為什麼. 2.會不會處理不過來或丟失資料, 您可以實際測一下啊! 外人沒辦法猜測的 3.TiThreadTimers 元件是用來做什麼的? 4.Query1 的 SQL 可以在 design-time 就設定好, 然後將 Prepared 設為 True 執行時只要賦了 Parameter 值就好了(另外, Query1.Close 這行也可以不要)    -- 分擔可以輕省, 分享帶來喜樂!
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-12 11:42:58 IP:219.130.xxx.xxx 未訂閱
hagar兄您好!      感謝你的幫忙.   那我先按你說的建議我再測試看.再呈測試報告給你 >它是第三方控件,就是 >,就是用來一直傳送通訊資料至>
mephise
高階會員


發表:4
回覆:149
積分:205
註冊:2004-02-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-14 17:44:00 IP:61.230.xxx.xxx 未訂閱
我假設六組溫度的邏輯演算都差不多吧, sTest是絕不可能自動改變為 true 的, 只要 focus 在哪幾行會設定 sTest 值即可 唯一問題是, 你用 sTest 控制六組測試, 也就是說, 只要有一項測試將 sTest 設為 True, 那麼其他組測試就再也不會執行了, 這是你要的嗎? Mephise Chen
------
Mephise Chen
前興德工程師
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-14 20:45:20 IP:219.130.xxx.xxx 未訂閱
嗨,mephise大大您好!感謝你的回答.6組我有6個變數 >> 可能是我接收 >
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-18 11:12:10 IP:219.130.xxx.xxx 未訂閱
hagar大哥好: 又來麻煩你了,想請問一下:
procedure TForm1.Button1Click(Sender: TObject);
begin
//比如說設計時期 Query1.SQL.Text:='Select * From test where (TestDate =:TestDate ) and (Zb = :Zb)'
 Query1.Prepared := true ; //請問這句寫在這個位置對嗎?(不知道什麼意思,測試了一下加不加這行看不出來有什麼區別啊?)
 Query1.ParamByName('TestDate').AsDate := strtoDate('2005/04/16') ;
 Query1.ParamByName('Zb').AsString := '1' ;
 Query1.close;
 Query1.Open;
end;
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-18 18:37:02 IP:220.141.xxx.xxx 未訂閱
Query1.close; //比如說設計時期 Query1.SQL.Text:='Select * From test where (TestDate =:TestDate ) and (Zb = :Zb)' Query1.ParamByName('TestDate').AsDate := strtoDate('2005/04/16') ; Query1.ParamByName('Zb').AsString := '1' ; Query1.Prepare; Query1.Open; ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛 發表人 - whyzn 於 2005/04/18 18:38:35
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-20 22:17:42 IP:202.39.xxx.xxx 未訂閱
1.rbuf 變數的長度設夠用就好 2.Prepared 的功用參考: http://delphi.ktop.com.tw/topic.php?topic_id=64282 http://delphi.ktop.com.tw/topic.php?topic_id=41938 http://delphi.ktop.com.tw/topic.php?topic_id=33211 -- hagar.
系統時間:2024-04-23 21:17:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!