紫金橋軟件中如何實現“配方”功能
紫金橋軟件作為一款強大的現場控制軟件平臺,具有豐富的現場控制功能,靈活的配方處理方式就是其中的一個典型代表。
我們平常說的配方指的是是幾中原料間的配比關系,比如藥方,營養配方等等。紫金橋軟件中的配方不僅僅指原料間的配比關系,還包括溫度壓力等因素。從實質上來說,紫金橋軟件中的配方,就是把一組變量依照不同的配方名和一組組的數據對應起來,當在腳本中加載不同的配方時,利用對應的數值給變量賦值的過程。
這里介紹兩種配方處理方式,一種是利用紫金橋軟件中的配方組件完成配方,另一種是利用紫金橋自由報表強大的與關系數據通訊的能力實現配方的功能。
設計要求:
這里以一個面包加工的工藝為例,針對不同類型的面包,配置面粉,白糖,食鹽,水,黃油的含量,要實現的配方功能如下:
1. 自由選擇使用的配方
2. 下置配方
3. 修改配方
4. 增加/刪除配方
具體功能:
一. 利用配方組件
紫金橋在線幫助中提供了一個利用配方組件實現配方的例子,這里是對該例子的擴展。
由于涉及到修改配方,為避免修改過程中對現場生產產生影響,這里選用中間變量做配方的處理單元。如果系統運行時沒有增加/修改/刪除報表的功能,可以直接用相應的數據庫點作為處理單元。使用中間變量作配方的處理單元時,每次使用配方都需要和數據下置開關一同使用。
步驟一:定義實時數據庫點
首先定義幾個數據庫點用來表示現場各物理量。
切換導航器到數據庫頁,雙擊點組態啟動點組態管理程序,使用點組態管理程序創建如下數據庫點:
點名 |
點說明 |
類型 |
Flour |
面粉 |
模擬IO點 |
Salt |
食鹽 |
模擬IO點 |
Sugar |
白糖 |
模擬IO點 |
Water |
水 |
模擬IO點 |
Butter |
黃油 |
模擬IO點 |
步驟二:定義中間變量
定義如下中間變量,作為配方的直接處理單元。
變量名 |
說明 |
類型 |
Flour_T |
面粉 |
實型 |
Salt_T |
食鹽 |
實型 |
Sugar_T |
白糖 |
實型 |
Water_T |
水 |
實型 |
Butter_T |
黃油 |
實型 |
CurName |
顯示當前配方名 |
字符型 |
NewName |
新建配方名 |
字符型 |
nUpdate |
下置數據開關 |
整型 |
步驟三:創建配方
把導航器切換到畫面頁,在“自定義/配方”項上點擊鼠標右鍵,選擇右鍵菜單中“創建”項,創建一個新的配方。展開配方,在新創建的配方上點擊右鍵,選擇“名稱”給此配方另起一個新的名稱,在這里起名為Re。雙擊配方Re彈出配方編輯對話框,在此對話框中做如下的設置:

在變量欄中填入已經創建的中間變量點名,在配方名欄里填入每一條配方的名字,在中間輸入每一個中間變量下的對應值。然后使用行列操作,刪除多余的行和列,點擊保存按鈕保存對配方的設置。
步驟四:創建畫面
把導航器切換到畫面頁,雙擊“窗口”項,創建一個新的窗口,窗口名默認為“Draw1”并在窗口中繪制如下的畫面:

雙擊面粉右側的字符串,在彈出的動畫聯接對話框中,點擊
按鈕創建一個模擬輸入輸出動畫聯接,把此字符串和Flour_T關聯起來。同樣,將左側的文本與對應的中間變量相關聯,右側的文本與數據庫點相關聯。當前使用配方處的文本與中間變量CurName相關聯。

步驟四:使用腳本調用配方
選擇配方:完成配方的選擇并使用,雙擊“選擇”按鈕,在動畫關聯對話框中選擇
,在“按下鼠標”動作中輸入如下的腳本:

