<big id="a5mua"></big>

      <tt id="a5mua"><dfn id="a5mua"></dfn></tt>
      <wbr id="a5mua"><sup id="a5mua"></sup></wbr>

        
        

      1. 亚洲综合小综合中文字幕,国产久爱免费精品视频,精品国产品香蕉在线,国产午夜精品在人线播放,精品一二三四区在线观看,国产成人无码免费看视频软件 ,色欲久久人妻内射,午夜在线观看成人av
        萬(wàn)泉河
        WX:ZHO6371995,歡迎+
        級(jí)別: 略有小成
        精華主題: 0
        發(fā)帖數(shù)量: 161 個(gè)
        工控威望: 292 點(diǎn)
        下載積分: 940 分
        在線時(shí)間: 13(小時(shí))
        注冊(cè)時(shí)間: 2021-06-11
        最后登錄: 2025-10-04
        查看萬(wàn)泉河的 主題 / 回貼
        樓主  發(fā)表于: 2022-12-27 12:00
        1225 【跨新年】【萬(wàn)泉河】WINCC中獲取窗口變量前綴以及跨窗口操控的方法

        近段時(shí)間,不約而同的,網(wǎng)站論壇和煙臺(tái)方法學(xué)員中都有提出這樣的問(wèn)題。

        比如:
        l C腳本如何獲得窗口中對(duì)象的變量前綴? VBS如何獲得?
        l C腳本如何實(shí)現(xiàn)在一個(gè)窗口中操控父窗口下的另一個(gè)窗口內(nèi)的控件?
        l VBS如何實(shí)現(xiàn)?

        這些問(wèn)題,都有個(gè)特點(diǎn),提問(wèn)的時(shí)候先把編程語(yǔ)言給限定了。

        而咱就不太有辦法拒絕。畢竟,人家有可能是在完成一個(gè)更復(fù)雜的工作,已經(jīng)在選定的語(yǔ)言下實(shí)現(xiàn)了大部分的功能,現(xiàn)在就在這一點(diǎn)點(diǎn)功能搞不定被卡主了,過(guò)不去了,才來(lái)求助的。

        而如果不指定語(yǔ)言的話(huà),其實(shí)我都早就有答案,特別是VBS的解決方案,都寫(xiě)在《西門(mén)子WINCC入門(mén)到精通》的書(shū)里了,所以只需要從書(shū)柜里把我自己的書(shū)拿出來(lái),找到頁(yè)碼,把頁(yè)碼號(hào)告訴對(duì)方就可以了。

        而且會(huì)發(fā)現(xiàn),大部分提問(wèn)者其實(shí)是有我的那本書(shū)的,只是通讀不夠細(xì)致,沒(méi)發(fā)現(xiàn),或者沒(méi)記住有這方面的介紹。驗(yàn)證了一個(gè)道理,對(duì)一本書(shū),最了解的還是作者自己。

        當(dāng)然,我也發(fā)現(xiàn)了我寫(xiě)書(shū)時(shí)候遺漏的該寫(xiě)而未寫(xiě)的技巧知識(shí)點(diǎn)。可能潛意識(shí)里面,我自己覺(jué)得反正另一條路上有解決方案了,這邊這一條就沒(méi)必要去重復(fù)啰嗦實(shí)現(xiàn)了。特別是C腳本,對(duì)西門(mén)子來(lái)說(shuō)自從20年前的WINCC版本支持VBS之后,官方逐漸在弱化C腳本的地位,我自己也逐漸淡化對(duì)其的研究和使用。想一碗水端平是永遠(yuǎn)不可能的。    

        在此先提醒大家,提問(wèn)問(wèn)題的時(shí)候,盡可能不要限定編程語(yǔ)言。那樣的答案多的是,可以唾手可得。而非要限定語(yǔ)言了,尋找起來(lái)就會(huì)有一些難度。

        所以,我這里做了個(gè)例子,進(jìn)行了測(cè)試,可以把這些坑填上了。也算是對(duì)我自己著作中遺漏部分的補(bǔ)充。


        主畫(huà)面中是2個(gè)按鈕,分別演示了VBS腳本和C腳本彈出窗口的方法。

        而彈出的窗口外觀相同,然而內(nèi)部的程序語(yǔ)言不同,分別有按鈕按下后可以彈出對(duì)話(huà)框提示讀取得到了前綴。

        而后,將上述2個(gè)按鈕分別放到另一個(gè)叫做“窗口中操控”的窗口(PDL文件),腳本經(jīng)過(guò)稍微修改,實(shí)現(xiàn)了上述同樣的功能。

        l 按鈕11的單擊鼠標(biāo)中的VBS程序?yàn)椋?/font>
        Sub OnClick(ByVal Item)
        ScreenItems("畫(huà)面窗口1").TagPrefix="M001_"
        ScreenItems("畫(huà)面窗口1").PictureName=Item.Text
        ScreenItems("畫(huà)面窗口1").Visible=True

        End Sub
        而窗口中有2個(gè)獲取前綴的按鈕,同樣可以得到結(jié)果,腳本分別為:
        Sub OnClick(Byval Item)
        'MsgBOX(ITEM.Parent.Parent.TagPrefix)

        MsgBOX(Parent.TagPrefix)
        End Sub
        注釋掉的腳本也同樣可以執(zhí)行。

        Sub OnClick(Byval Item)
        Dim name
        name=HMIRuntime.Tags("aa").Name

        Dim TagPrefix
        TagPrefix=Split(name,"_")(0)
        MsgBOX(TagPrefix)
        End Sub
        這里取了一個(gè)不存在的aa后綴的變量,然而也絲毫不影響功能。因?yàn)檎Z(yǔ)法本身獲取的是變量名字,對(duì)變量是否有值是否合法根本不在意。

        也注意兩種方式得到的前綴分別有分隔符和無(wú)分隔符的區(qū)別。

        標(biāo)準(zhǔn)的用法當(dāng)然不能每次都通過(guò)腳本來(lái)獲取,而是會(huì)在子窗口打開(kāi)時(shí)即執(zhí)行腳本,獲取到前綴后,賦值到一個(gè)靜態(tài)文本中,窗口中任何需要的地方,可以通過(guò)讀取文本內(nèi)容得到。

        Sub OnOpen()
        'MsgBOX(Parent.TagPrefix)
        ScreenItems("窗口前綴").Text=Parent.TagPrefix
        End Sub

        而如果畫(huà)面窗口中不需要顯示這個(gè)前綴,可以設(shè)置靜態(tài)文本為隱藏。這是官方例程中慣用的手法。

        l 按鈕12的單擊鼠標(biāo)中的C程序?yàn)椋?/font>
        #include "apdefap.h"
        void OnClick(char* lpszPictureName, char*lpszObjectName, char* lpszPropertyName)
        {
        SetPropChar(lpszPictureName, "畫(huà)面窗口1","PictureName","窗口12-C獲取前綴.Pdl");
        SetPropChar(lpszPictureName, "畫(huà)面窗口1","TagPrefix", "M002_");

        SetPropBOOL(lpszPictureName, "畫(huà)面窗口1","Visible", TRUE);
        }

        窗口內(nèi)獲取按鈕的腳本:
        #include "apdefap.h"
        void OnClick(char* lpszPictureName, char*lpszObjectName, char* lpszPropertyName)
        {
        char Name[20];
        HWND hwnd=NULL;

        hwnd=FindWindow(NULL,"WinCC-運(yùn)行系統(tǒng) -"); //獲得句柄
        strcpy(Name,GetPropChar(GetParentPicture(lpszPictureName),GetParentPictureWindow(lpszPictureName),"TagPrefix")); //Return-Type: char*

        MessageBox(hwnd,Name,"OK",MB_OK);
        }
        畫(huà)面打開(kāi)事件中文本內(nèi)容得到的方法:
        #include "apdefap.h"
        void OnOpenPicture(char* lpszPictureName,char* lpszObjectName, char* lpszPropertyName)
        {
        char Name[20];
        strcpy(Name,GetPropChar(GetParentPicture(lpszPictureName),GetParentPictureWindow(lpszPictureName),"TagPrefix")); //Return-Type: char*
        SetPropChar(lpszPictureName,"窗口前綴","Text",Name); //Return-Type: BOOL
        }

        這里C腳本實(shí)現(xiàn)的核心是一個(gè)GetParentPicture的函數(shù),可以得到窗口的父窗口的文件名字。而這個(gè)函數(shù)是個(gè)神仙函數(shù),各種幫助資料中都沒(méi)有見(jiàn)過(guò)介紹。所以只有從已有的使用演示程序中獲取。

        l 窗口中按鈕11的單擊鼠標(biāo)中的VBS程序?yàn)椋?/font>
        Sub OnClick(ByVal Item)
        Parent.Parent.ScreenItems("畫(huà)面窗口1").TagPrefix="M001_"
        Parent.Parent.ScreenItems("畫(huà)面窗口1").PictureName=Item.Text
        Parent.Parent.ScreenItems("畫(huà)面窗口1").Visible=True
        End Sub

        l 窗口中按鈕12的單擊鼠標(biāo)中的C程序?yàn)椋?/font>
        #include "apdefap.h"
        void OnClick(char* lpszPictureName, char*lpszObjectName, char* lpszPropertyName)
        {
        char szParentPicture[512];
        strncpy (szParentPicture,GetParentPicture(lpszPictureName), sizeof(szParentPicture));

        SetPropChar(szParentPicture, "畫(huà)面窗口1","PictureName","窗口12-C獲取前綴.Pdl");
        SetPropChar(szParentPicture, "畫(huà)面窗口1","TagPrefix", "M002_");

        SetPropBOOL(szParentPicture, "畫(huà)面窗口1","Visible", TRUE);
        }

        分別實(shí)現(xiàn)了上述同樣的功能。

        當(dāng)然,我們也可以隨意的組合搭配按鈕和窗口內(nèi)的程序,都可以實(shí)現(xiàn)同樣的功能。比如即便你程序的主體語(yǔ)言是C的或者VBS,然而窗口中的文本獲得前綴部分可以用VBS簡(jiǎn)單得到。

        最后,這些具體產(chǎn)品知識(shí)點(diǎn)的技巧內(nèi)容我近幾年確實(shí)很少觸及了。因?yàn)樵谖铱磥?lái)那都是基本功。我甚至也不去記憶具體的函數(shù)名字,比如上面的name還是tagname, TagPrefix還是Prefix都記不住的。我即便要使用,也都直接找現(xiàn)成的程序模塊看一眼,抄來(lái)用下即可。

        而事實(shí)上,隨著標(biāo)準(zhǔn)化模塊化的推進(jìn),這些技能已經(jīng)很少用到了,因?yàn)樵缇头庋b完善在模塊中了。

        有一些年輕人看到我近年來(lái)寫(xiě)各種科普文章,很少提及這些具體的技術(shù)技能技巧,懷疑我從來(lái)沒(méi)掌握這些技能,DISS我,甚至來(lái)跟我PK,只能是他們眼光太短淺了,你要從事技術(shù)工作,不是要把一項(xiàng)項(xiàng)的技能從年輕到年老記憶地牢牢的,以隨時(shí)使用。相反的是,大部分技能是需要封裝的,封裝以后直接使用,甚至自己要主動(dòng)把這些具體技能都遺忘掉,才可以有更多的精力去掌握更高層的知識(shí)。

        最后,給大家的建議是,要盡量少自己從頭造輪子。

        雖然我自己在成長(zhǎng)過(guò)程中,是摸著石頭過(guò)河每個(gè)輪子逐個(gè)造過(guò)來(lái)的,遇到任何問(wèn)題,也都抑制不住要自己親自造輪子的沖動(dòng)。輪子的每一個(gè)細(xì)節(jié),如果不親自掌握,就會(huì)抓耳撓腮睡覺(jué)都不安心。

        然而仍然要提醒同行后來(lái)者,這是一種非常低效率的行為。你可以有好奇心,精力充沛的情況下可以對(duì)別人造好的輪子仔細(xì)研讀原理,自己可以從中掌握些基本功,然而自己從頭造輪子這件事,就要盡量避免了。

        上述例程的實(shí)現(xiàn)方法,西門(mén)子官方的例子中其實(shí)原本就有,而且功能比我這里介紹的要全面而細(xì)致得多得多。

        西門(mén)子官方例程中, BST例程較多的是使用了C腳本,而LBP例程(或者叫做BPL)相同的功能則更多是用VBS實(shí)現(xiàn)的。

        這些例程我都已經(jīng)寫(xiě)文章推薦過(guò)多次了。這回就不再提供鏈接以及親自提供文件了,而只提供名字,需要者自己辛苦一點(diǎn)去找到并學(xué)習(xí)了解。看來(lái)太容易得到的資料通常都不珍惜,只有自己辛苦一點(diǎn),千辛萬(wàn)苦得到的才會(huì)更加倍的去學(xué)習(xí)。

        另外,考慮到上面的乏味的語(yǔ)言講述不夠直觀,有可能很多人看了并不能理解。 我有計(jì)劃在元旦期間做2次視頻直播講座,專(zhuān)門(mén)講解展示這個(gè)例程的實(shí)現(xiàn)方法。第一次直播會(huì)在煙臺(tái)方法學(xué)員群中,第二次直播會(huì)面向大眾。有感興趣者請(qǐng)關(guān)注公眾號(hào)、朋友圈,及時(shí)獲取通知。  
        本帖最近評(píng)分記錄:
      2. 下載積分:+1(hsiung) 熱心助人!
        eaglesence
        eaglesence
        級(jí)別: 家園常客
        精華主題: 0
        發(fā)帖數(shù)量: 499 個(gè)
        工控威望: 831 點(diǎn)
        下載積分: 26279 分
        在線時(shí)間: 128(小時(shí))
        注冊(cè)時(shí)間: 2019-04-02
        最后登錄: 2025-11-02
        查看eaglesence的 主題 / 回貼
        1樓  發(fā)表于: 2022-12-30 12:14
        這個(gè)跨窗口操作大家用的多嗎?

        主站蜘蛛池模板: 日本一区二区三区视频版| 蜜臀av久久国产午夜福利软件| 麻豆国产va免费精品高清在线| 夜夜爽夜夜叫夜夜高潮| 99久久精品国产一区二区暴力| 久久人妻精品国产| 欧美国产日产一区二区| 国产大片黄在线观看| 亚洲欧洲一区二区精品| 亚欧洲乱码视频一二三区| 精品一区二区三区女性色| 成人性影院| 久久天天躁狠狠躁夜夜2020老熟妇 | 日韩精品久久一区二区三| 无码少妇一区二区三区浪潮av| 日韩成人一区二区二十六区| 国产精品毛片av999999| 亚洲欧洲色图片网站| 亚洲国产良家在线观看| 青草青草伊人精品视频| 26uuu另类亚洲欧美日本 | 四虎成人精品无码| 国精品无码一区二区三区在线蜜臀| 日本熟妇人妻右手影院| 国产鲁鲁视频在线观看| 九草在线观看视频免费福利| 公喝错春药让我高潮| a级毛片视频免费观看| 午夜福利片1000无码免费| 亚洲中文无码av永久app| 国产成人高清亚洲一区91| 亚洲a免费| 亚洲av第二区国产精品| 久久亚洲中文字幕伊人久久大| 亚洲精品久久久久999666| 激情综合色综合啪啪开心| 黄色福利在线| 欧美乱码伦视频免费| 久久久久亚洲AV无码专| 国色天香成人一区二区| 午夜福利电影|