產(chǎn)品搜索
請(qǐng)輸入產(chǎn)品關(guān)鍵字:
聯(lián)系方式
郵編:310012
聯(lián)系人:采購(gòu)部
留言:在線留言
商鋪:http://www.towegas.com/st1318/
技術(shù)文章
紫金橋軟件中如何實(shí)現(xiàn)“配方”功能
點(diǎn)擊次數(shù):783 發(fā)布時(shí)間:2013-1-7
紫金橋軟件作為一款強(qiáng)大的現(xiàn)場(chǎng)控制軟件平臺(tái),具有豐富的現(xiàn)場(chǎng)控制功能,靈活的配方處理方式就是其中的一個(gè)典型代表。
我們平常說(shuō)的配方指的是是幾中原料間的配比關(guān)系,比如藥方,營(yíng)養(yǎng)配方等等。紫金橋軟件中的配方不僅僅指原料間的配比關(guān)系,還包括溫度壓力等因素。從實(shí)質(zhì)上來(lái)說(shuō),紫金橋軟件中的配方,就是把一組變量依照不同的配方名和一組組的數(shù)據(jù)對(duì)應(yīng)起來(lái),當(dāng)在腳本中加載不同的配方時(shí),利用對(duì)應(yīng)的數(shù)值給變量賦值的過(guò)程。
這里介紹兩種配方處理方式,一種是利用紫金橋軟件中的配方組件完成配方,另一種是利用紫金橋自由報(bào)表強(qiáng)大的與關(guān)系數(shù)據(jù)通訊的能力實(shí)現(xiàn)配方的功能。
設(shè)計(jì)要求:
這里以一個(gè)面包加工的工藝為例,針對(duì)不同類型的面包,配置面粉,白糖,食鹽,水,黃油的含量,要實(shí)現(xiàn)的配方功能如下:
1. 自由選擇使用的配方
2. 下置配方
3. 修改配方
4. 增加/刪除配方
具體功能:
一. 利用配方組件
紫金橋在線幫助中提供了一個(gè)利用配方組件實(shí)現(xiàn)配方的例子,這里是對(duì)該例子的擴(kuò)展。
由于涉及到修改配方,為避免修改過(guò)程中對(duì)現(xiàn)場(chǎng)生產(chǎn)產(chǎn)生影響,這里選用中間變量做配方的處理單元。如果系統(tǒng)運(yùn)行時(shí)沒有增加/修改/刪除報(bào)表的功能,可以直接用相應(yīng)的數(shù)據(jù)庫(kù)點(diǎn)作為處理單元。使用中間變量作配方的處理單元時(shí),每次使用配方都需要和數(shù)據(jù)下置開關(guān)一同使用。
步驟一:定義實(shí)時(shí)數(shù)據(jù)庫(kù)點(diǎn)
首先定義幾個(gè)數(shù)據(jù)庫(kù)點(diǎn)用來(lái)表示現(xiàn)場(chǎng)各物理量。
切換導(dǎo)航器到數(shù)據(jù)庫(kù)頁(yè),雙擊點(diǎn)組態(tài)啟動(dòng)點(diǎn)組態(tài)管理程序,使用點(diǎn)組態(tài)管理程序創(chuàng)建如下數(shù)據(jù)庫(kù)點(diǎn):
點(diǎn)名 | 點(diǎn)說(shuō)明 | 類型 |
Flour | 面粉 | 模擬IO點(diǎn) |
Salt | 食鹽 | 模擬IO點(diǎn) |
Sugar | 白糖 | 模擬IO點(diǎn) |
Water | 水 | 模擬IO點(diǎn) |
Butter | 黃油 | 模擬IO點(diǎn) |
步驟二:定義中間變量
定義如下中間變量,作為配方的直接處理單元。
變量名 | 說(shuō)明 | 類型 |
Flour_T | 面粉 | 實(shí)型 |
Salt_T | 食鹽 | 實(shí)型 |
Sugar_T | 白糖 | 實(shí)型 |
Water_T | 水 | 實(shí)型 |
Butter_T | 黃油 | 實(shí)型 |
CurName | 顯示當(dāng)前配方名 | 字符型 |
NewName | 新建配方名 | 字符型 |
nUpdate | 下置數(shù)據(jù)開關(guān) | 整型 |
步驟三:創(chuàng)建配方
把導(dǎo)航器切換到畫面頁(yè),在“自定義/配方”項(xiàng)上點(diǎn)擊鼠標(biāo)右鍵,選擇右鍵菜單中“創(chuàng)建”項(xiàng),創(chuàng)建一個(gè)新的配方。展開配方,在新創(chuàng)建的配方上點(diǎn)擊右鍵,選擇“名稱”給此配方另起一個(gè)新的名稱,在這里起名為Re。雙擊配方Re彈出配方編輯對(duì)話框,在此對(duì)話框中做如下的設(shè)置:
在變量欄中填入已經(jīng)創(chuàng)建的中間變量點(diǎn)名,在配方名欄里填入每一條配方的名字,在中間輸入每一個(gè)中間變量下的對(duì)應(yīng)值。然后使用行列操作,刪除多余的行和列,點(diǎn)擊保存按鈕保存對(duì)配方的設(shè)置。
步驟四:創(chuàng)建畫面
把導(dǎo)航器切換到畫面頁(yè),雙擊“窗口”項(xiàng),創(chuàng)建一個(gè)新的窗口,窗口名默認(rèn)為“Draw1”并在窗口中繪制如下的畫面:
雙擊面粉右側(cè)的字符串,在彈出的動(dòng)畫聯(lián)接對(duì)話框中,點(diǎn)擊 按鈕創(chuàng)建一個(gè)模擬輸入輸出動(dòng)畫聯(lián)接,把此字符串和Flour_T關(guān)聯(lián)起來(lái)。同樣,將左側(cè)的文本與對(duì)應(yīng)的中間變量相關(guān)聯(lián),右側(cè)的文本與數(shù)據(jù)庫(kù)點(diǎn)相關(guān)聯(lián)。當(dāng)前使用配方處的文本與中間變量CurName相關(guān)聯(lián)。
步驟四:使用腳本調(diào)用配方
選擇配方:完成配方的選擇并使用,雙擊“選擇”按鈕,在動(dòng)畫關(guān)聯(lián)對(duì)話框中選擇 ,在“按下鼠標(biāo)”動(dòng)作中輸入如下的腳本:
String cs;
#Re.Select(cs);
if StrLen(cs) > 0 then
CurName = cs;
#Re.Load(cs);
nUpdate = 1;
endif
這樣當(dāng)使用鼠標(biāo)點(diǎn)擊此按鈕時(shí),就會(huì)彈出配方選擇對(duì)話框,如果用戶選擇了配方,并且點(diǎn)擊了“確定”按鈕,那么#Re.Select(cs)語(yǔ)句運(yùn)行之后cs的值將變成用戶選擇的配方的名字,否則它的值為空。當(dāng)它的值不為空時(shí)我們調(diào)用#Re.Load(cs)來(lái)加載該配方即可。
其中,nUpdate = 1用來(lái)控制中間變量向數(shù)據(jù)庫(kù)變量賦值,起到下置數(shù)據(jù)開關(guān)的作用。這需在畫面的應(yīng)用腳本中作一些相關(guān)的設(shè)置。
將導(dǎo)航器切換到“畫面”頁(yè),選擇“腳本”下的“應(yīng)用”,打開,在“程序周期執(zhí)行”里輸入如下腳本:
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
這樣,當(dāng)nUpdate = 1時(shí),系統(tǒng)會(huì)自動(dòng)將每一個(gè)與配方有關(guān)的中間變量賦值給相應(yīng)的數(shù)據(jù)庫(kù)變量,完成配方值的下置。注意:必須將nUpdate賦值為0,防止不斷賦值。
增加配方:這里把新加配方單獨(dú)做成一個(gè)窗口,新建過(guò)程和前一個(gè)窗口一樣,窗口名默認(rèn)為“Draw2”,效果圖如下:
首先在“Draw1”窗口中,需要在增加按鈕中添加腳本動(dòng)作,雙擊“增加”按鈕,在動(dòng)畫關(guān)聯(lián)對(duì)話框中選擇 ,在“按下鼠標(biāo)”動(dòng)作中輸入如下的腳本:
Display("DRAW2");
用此腳本打開“Draw”窗口。
然后設(shè)置“Draw2”窗口中的各項(xiàng)。將各量對(duì)應(yīng)的文本與相應(yīng)的中間變量進(jìn)行關(guān)聯(lián)。
將填入配方名的文本框命名為Name。選中該文本框,在軟件的左下角屬性框處,填入對(duì)象的名稱,如下:
zui后設(shè)置確定按鈕,雙擊“確定”按鈕,在動(dòng)畫關(guān)聯(lián)對(duì)話框中選擇 ,在“按下鼠標(biāo)”動(dòng)作中輸入如下的腳本:
NewName = #Name.Text; //獲得文本框中內(nèi)容
if NewName == "" then //判斷文本框中內(nèi)容是否為空,為空則返回
MsgBox("請(qǐng)輸入配方名!");
return; //不執(zhí)行剩余腳本
endif
if #Re.Add(NewName)==0 then //以文本框內(nèi)容為名稱新增配方,如果返回值為0
MsgBox("此配方名已存在!"); //則與已有配方名沖突,
return; //返回,不執(zhí)行剩余腳本
endif
#Re.Save(); //保存新增配方
CloseCurWindow(); //關(guān)閉當(dāng)前窗口
這樣,運(yùn)行時(shí)點(diǎn)擊“確定”按鈕時(shí),首先在對(duì)應(yīng)的各量處輸入新配方的各個(gè)量的值,并設(shè)置一個(gè)配方名,如果新增的配方名不為空,并且不與已有配方名沖突,新配方就可以添加并保存,“Draw2”窗口也會(huì)相應(yīng)關(guān)閉。
修改配方:返回“Draw1”窗口,設(shè)置修改配方按鈕,雙擊“修改”按鈕,在動(dòng)畫關(guān)聯(lián)對(duì)話框中選擇 ,在“按下鼠標(biāo)”動(dòng)作中輸入如下的腳本:
#Re.Modify(CurName);
#Re.Save();
這樣,使用“修改”按鈕時(shí),就會(huì)按照當(dāng)前各個(gè)量的值修改當(dāng)前選擇的配方。
刪除配方:雙擊“刪除”按鈕,在動(dòng)畫關(guān)聯(lián)對(duì)話框中選擇 ,在“按下鼠標(biāo)”動(dòng)作中輸入如下的腳本:
String cs;
#Re.Select(cs);
#Re.Delete(cs);
#Re.Save();
這樣,在使用“刪除”時(shí),就會(huì)彈出配方選擇的對(duì)話框,如果用戶選擇了配方,并且點(diǎn)擊了“確定”按鈕,那么#Re.Delete(cs)語(yǔ)句運(yùn)行之后選擇的配方就會(huì)被刪除。調(diào)用#Re.Save()保存當(dāng)前設(shè)置。
步驟六:運(yùn)行系統(tǒng)查看結(jié)果
運(yùn)行整個(gè)系統(tǒng),即可實(shí)現(xiàn)設(shè)計(jì)要求的功能。包含配方的選擇,增加新的配方,修改當(dāng)前配方,刪除配方等。
總結(jié):
紫金橋配方功能,使用方便,易理解、易上手,并且具有配方保護(hù)的功能,在多個(gè)行業(yè)中都有成功的應(yīng)用。比如長(zhǎng)城潤(rùn)滑油的防凍液調(diào)和系統(tǒng),不僅能夠控制配方比例,節(jié)約原料成本,而且能夠保護(hù)配方的細(xì)節(jié),保證配方信息的安全性,贏得了用戶的*。