String cs;
#Re.Select(cs);
if StrLen(cs) > 0 then
CurName = cs;
#Re.Load(cs);
nUpdate = 1;
endif
這樣當使用鼠標點擊此按鈕時,就會彈出配方選擇對話框,如果用戶選擇了配方,并且點擊了“確定”按鈕,那么#Re.Select(cs)語句運行之后cs的值將變成用戶選擇的配方的名字,否則它的值為空。當它的值不為空時我們調用#Re.Load(cs)來加載該配方即可。
其中,nUpdate = 1用來控制中間變量向數據庫變量賦值,起到下置數據開關的作用。這需在畫面的應用腳本中作一些相關的設置。
將導航器切換到“畫面”頁,選擇“腳本”下的“應用”,打開,在“程序周期執行”里輸入如下腳本:
if nUpdate == 1 then
nUpdate = 0;
Flour.PV = Flour_T;
Sugar.PV = Sugar_T;
Salt.PV = Salt_T;
Water.PV = Water_T;
Butter.PV = Butter_T;
Endif
這樣,當nUpdate = 1時,系統會自動將每一個與配方有關的中間變量賦值給相應的數據庫變量,完成配方值的下置。注意:必須將nUpdate賦值為0,防止不斷賦值。
增加配方:這里把新加配方單獨做成一個窗口,新建過程和前一個窗口一樣,窗口名默認為“Draw2”,效果圖如下:

首先在“Draw1”窗口中,需要在增加按鈕中添加腳本動作,雙擊“增加”按鈕,在動畫關聯對話框中選擇
,在“按下鼠標”動作中輸入如下的腳本:

Display("DRAW2");
用此腳本打開“Draw”窗口。
然后設置“Draw2”窗口中的各項。將各量對應的文本與相應的中間變量進行關聯。
將填入配方名的文本框命名為Name。選中該文本框,在軟件的左下角屬性框處,填入對象的名稱,如下:

最后設置確定按鈕,雙擊“確定”按鈕,在動畫關聯對話框中選擇
,在“按下鼠標”動作中輸入如下的腳本:

NewName = #Name.Text; //獲得文本框中內容
if NewName == "" then //判斷文本框中內容是否為空,為空則返回
MsgBox("請輸入配方名!");
return; //不執行剩余腳本
endif
if #Re.Add(NewName)==0 then //以文本框內容為名稱新增配方,如果返回值為0
MsgBox("此配方名已存在!"); //則與已有配方名沖突,
return; //返回,不執行剩余腳本
endif
#Re.Save(); //保存新增配方
CloseCurWindow(); //關閉當前窗口
這樣,運行時點擊“確定”按鈕時,首先在對應的各量處輸入新配方的各個量的值,并設置一個配方名,如果新增的配方名不為空,并且不與已有配方名沖突,新配方就可以添加并保存,“Draw2”窗口也會相應關閉。
修改配方:返回“Draw1”窗口,設置修改配方按鈕,雙擊“修改”按鈕,在動畫關聯對話框中選擇 ,在“按下鼠標”動作中輸入如下的腳本:
#Re.Modify(CurName);
#Re.Save();
這樣,使用“修改”按鈕時,就會按照當前各個量的值修改當前選擇的配方。
刪除配方:雙擊“刪除”按鈕,在動畫關聯對話框中選擇
,在“按下鼠標”動作中輸入如下的腳本:

String cs;
#Re.Select(cs);
#Re.Delete(cs);
#Re.Save();
這樣,在使用“刪除”時,就會彈出配方選擇的對話框,如果用戶選擇了配方,并且點擊了“確定”按鈕,那么#Re.Delete(cs)語句運行之后選擇的配方就會被刪除。調用#Re.Save()保存當前設置。
步驟六:運行系統查看結果
運行整個系統,即可實現設計要求的功能。包含配方的選擇,增加新的配方,修改當前配方,刪除配方等。
總結:
紫金橋配方功能,使用方便,易理解、易上手,并且具有配方保護的功能,在多個行業中都有成功的應用。比如長城潤滑油的防凍液調和系統,不僅能夠精確控制配方比例,節約原料成本,而且能夠保護配方的細節,保證配方信息的安全性,贏得了用戶的一致好評。
文章版權歸西部工控xbgk所有,未經許可不得轉載。