WinCC的畫面使用技巧


以下內容以VB腳本為主,僅在VB腳本無法實現的功能中使用C腳本。

畫面導航

畫面導航的作用是打開起始畫面、前一張畫面和后一張畫面等,只能用C腳本實現。

  • 打開起始畫面:    OpenHomePicture(); 
  • 打開前一張畫面: OpenPrevPicture(); 
  • 打開后一張畫面: OpenNextPicture(); 
  • 存儲畫面:      StorePicture(); 
  • 打開存儲畫面:    OpenStorePicture(); 

切換畫面窗口中的畫面

 WinCC通過“畫面窗口”控件將其他畫面嵌套顯示在另一個畫面中 ,可以根據需要讓“畫面窗口”顯示不同的畫面。

“畫面窗口”控件通過寫入不同的畫面名稱調用不同的畫面。“畫面窗口”控件有兩個屬性跟畫面名稱相關,分別是ScreenName和PictureName,這兩個屬性有什么區別呢?

'畫面名稱不能帶后綴名
ScreenItems("Window1").ScreenName = "Newpicture"
ScreenItems("Window1").PictureName = "Newpicture"

 通過ScreenName屬性切換畫面后,使用 OpenPrevPicture() 切換到上一個畫面將會回到切換畫面之前,而用PictureName屬性切換畫面,WinCC的畫面導航中不會記錄這次畫面的切換,使用 OpenPrevPicture() 切換到上一個畫面實際是回到了上上個畫面。

通過一個實驗更清楚的了解這個結論,用一個畫面窗口引用三個畫面,這三個畫面分別標為A、B、C,用ScreenName和PictureName各做兩個切換按鈕。

(1)初始畫面為A;

 

(2)使用ScreenName切換到畫面B;

 

(3)使用ScreenName切換到畫面C;

(4)使用OpenPrePicture()返回前一個畫面,此時返回到畫面B,ScreenName屬性切換的畫面是有導航路徑記錄的;

 

(5)使用PictureName切換到畫面C;

 

(6)使用OpenPrePicture()返回前一個畫面,此時返回到畫面A,PictureName屬性切換的畫面沒有導航路徑記錄,事實上返回到了第4步的上一張畫面,第4步是畫面B,所以上一張畫面是畫面A。

 

如何切換基畫面

WinCC圖形系統運行時第一張打開的畫面就是基畫面,沒有畫面窗口控件可以操作基畫面,如何切換基畫面?

WinCC的VB腳本中的HMIRuntime對象的BaseScreenName屬性保存了基畫面的畫面名稱,通過修改 HMIRuntime.BaseScreenName 屬性可以切換基畫面。當調用畫面時會自動加上畫面后綴名,因此畫面名稱中不要添加 .pdl 后綴名,否則會報錯。

'畫面名稱不能帶有后綴名
HMIRuntime.BaseScreenName = "NewPicture"

 

如何引用父窗口的對象

在畫面窗口中引用了一個畫面,點擊嵌套畫面中的按鈕后切換自身的畫面,如何做?

 WinCC的VB腳本中有Parent對象,Parent對象即為當前腳本環境的父對象,當在嵌套的畫面的按鈕中調用Parent對象,Parent對象就是引用該畫面的畫面窗口對象。

於是用以下代碼就可以調用畫面窗口的ScreenName屬性。

Parent.ScreenName = "NewPicture"

 

同樣還可以將畫面窗口設成不可見,這樣能夠用畫面窗口實現顯示一個對話框,然后關閉對話框的效果。

Parent.Visible = False

 

如果要引用上層畫面中的對象,這時就需要連續使用兩個Parent對象。第一個Parent表示畫面窗口,第二個Parent表示畫面窗口所在的畫面,然后再用 ScreenItems() 方法引用畫面上的控件。

Parent.Parent.ScreenItems("矩形1").BackColor = RGB(0,255,0)

 如下,點擊嵌套畫面中的按鈕,修改基畫面上矩形控件的背景顏色。

 

