麻煩各位前輩高手幫忙一下 |
尚未結案
|
84825047
一般會員 發表:2 回覆:2 積分:0 註冊:2018-07-26 發送簡訊給我 |
小的不才要請教各位前輩高手
小的公司對某個系統控制目前寫法 運作方法 設定每0.5秒觸發TIMER傳送爐號位址及檢查碼給PLC TEDIT號碼是連續的CD0070_K01~CD0075_K01 但中間又有不連續的~~~區塊!! [code delphi] procedure TFHDC.Button1Click(Sender: TObject); var j: integer; begin compno1 := ''; for j := 0 to ComponentCount - 1 do begin if copy(TEdit(Components[j]).Name, 9, 3) <> '03' then begin if pos('CD', TEdit(Components[j]).Name) > 0 then begin compno := copy(TEdit(Components[j]).Name, 9, 3); // 爐號 compno1 := compno1 compno; compno := copy(TEdit(Components[j]).Name, 2, 5); // 位址 compno1 := compno1 compno; end; end; end; inc(ttlno); Panel57.Caption := inttostr(ttlno); {if ttlno > 100000 then begin //固定次數後重新開 機,否則機器記憶體會不足 ExitWindowsEx(EWX_REBOOT, 0); ExitWindowsEx(EWX_FORCE, 0); end else begin strcut := 1; timer1.Enabled := true; Timer3.Enabled := true; Timer2.Enabled := true; end; } strcut := 1; timer1.Enabled := true; Timer3.Enabled := true; Timer2.Enabled := true; end; procedure TFHDC.Timer2Timer(Sender: TObject); var chksumstr: string; chksum, i, j: integer; begin if compno1 <> '' then begin chksum := 0; chksumstr := ''; if compno = '' then begin Timer2.Enabled := false; compno1 := ''; Button1Click(Sender); //開始擷取資料 end; mchno := copy(compno1, strcut, 2); inc(strcut, 2); compno := copy(compno1, strcut, 5); s := mchno 'FFWRA' compno '01'; if CheckBox1.Checked then begin if (compno '_K' mchno) = 'D0070_K01' then PageControl1.ActivePageIndex := 0; if (compno '_K' mchno) = 'D0076_K02' then PageControl1.ActivePageIndex := 1; if (compno '_K' mchno) = 'D0070_K03' then PageControl1.ActivePageIndex := 2; end; for i := 1 to length(s) do begin chksum := chksum ord(s[i]); //checksum採10進位相加 end; chksumstr := IntToHex(chksum, 2); s := s copy(chksumstr, length(TRIM(chksumstr)) - 1, 2); //加checksum後兩碼 OutPutMsg(#5 s #13 #10); //ENQ s CR LF StatusBar1.Panels[2].Text := s; inc(strcut, 5); end else begin Timer2.Enabled := false; compno1 := ''; end; end; procedure TFHDC.com1ReceiveData(Sender: TObject; DataPtr: Pointer; DataSize: Cardinal); var RS, anstr: string; i, j, k, m, n: integer; begin try RS := StringOfChar(' ', DataSize); move(DataPtr^, pchar(RS)^, DataSize); StatusBar1.Panels[4].Text := RS; j := length(copy(trim(RS), 5, pos(chr(03), trim(RS)) - 5)); m := 5; n := 8; if (j mod 4) = 0 then begin for k := 1 to (j div 4) do begin anstr := Analyize1(copy(trim(RS), m, n - m 1)); if (anstr = '') or (anstr = null) then anstr := '0'; for i := 0 to ComponentCount - 1 do begin if Components[i].ClassType = TEdit then begin if TEdit(Components[i]).Color = clyellow then TEdit(Components[i]).Color := $00DBE1D7 end; if Components[i].ClassType = TEdit then begin if (TEdit(Components[i]).Name = 'C' compno '_K' mchno) then begin TEdit(Components[i]).Color := clYellow; if (compno = 'D0076') or (compno = 'D0077') or (compno = 'D0606') or (compno = 'D0607') then begin TEdit(Components[i]).Text := '0'; TEdit(Components[i]).Text := (CurrToStr(strtoint(anstr) / 100)); end else begin TEdit(Components[i]).Text := '0'; TEdit(Components[i]).Text := anstr; end; end; end; end; inc(m, 4); inc(n, 4); end; end; except end; end; [/code] 編輯記錄
84825047 重新編輯於 2018-08-03 16:42:22, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
84825047
一般會員 發表:2 回覆:2 積分:0 註冊:2018-07-26 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
這是你cc給我的簡訊內容, 幫你po上去, 希望這類討論可以透過公開公眾討論, 或許會得到更多的回響
不過程式是你的(落落長), 大概很難有人可以明白你程式的流程及概念, 如果你能把要處理的畫面及結果用示意圖演示出來加以說明, 應該會讓其他人更容易明白而取得幫忙 運作方法 先複製所有TEDIT名稱上的爐號和位址到陣列 設定每0.5秒觸發TIMER傳送爐號位址及檢查碼給PLC PLC接收到資訊再回傳目前設定的資料 目前是一筆一筆的方式 要如何改成一次抓取再一次回傳? 像第一區到第六區TEDIT號碼是連續的CD0070_K01~CD0075_K01 但中間又有不連續的~~~區塊!! ===================引 用 84825047 文 章=================== 奇怪....怎有些無法顯示出來 我用簡訊方式寄給你了PD大 ===================引 用 P.D. 文 章=================== 你最終的需求是什麼呢?
編輯記錄
P.D. 重新編輯於 2018-08-03 17:11:56, 註解 無‧
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
84825047
一般會員 發表:2 回覆:2 積分:0 註冊:2018-07-26 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
雖然你很努力把問題畫面po出來, 但老實說, 我還是看不懂你的狀況, 或許我們沒有接觸過你的 plc 程式
1. 不懂連續值的內容是什麼 2. 畫面框起的 edit 內容會是呈現什麼東西 3. 你要擷取的資料又是什麼規則 4. 連續區塊一起抓取, 這個連續區塊又是什麼, 在那裡? 長什麼樣子? 其實看來這個問題應該並不難解, 只要規則清楚, 內容物清楚, 大概答案就能出來了, 很抱歉, 到目前為止幫不了你
編輯記錄
P.D. 重新編輯於 2018-08-06 22:58:44, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |