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

麻煩各位前輩高手幫忙一下

尚未結案
84825047
一般會員


發表:2
回覆:2
積分:0
註冊:2018-07-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2018-08-03 15:36:19 IP:61.216.xxx.xxx 未訂閱
小的不才要請教各位前輩高手
小的公司對某個系統控制目前寫法
運作方法
設定每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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2018-08-03 15:39:10 IP:59.120.xxx.xxx 未訂閱
你最終的需求是什麼呢?
84825047
一般會員


發表:2
回覆:2
積分:0
註冊:2018-07-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2018-08-03 15:50:30 IP:61.216.xxx.xxx 未訂閱
奇怪....怎有些無法顯示出來
我用簡訊方式寄給你了PD大


===================引 用 P.D. 文 章===================
你最終的需求是什麼呢?
編輯記錄
84825047 重新編輯於 2018-08-03 16:02:43, 註解 無‧
84825047 重新編輯於 2018-08-03 16:04:01, 註解 無‧
84825047 重新編輯於 2018-08-03 16:12:59, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2018-08-03 17:05:48 IP:59.120.xxx.xxx 未訂閱
這是你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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2018-08-04 18:07:11 IP:119.137.xxx.xxx 未訂閱
不知道你的目的是什么,碰到的问题是什么。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2018-08-05 11:28:13 IP:118.169.xxx.xxx 未訂閱
這樣給你建議好了, 因為你要的 edit 不連續, 你把 edit 改為 memo 或 tstringlist 或 tlistbox , 然後在這些items 上自行指定所要的編號, 可能可以幫你省很多事!
84825047
一般會員


發表:2
回覆:2
積分:0
註冊:2018-07-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2018-08-06 13:34:01 IP:61.216.xxx.xxx 未訂閱
其實我也不太會表達

用另一種說好了

就是PLC的Tag Name和Address位址都設定好了(誰設定的也不知道了)

只知道公司留下的資料給我的目前所有的位址代碼

現在小弟只是要用WR讀的命令把資料秀出來

如圖

例如在淬火實際那排第一區到第六區的TEDIE是連續的~

目前我的擷取資料程式碼為上面第一段....

我如何改寫讓連續區塊一起抓取加快速度...不要單一筆抓取
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2018-08-06 22:56:59 IP:118.169.xxx.xxx 未訂閱
雖然你很努力把問題畫面po出來, 但老實說, 我還是看不懂你的狀況, 或許我們沒有接觸過你的 plc 程式
1. 不懂連續值的內容是什麼
2. 畫面框起的 edit 內容會是呈現什麼東西
3. 你要擷取的資料又是什麼規則
4. 連續區塊一起抓取, 這個連續區塊又是什麼, 在那裡? 長什麼樣子?

其實看來這個問題應該並不難解, 只要規則清楚, 內容物清楚, 大概答案就能出來了,
很抱歉, 到目前為止幫不了你
編輯記錄
P.D. 重新編輯於 2018-08-06 22:58:44, 註解 無‧
系統時間:2024-11-21 18:48:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!