如何引用畫面窗口中的畫面的控件

如何在基畫面中執行腳本,修改嵌套畫面中的控件屬性呢?

在WinCC的VB腳本中,畫面窗口控件有Screen屬性,該屬性即為畫面窗口引用的畫面對象,通過Screen屬性可以引用嵌套畫面中的控件。

Dim SubScreen
Set SubScreen = screenItems("Window1").Screen
SubScreen.ScreenItems("矩形1").BackColor = RGB(0,255,0)

 如下,點擊基畫面中的按鈕,修改嵌套畫面中矩形控件的背景顏色。

 

如何引用多層嵌套畫面窗口中的控件

方法之一是用 screenItems().Screen.screenItems().Screen 去調用嵌套畫面,這樣太麻煩,更簡單的方法是用 HMIRuntime.Screens("win1.win2") ,函數參數是畫面窗口的控件名,嵌套的畫面窗口用點 . 分隔。

 HMIRuntime.Screens() 函數使用的是畫面窗口的絕對路徑,即從基畫面開始排序畫面窗口控件名。假設嵌套了兩層畫面,畫面窗口名分別為win1、win2,不管是在基畫面中執行代碼,還是在win1畫面中執行代碼,代碼都是 HMIRuntime.Screens("win1.win2") 。舉個更具體的例子,如果在同一個畫面中使用了兩個畫面窗口,假設它們的嵌套關系為 win1.win2 和 win3.win4 ,win1和win3兩個畫面窗口同在基畫面中,在win4的畫面中執行代碼,修改win2畫面中控件的屬性,那么它的代碼還是 HMIRuntime.Screens("win1.win2") ,如果用 Parent 和 ScreenItems().Screen 方法,就要寫很長的相對路徑了。

如下,嵌套了三層畫面窗口,畫面窗口的控件名分別是Window1、Window2、Window3,矩形控件在Window3引用的畫面中,點擊基畫面的按鈕,修改嵌套畫面中控件的顏色。

Dim SubScreen
Set SubScreen = HMIRuntime.Screens("Window1.Window2.Window3")
SubScreen.ScreenItems("矩形1").BackColor = RGB(0,255,0)

 

為畫面添加變量前綴或服務器前綴

 有這樣一種情況,有兩組或多組變量,假設其中一組變量名為A_tag1、A_tag2、A_tag3,另一組變量名為B_tag1、B_tag2、B_tag3,綁定這兩組變量的畫面完全一樣,只是綁定的變量名不同。能否只做一張畫面,根據需要顯示不同的變量?

畫面窗口提供了兩個屬性:變量前綴和服務器前綴。寫入了變量前綴后,在運行時畫面窗口引用的畫面中所有的變量都會添加上變量前綴;寫入服務器前綴后,引用的畫面中所有變量和嵌套的畫面都會添加上服務器前綴,即從服務器調用變量和畫面。

上面的例子中,只需做一張畫面,其中變量名為tag1、tag2、tag3,顯示第一組變量就用帶有變量前綴 A_ 的的畫面窗口,顯示第二組變量就用 B_ 的畫面窗口,運行時會自動給變量添加上前綴再調用。

 

調用不帶前綴的變量

 畫面窗口添加變量前綴屬性后,所有變量都有了前綴,有時個別變量不需前綴,例如在畫面中調用系統變量 @CurrentUser 顯示當前登錄的用戶就不能加前綴,如何取消這些變量的前綴?

  • 取消變量前綴:@NOTP
  • 取消服務器前綴:@NOSP
  • 取消變量前綴和服務器前綴:@NOP

在變量前面添加以上標簽,即使畫面窗口有前綴,該變量也是調用不帶前綴的版本。以讀取不帶前綴的 @CurrentUser 變量為例。

HMIRuntime.Tags("@NOP::@CurrentUser").Read

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM