WINCC c語(yǔ)言基礎(chǔ)
《WINCC c語(yǔ)言基礎(chǔ)》由會(huì)員分享,可在線閱讀,更多相關(guān)《WINCC c語(yǔ)言基礎(chǔ)(22頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、真誠(chéng)為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請(qǐng)指正。 WINCC C語(yǔ)言基礎(chǔ) 要使對(duì)象動(dòng)態(tài)化,在WinCC中有多種不同的選項(xiàng)可用。其中包括變量連接.動(dòng)態(tài)對(duì)話框和直接連接。通過(guò)它們可以實(shí)現(xiàn)復(fù)雜的動(dòng)態(tài)。然而,隨著要求的增加它們會(huì)有限制。對(duì)于用戶來(lái)說(shuō),組態(tài)C動(dòng)作、項(xiàng)目函數(shù)或動(dòng)作可以有更廣的范圍。它們?cè)赪inCC 腳本語(yǔ)言C中創(chuàng)建。對(duì)于許多應(yīng)用來(lái)說(shuō),不必具備非常全面的C語(yǔ)言知識(shí)。它足以為現(xiàn)有函數(shù)提供參數(shù)。然而,為了使用WinCC腳本語(yǔ)言C的全部功能,需要具備有關(guān)這種編輯語(yǔ)言的基本知識(shí)。本課程可以為用戶提供這些知識(shí)。 本課程用來(lái)為不熟悉C語(yǔ)言的人員提供有關(guān)編輯語(yǔ)言C的常規(guī)應(yīng)用的基本知識(shí)。具備C語(yǔ)言編輯
2、經(jīng)驗(yàn)的編程員可以學(xué)習(xí)C語(yǔ)言應(yīng)用于WinCC時(shí)的特性。 2.1? C腳本的開發(fā)環(huán)境 對(duì)于C腳本的創(chuàng)建,WinCC提供兩個(gè)不同的編輯器。一個(gè)是圖形編輯器中的動(dòng)作編輯器,用于在對(duì)象處創(chuàng)建C動(dòng)作;另一個(gè)是全局腳本編輯器,用于創(chuàng)建項(xiàng)目函數(shù)和全局動(dòng)作。腳本語(yǔ)言的語(yǔ)法與采用ANSI的標(biāo)準(zhǔn)C語(yǔ)言相一致。 在WinCC中編輯語(yǔ)言C的另一個(gè)應(yīng)用領(lǐng)域是關(guān)于動(dòng)態(tài)向?qū)У膭?chuàng)建。為此,可以使用一個(gè)單獨(dú)的編輯器。 2.1.1 圖形編輯器的動(dòng)作編輯器 在圖形編輯器中,可以通過(guò)C動(dòng)作使對(duì)象屬性動(dòng)作化。同樣,也可以使用C動(dòng)作來(lái)響應(yīng)對(duì)象事件。 1.動(dòng)作編輯器 對(duì)于C動(dòng)作的組態(tài),可以使用動(dòng)作編輯器。此編輯器可以在對(duì)象屬性
3、對(duì)話框中通過(guò)以下方法打開,即點(diǎn)擊鼠標(biāo)右鍵期望的屬性或事件,然后從顯示的彈出式菜單中選擇C動(dòng)作。已經(jīng)存在的C動(dòng)作在屬性或事件處用綠色箭頭標(biāo)記。 在動(dòng)作編輯器中,可以編寫C動(dòng)作。對(duì)于屬性的C動(dòng)作,必須定義觸發(fā)器。對(duì)于事件的C動(dòng)作,由于事件本身就是觸發(fā)器所以不必再定義。完成的C動(dòng)作必須進(jìn)行編譯,如果編譯程序沒有檢測(cè)到錯(cuò)誤,則可以通過(guò)單擊確定退出動(dòng)作編輯器 2.動(dòng)作的結(jié)構(gòu) 通常,一個(gè)C動(dòng)作相當(dāng)與C中的一個(gè)函數(shù)。C動(dòng)作由兩種不同類型:為屬性創(chuàng)建動(dòng)作和為事件創(chuàng)建的動(dòng)作。通常,屬性的C動(dòng)作用于根據(jù)不同的環(huán)境條件控制此屬性的值(例如變量的值)。對(duì)于這種類型的C動(dòng)作,必須定義觸發(fā)器來(lái)控制其執(zhí)行。事件的C動(dòng)
4、作來(lái)響應(yīng)此事件。 3.屬性的C動(dòng)作 #include? apdefap h long-main(char*? lpszPictureName.char* lpszObjectName.char*lpszPropertyName) { /*1*/ long 1ReturnValue; /*2*/ 1ReturnValue * GetTagSDword(*S32icourse-test-1*); /*3*/ return 1ReturnValue; } 上述實(shí)例代碼代表一個(gè)典型的屬性的C動(dòng)作。各部分的含義描述如下: 標(biāo)題(灰色):灰色陰影顯示的前三行構(gòu)成C的動(dòng)作標(biāo)題。該標(biāo)題自動(dòng)
5、生成并且不能更改。除返回類型(在實(shí)例代碼中為long)之外,所有的函數(shù)標(biāo)題完全相同。將三個(gè)參數(shù)傳送給C動(dòng)作。它們是畫面名稱(Lpsz PictureName),對(duì)象名(lpszObjectName)和屬性名(lpszPropertyName). 變量聲明(1):在可以編輯的第一段代碼中聲明使用的變量。在本實(shí)例代碼中,指的是一個(gè)long型的變量。 數(shù)值計(jì)算(2):在本段中,執(zhí)行屬性值的計(jì)算。在實(shí)例代碼中,只讀入一個(gè)WinCC 變量的數(shù)值。 數(shù)值返回(3):將計(jì)算得出的屬性值賦給屬性。這通過(guò)return命令來(lái)完成 4.事件的C動(dòng)作 #include apdefap.h* void On
6、Clicik(char* lpszPictureName.char* lpszObjectName.char* lpszPropertyName) { /*1*/? long 1Value; /*2*/? 1Value * GetTagSDWord(*s32i-course-tset-1”); ? ? ? SetIeft (lpszPictureName,lpszobjectName,1value); } 上述實(shí)例代碼代表一個(gè)典型的事件的C動(dòng)作。各部分含義描述如下: 標(biāo)題(灰色):灰色陰影顯示的前三行構(gòu)成C動(dòng)作的標(biāo)題。該標(biāo)題自動(dòng)生成并且不能更改。對(duì)于不同類型的事件,其參數(shù)標(biāo)題也不
7、同。將參數(shù)lpszPictureName(畫面名稱).lpszObjectName(對(duì)象名)和lpszPropertyName(屬性名)傳遞給C動(dòng)作。參數(shù)lpszPropertyName只包含與響應(yīng)屬性變化的事件相關(guān)的信息??梢詡鬟f附加的事件指定的參數(shù)。 變量聲明(1):在可以編輯的第一代碼段中聲明使用的變量。在本實(shí)例代碼中,指的是一個(gè)long型的變量。 事件處理(2):在本段中,執(zhí)行響應(yīng)事件的動(dòng)作。在本實(shí)例代碼中,讀入一個(gè)WinCC變量的數(shù)值。該數(shù)值作為位置X分配給自己的對(duì)象。事件的C動(dòng)作的返回值為void類型,也就是說(shuō)不需要返回值 5.C動(dòng)作的創(chuàng)建 創(chuàng)建C動(dòng)作的步驟如下: (1)
8、.打開圖形編輯器,打開期望的WinCC畫面,打開所期望對(duì)象的對(duì)象屬性對(duì)話框 (2)通過(guò)鼠標(biāo)R期望的屬性或事件,然后從彈出式菜單中選擇C動(dòng)作來(lái)打開動(dòng)作編輯器 (3)將顯示動(dòng)作編輯器,其中將顯示函數(shù)的基本框架。此外,C動(dòng)作的標(biāo)題已經(jīng)自動(dòng)生成,該標(biāo)題不能更改。 在C動(dòng)作的標(biāo)題的第一行內(nèi),包括文件apdefap.h.。通過(guò)該文件,向C動(dòng)作預(yù)告所有項(xiàng)目的函數(shù).標(biāo)準(zhǔn)函數(shù)以及內(nèi)部函數(shù)。C動(dòng)作標(biāo)題的第二部分為函數(shù)標(biāo)題。該函數(shù)標(biāo)題提供有關(guān)C動(dòng)作的返回值和可以在C動(dòng)作中使用的傳送參數(shù)的信息。C動(dòng)作標(biāo)題的第三部分開始是花括弧。此花括弧不能刪除。在該開始大括弧和結(jié)束大括弧之間,編寫C動(dòng)作的實(shí)際代碼。 (4)其
9、他自動(dòng)生成的代碼部分包括兩個(gè)注釋塊,若要使交叉索引編輯器可以訪問C動(dòng)作的內(nèi)部信息,則需要這些塊,要允許C動(dòng)作中語(yǔ)句重新排列也需要這兩個(gè)塊。如果這些選項(xiàng)都不用。則可以刪除這些注解。 第一個(gè)塊用于定義C動(dòng)作中使用的WinCC變量。在程序代碼中必須使用定義變量名稱而不是實(shí)際的變量名稱 第二個(gè)注釋塊用于定義C中所使用的WinCC畫面。在程序代碼中也必須使用定義的畫面名稱而不是實(shí)際畫面名稱。 (5)編寫執(zhí)行期望計(jì)算的函數(shù)主題、動(dòng)作等。有多種編輯輔助工具可供使用,其中一種輔助工具是變量選擇對(duì)話框,此對(duì)話框如下所示的按鈕可以打開。在顯示的選擇變量對(duì)話框中,選擇WinCC變量然后單擊確定來(lái)確認(rèn)。于是在C
10、動(dòng)作中在當(dāng)前光標(biāo)位置處插入所選WinCC的變量名稱。 (6)另一種輔助工具是動(dòng)作編輯器左窗口中的函數(shù)選擇。利用函數(shù)選擇,可以在C動(dòng)作中的當(dāng)前光標(biāo)位置處自動(dòng)插入所有可用的項(xiàng)目函數(shù)、標(biāo)準(zhǔn)函數(shù)和內(nèi)部函數(shù)。為此,通過(guò)鼠標(biāo)D來(lái)選擇其數(shù)據(jù)類型的列表。該函數(shù)可以在數(shù)值列中進(jìn)行參數(shù)化。除簡(jiǎn)單的文本輸入以外,選擇變量.圖形對(duì)象和畫面選項(xiàng)都可以用。 為了在C動(dòng)作中的當(dāng)前光標(biāo)位置插入函數(shù),可通過(guò)單擊確認(rèn)來(lái)確定對(duì)話框。 (7)現(xiàn)在必須翻譯已完成的函數(shù)。在通過(guò)如下所示的工具按鈕來(lái)完成。翻譯過(guò)程的結(jié)果顯示在動(dòng)作編輯器的左下角。它包括找到錯(cuò)誤的個(gè)數(shù)和警告的個(gè)數(shù)。錯(cuò)誤總會(huì)使C動(dòng)作無(wú)法進(jìn)行。而警告是一種提示,指出在執(zhí)行C
11、動(dòng)作期間可能出現(xiàn)的錯(cuò)誤。良好的編輯風(fēng)格可防止在創(chuàng)建C動(dòng)作時(shí)出現(xiàn)除0 Ereor(S),0 Warning(s)的輸出結(jié)果之外的情況。 如果在編譯過(guò)程中出現(xiàn)錯(cuò)誤,則它們將在輸出窗口中顯示。通過(guò)鼠標(biāo)D輸出窗口中的錯(cuò)誤消息,可以直接跳轉(zhuǎn)到相應(yīng)的代碼行。 (8)對(duì)于已經(jīng)為對(duì)象屬性創(chuàng)建的C動(dòng)作,必須定義觸發(fā)器。對(duì)于事件本身就是觸發(fā)器所以不用在定義。觸發(fā)器的定義通過(guò)如下所示的按鈕來(lái)執(zhí)行。可以選擇使用時(shí)間變量觸發(fā)器。 (9)通過(guò)單擊動(dòng)作編輯器的確定按鈕,可將已編寫的C動(dòng)作放置在期望的屬性或事件處。通過(guò)C動(dòng)作動(dòng)態(tài)化的屬性或事件將用綠箭頭標(biāo)記。 WinCC標(biāo)簽定義和畫面定義 #include“apd
12、efap.h” long-main(char*lpszPictureName.char* lpsz ObjectName. Char* lpszPropertyName) { /WINCC.TAGNAME-SECTTON-START //syntax.#define TagNameInAction “DMTagName” #define S32I-COURSE-0TEST-1 “S32i-course-test-1” //next TagID :1 //WINCC TAGNAME-SECTION-END //WINCC:PICNAME-SECCTON-START //synt
13、ax: #define PicNameInAction “PictureName” #define CC-0-STARTPICTURE-00 “cc-0-startpicture-00.Pd1” //next PicID:1 //WINCC:PICNAME-SECTTON-END SetTagSDWord(S32I-COURSE-TEST-1,100); OpenPicture(CC-0-STARTPICTURE-00); Return 0; } 如果創(chuàng)建新的C的動(dòng)作,則自動(dòng)生成的代碼將包括兩個(gè)注釋塊。若要使用交叉索引編輯器可以仿問C動(dòng)作的內(nèi)部信息,則需要這些注釋塊。要允許C動(dòng)
14、作中語(yǔ)句重新排列也需要這兩個(gè)塊。 變量定義:第一個(gè)注釋塊用于定義C動(dòng)作中使用的WinCC變量。該注釋塊以/MINCC:TAGAME-SECTION-START作為開始,以/MINCC:TAGNAME-SECTION-END作為結(jié)束。在兩行命令之間,定義C動(dòng)作中的所有WinCC的變量名稱。通過(guò)預(yù)處理程序命令#define后跟定義的名稱(在本實(shí)例代碼中為S32I-COURSE-TEST-1), 其后在接WinCC變量的名稱(在本實(shí)例中為(S32i-course-tsse-1)來(lái)定義。 畫面定義:第二個(gè)注釋塊用來(lái)定義C動(dòng)作中所使用的WinCC畫面。該注釋塊以行/MINCC:PICNAME-SEC
15、TION-START作為開始,以行/MINCC:PICNAME-SECTION-END作為結(jié)束。在兩行之間,定義C動(dòng)作中使用的所有WinCC畫面名稱。它遵循的規(guī)律與上面所描述的定義變量名稱時(shí)所遵循的規(guī)則相同。 應(yīng)用:在實(shí)際程序代碼中,必須使用定義的值,而不是實(shí)際的變量和畫面名稱。在編譯C動(dòng)作之前,預(yù)處理程序?qū)⒂脤?shí)際名稱替換所有定義的名稱 .1.2全局腳本編輯器 全局腳本編輯器用于創(chuàng)建項(xiàng)目函數(shù)、標(biāo)準(zhǔn)函數(shù)和動(dòng)作。 1.項(xiàng)目函數(shù) 如果在C動(dòng)作中經(jīng)常需要相同的功能,則該功能可以在項(xiàng)目函數(shù)中公式化。在WinCC 項(xiàng)目的所有C動(dòng)作都可以按照調(diào)用所有其他函數(shù)一樣的方式來(lái)調(diào)用項(xiàng)目函數(shù)。下面列出了使
16、用項(xiàng)目函數(shù)對(duì)于在C動(dòng)作中創(chuàng)建完整的程序代碼的優(yōu)點(diǎn): 編輯器的中心位置:項(xiàng)目函數(shù)的改變會(huì)影響所有正在使用該函數(shù)的C動(dòng)作。如果沒有使用項(xiàng)目函數(shù),則必須手動(dòng)修改所有相關(guān)的C動(dòng)作。這不但可以簡(jiǎn)化組態(tài),而且可以簡(jiǎn)化維護(hù)和故障檢測(cè)工作。 可重用性:一旦一個(gè)項(xiàng)目函數(shù)編寫完并進(jìn)行了廣泛的測(cè)試,則它隨時(shí)都可以再次使用,無(wú)須附加的組態(tài)或新的測(cè)試。 畫面容量減少:如果并不是在對(duì)象的C動(dòng)作中直接放置完整的程序代碼,則畫面的容量將減少。這可以使畫面打開的速度更快并且在運(yùn)行系統(tǒng)中的效果更佳。 口令保護(hù):項(xiàng)目函數(shù)可以通過(guò)指定口令進(jìn)行保護(hù),以防更改。這樣可以保護(hù)組態(tài)數(shù)據(jù)以及用戶的技術(shù)竅門。項(xiàng)目函數(shù)只能在項(xiàng)目?jī)?nèi)使用。它
17、們存儲(chǔ)在WinCC Project Folder\LIBRARY文件夾內(nèi)并在相同的文件夾中的ap-pbib.h文件內(nèi)定義。許多函數(shù)只能在項(xiàng)目?jī)?nèi)使用。與項(xiàng)目函數(shù)相反,標(biāo)準(zhǔn)函數(shù)可以用于所有的WinCC項(xiàng)目??梢愿默F(xiàn)有的標(biāo)準(zhǔn)函數(shù)。也可以創(chuàng)建新的標(biāo)準(zhǔn)函數(shù)。 標(biāo)準(zhǔn)函數(shù)與項(xiàng)目函數(shù)的區(qū)別僅在于它們的可用性:標(biāo)準(zhǔn)函數(shù)可以跨項(xiàng)目使用,然而項(xiàng)目函數(shù)只能在項(xiàng)目?jī)?nèi)使用。標(biāo)準(zhǔn)函數(shù)存儲(chǔ)在WinCCInstallationFolder\LIBRARY文件夾內(nèi),并在同一文件夾中的ap-glob.h文件內(nèi)定義。 2.內(nèi)部函數(shù) 除項(xiàng)目函數(shù)和標(biāo)準(zhǔn)函數(shù)之外,還有內(nèi)部函數(shù)。其中,它們是標(biāo)準(zhǔn)的C函數(shù)。用戶不能對(duì)其進(jìn)行更改,也不能
18、創(chuàng)建新的內(nèi)部函數(shù)。 動(dòng)作:動(dòng)作(與先前描述的函數(shù)相反)不能由C動(dòng)作或其他函數(shù)調(diào)用。必須為動(dòng)作指定觸發(fā)器來(lái)控制其執(zhí)行。它在運(yùn)行系統(tǒng)中執(zhí)行時(shí)與當(dāng)前所選擇的畫面無(wú)關(guān)。可以組態(tài)全局動(dòng)作,既跨項(xiàng)目動(dòng)作。在這種情況下它們存儲(chǔ)字WinCCProjectFolder\PAS文件夾中。也可以組態(tài)全局動(dòng)作(指定計(jì)算機(jī)的動(dòng)作),它們將存儲(chǔ)在WinCCProjiectFolder\ComputerName\PAS文件夾中。如果在計(jì)算機(jī)的啟動(dòng)列表中選中了全局腳本運(yùn)行系統(tǒng),則一旦項(xiàng)目啟動(dòng),屬于該計(jì)算機(jī)的所有全局動(dòng)作和所有局部動(dòng)作將被激活。 3.建立項(xiàng)目函數(shù) 創(chuàng)建項(xiàng)目函數(shù)所須的步驟與創(chuàng)建標(biāo)準(zhǔn)函數(shù)的步驟完全相同,因此下
19、面的說(shuō)明也適用于標(biāo)準(zhǔn)函數(shù)的創(chuàng)建 建立項(xiàng)目函數(shù)步驟: (1)打開全局腳本編輯器 。 (2)通過(guò)鼠標(biāo)的右鍵項(xiàng)目函數(shù)條目,然后從彈出式菜單中選擇新建→ 函數(shù),將創(chuàng)建新項(xiàng)目函數(shù)的基本框架。 (3)項(xiàng)目函數(shù)可以完全由用戶進(jìn)行配置,沒有不能編譯的代碼段。編寫函數(shù)標(biāo)題,函數(shù)必須有一個(gè)名稱,以便C動(dòng)作或其他函數(shù)調(diào)用時(shí)所有。此外,必須指定返回值和函數(shù)所須的傳遞參數(shù)。 如果當(dāng)前的函數(shù)中要使用其他項(xiàng)目函數(shù)或標(biāo)準(zhǔn)函數(shù),則必須結(jié)合apdefap.h文件,這通過(guò)預(yù)處理程序命令#include“apdefap.h”來(lái)完成,該命令必須插在函數(shù)標(biāo)題之前。 #include? “apdefap.h” int My
20、-Project-Function(int? iFirstParam,BOOL? bSecondParem) { return 0; } (4)編寫函數(shù)主題??梢允褂门c編寫C動(dòng)作相同的輔助工具,特別是變量選擇和函數(shù)選擇。 (5)已完成的函數(shù)現(xiàn)在必須進(jìn)行編譯。這通過(guò)如下所示的工具欄按鈕來(lái)完成。 編譯過(guò)程的結(jié)果顯示在輸出窗口中,將列出產(chǎn)生的錯(cuò)誤和警告,并且顯示其數(shù)量。通過(guò)鼠標(biāo)D輸出窗口中的錯(cuò)誤消息,可以直接跳轉(zhuǎn)到相應(yīng)的代碼行。 Compiling? ? Line 3:error? (0086):function ‘My-Project-Function’ does not
21、 return a val Error(s),o? Warning(s) (6)通過(guò)如下所示的工具欄按鈕,可以將描述添加大批項(xiàng)目函數(shù)中??梢耘c描述一起定義一個(gè)口令,以保護(hù)項(xiàng)目函數(shù)免遭未**人員訪問。 (7)完成的項(xiàng)目函數(shù)必須用合適的名稱進(jìn)行保存。 4.建立全局動(dòng)作 創(chuàng)建全局動(dòng)作所須的步驟與創(chuàng)建局部動(dòng)作所須的步驟完全相同。因此,下面的步驟也適用于創(chuàng)建局部動(dòng)作。 建立全局動(dòng)作步驟: (1)打開全局腳本編輯器 (2)通過(guò)鼠標(biāo)的右鍵項(xiàng)目函數(shù)條目,然后從彈出式菜單中選擇新建動(dòng)作,將創(chuàng)建動(dòng)作的基本框架。 (3)動(dòng)作的標(biāo)題將會(huì)自動(dòng)生成并且不能更該。此外,插入用于定義WinCC變量和WinC
22、C畫面的兩個(gè)注釋塊。這兩個(gè)注釋塊的含義已經(jīng)在先前的C動(dòng)作一節(jié)中進(jìn)行說(shuō)明。 #include “apdefap.h” int gscAction(void) { //WINCC:TAGNAME-SETION-START //syntax.#define TagNameInAction “DMTagName” //next TagID :1 //WINCC:TAGNAME-SECTION-END //WINCC:PICNAME-SECTION-START //oyntax:#define PicNameInAction”PictureName” //next
23、PicID:1 //WINCC:PICNAME-SECTION-END return o; } (4)編寫動(dòng)作主體??梢允褂门c編寫C動(dòng)作相同的輔助工具。特別是變量選擇和函數(shù)選擇。動(dòng)作具有int類型的返回值。缺省的情況下,返回值為0。 (5)通過(guò)如下所示的工具按鈕,可以如同函數(shù)描述一樣將描述添加到動(dòng)作中。也可以定義口令來(lái)保護(hù)項(xiàng)目函數(shù)免遭未**人員的訪問。與函數(shù)相比,它還需要設(shè)置一個(gè)觸發(fā)器來(lái)控制動(dòng)作的執(zhí)行。對(duì)于動(dòng)作觸發(fā)器的選擇,用戶所具有的選擇的范圍要比對(duì)象的C動(dòng)作觸發(fā)器的選擇范圍大。其中,可以編寫一次執(zhí)行過(guò)程 (6)完成的動(dòng)作必須進(jìn)行保存。 5.測(cè)試輸出 執(zhí)行程序來(lái)測(cè)試輸
24、出。這樣便于在開發(fā)期間進(jìn)行故障檢測(cè)和錯(cuò)誤診斷。測(cè)試輸出可以通過(guò)printf()函數(shù)來(lái)啟動(dòng)。通過(guò)該函數(shù),不但可輸出簡(jiǎn)單文本。而且可輸出當(dāng)前變量值。為了使輸出文本可見,必須組態(tài)全局腳本診斷窗口。 Printf()函數(shù):Printf()函數(shù)允許執(zhí)行測(cè)試輸出功能。該函數(shù)的實(shí)例應(yīng)用如下所示: Printf(“I am %d years old\r\n,iAge); Printf()函數(shù)至少一個(gè)參數(shù)。該參數(shù)是一個(gè)字符串。要傳遞的附加類型和數(shù)量取決于該字符串。字符%由prinft()函數(shù)用作在該位置插入變量值的標(biāo)識(shí)符。跟在字符%之后的字符確定給變量的數(shù)據(jù)類型。上表中所使用的字符組合%d表明輸出為十進(jìn)制
25、數(shù),其他可能的組合及其描述如下: %d? 輸出十進(jìn)制數(shù)(int或char),%ld? 長(zhǎng)整型變量作為十進(jìn)制輸出,%c? 輸出字符(char),%x? 以16進(jìn)制格式輸出數(shù)值。(用小寫字母a,b,c? f),%X以16進(jìn)制格式輸出數(shù)值。(用大寫字母A? F),%o? 以八進(jìn)制格式輸出數(shù)值,? %u? 輸出十進(jìn)制數(shù)(專用于unsigned類型), %f? 以浮點(diǎn)數(shù)計(jì)數(shù)制輸出浮點(diǎn)型數(shù)值 例如3.43234,? %e? 以指數(shù)計(jì)數(shù)制輸出浮點(diǎn)型數(shù)值,例如23e+432, %E? 同%e但使用大寫E,例如23E+432,? %s? 輸出字符串(char*),%le? 輸出雙精度型數(shù)值,? %%? 輸出
26、%字符,? |n? 換行輸出(回車),、r 進(jìn)一行輸出,? 、t? 制表位輸出,? 、、 輸出、字符 6.全局腳本診斷窗口 由printf()函數(shù)指定的文本輸出顯示在全局腳本診斷窗口中。組態(tài)這種診斷窗口的步驟如下: (1).打開圖形編輯器 ? ? 打開期望的WinCC 畫面。 (2)組態(tài)智能對(duì)象? ? 應(yīng)用窗口。 將應(yīng)用窗口置于畫面內(nèi)之后,將打開窗口對(duì)話框。從列表中選擇全局腳本條目。通過(guò)單擊確定退出對(duì)話框。 打開模板對(duì)話框,從列表中選擇GSC診斷條目。同樣通過(guò)單擊確定退出對(duì)話框。 (3)為了便于利用全局腳本診斷窗口,建議將對(duì)象屬性對(duì)話框其他條目下的所有屬性設(shè)置為是。 (4)如果
27、項(xiàng)目在運(yùn)行,則由printf()函數(shù)指定的文本輸出將顯示在診斷窗口中。如果用工具欄上相應(yīng)的按鈕中止更新,則可以保存或打印輸出窗口內(nèi)容。 2.2變量 在WinCC項(xiàng)目Project-C-Course中,有關(guān)變量的主題實(shí)例可以通過(guò)單擊如下所示的瀏覽欄來(lái)訪問。實(shí)例在kzz-00.PDL畫面中組態(tài)。 變量:變量是由程序處理的數(shù)據(jù)對(duì)象。變量只有在定義以后才能使用。在第一條指令可以執(zhí)行前,必須先定義程序中的所有變量。 變量可以比做一個(gè)容器。通過(guò)變量名,我們給容器一個(gè)唯一的名稱。容器中內(nèi)容的類型通過(guò)其數(shù)據(jù)類型來(lái)指定,容器的初始內(nèi)容通過(guò)初始值來(lái)指定。在大多數(shù)情況下,該內(nèi)容將在程序執(zhí)行過(guò)程中進(jìn)行處理。
28、此處所描述的變量不應(yīng)誤認(rèn)為是WinCC變量。它們只能在程序代碼中使用。以下程序代碼說(shuō)明了定義變量的一個(gè)實(shí)例。 Int? itag; .在該實(shí)例中,用名字Itag來(lái)定義一個(gè)int數(shù)據(jù)類型的變量。代碼行以分號(hào)結(jié)束。變量名的前面是描述數(shù)據(jù)類型的前綴。這并非必須遵循,但它卻使得在程序創(chuàng)建期間能夠立即識(shí)別變量的數(shù)據(jù)類型。在定義變量時(shí),也可以將其初始化。 Int itag = 0; 常量:除變量之外,程序中也使用常量。它只是數(shù)值的直接使用。為了說(shuō)明這種數(shù)值的含義,可以使用#define命令為它定義符號(hào)常量。 以下程序代碼說(shuō)明了定義符號(hào)常量的一個(gè)實(shí)例。 #define MAX-VALUE 748
29、3647 在給實(shí)例中,用數(shù)值7483647來(lái)定義符號(hào)常量MAX-VALUE。注意代碼行不得用分號(hào)結(jié)束。用大寫字母表示符號(hào)常量是一般的編程規(guī)律,以便易于與變量區(qū)分。 數(shù)據(jù)類型:C所識(shí)別的基本數(shù)據(jù)類型如下: Char 一個(gè)字節(jié),可以接受一個(gè)字符,Int 整型數(shù)值,F(xiàn)loat 單精度型浮點(diǎn)數(shù),Double 雙精度型浮點(diǎn)數(shù),Char數(shù)據(jù)類型的變量需要一個(gè)字節(jié)的存儲(chǔ)空間。其內(nèi)容可以解釋為一個(gè)字符或一個(gè)數(shù)字。 Int數(shù)據(jù)類型之前可以加關(guān)鍵字signed或unsigned。關(guān)鍵字signed代表有符號(hào)數(shù),關(guān)鍵字unsigned代表無(wú)符號(hào)數(shù)。Int數(shù)據(jù)類型之前也可以加關(guān)鍵字long或short.這些關(guān)
30、鍵字也可以不帶int而單獨(dú)使用,其含義仍然相同。Short(或short int)數(shù)據(jù)類型的變量需要2個(gè)字節(jié)的存儲(chǔ)空間,long(或long int)數(shù)據(jù)類型的變量與int數(shù)據(jù)的變量一樣需要4個(gè)字節(jié)的存儲(chǔ)空間,然而double數(shù)據(jù)類型的變量需要8個(gè)字節(jié)的存儲(chǔ)空間。 各數(shù)據(jù)類型的數(shù)值范圍:每種數(shù)據(jù)類型都可以顯示某一數(shù)值范圍的數(shù)值。區(qū)別在于不同的數(shù)據(jù)類型所須的存儲(chǔ)空間不同,以及是有符號(hào)還是無(wú)符號(hào)數(shù)據(jù)類型。 Int? –2147483648至2147483647 Unsigned int? 0至429967295 Short? -32768至32767 Unsigtned short? 0
31、-65535 Long? –2147483648至2147483647 Unsigned long? 0至4294967295 Char? –128至127(所有的ASC||字符) Unsigned char? 0至225(所有的ASC||字符) float? –10^38z 至0^38 double? –10^308至0^308 2.2.1整數(shù)數(shù)據(jù)類型 用C的缺省數(shù)據(jù)類型來(lái)顯示整數(shù)。在事件→鼠標(biāo)→鼠標(biāo)動(dòng)作的對(duì)象按鈕1組態(tài)了本實(shí)例。 1.按鈕1的C動(dòng)作 #include “apdefap.h” void OnClick(char# lpszPictureName ch
32、ar3 lpszObjectName,char#lpszProper” { char cNumber;? ? ? ? //signad 0 bit value long 1Nameber;? ? ? // signad 32 bit value short sNamber;? ? ? // signad 16 bit value int iNumber;? ? ? ? // signad 32 bit value unsigned char ucNumber; //unsigned 8 bit value unsigned long ulNumber; //unsi
33、gned 32 bit value unsigned short usNamber: //unsigned 16 bit value unsigned int uiNumber;? //unsigned 32 bit value cNumber = -128; sNumder = -32768; lNumber = -2147483648; iNumber = 2147483467; //output in dignstics sindow prinft(“\r\nExaple 1:\r\n”); printf(“char:\t\t%d\r\nshort:\
34、t\t%d\r\n” “l(fā)ong:\t\t%d\r\ninth:\t\t%d\r\n”, cNumber,sNumber,1Number,iNumber); ucNumber = 255; usNumder = 65535; u1Nuber = 4294967295; uiNuber = 4294967295; //output in diagnostics vindow printf(“unsigned char:\t%u\r\unsigned short:\t%u\r\n” “unsigned long:\t%u\r\nunsigned int:\t%u
35、\r\n”, ucNumber,usNumber,ulNumber,uiNumber); } 前三行為C動(dòng)作的標(biāo)題。該標(biāo)題不能更改。在第二部分中,定義變量。為char long short和int數(shù)據(jù)類型及其無(wú)符號(hào)的對(duì)應(yīng)量各定義一個(gè)變量。變量名稱前面加上描述數(shù)據(jù)類型的前綴。這并非必須遵循,但它卻使得在程序創(chuàng)建期間能夠立即識(shí)別變量的數(shù)據(jù)類型。作為注釋,每一行包括變量所需的存儲(chǔ)空間(以字符串//開始的注釋部分用綠色標(biāo)記)。在第三部分中,將數(shù)值賦給變量。這通過(guò)使用賦值運(yùn)算符= 來(lái)完成。本實(shí)例中所使用的數(shù)值恰好是各種數(shù)據(jù)類型所能顯示的數(shù)值范圍中的極限值。這些數(shù)值通過(guò)函數(shù)printf()在診
36、斷窗口中輸出。此輸出在下部分顯示。 2.診斷窗口中的輸出 本節(jié)中描述的實(shí)例在診斷窗口中內(nèi)生成下列輸出: Example1: Char:? ? ? ? -128 Short:? ? ? ? -32768 Long:? ? ? ? -21474833648 Int:? ? ? ? ? 2147483647 Unsigned char:? 255 Unsigned short:? 65535 Unsigned long:? 4294967295 Unsigned int:? 4294967295 2.2.2 整數(shù)WinCC變量 在大多數(shù)情況下,要通過(guò)C動(dòng)
37、作或其他函數(shù)來(lái)使對(duì)象動(dòng)態(tài)化和解決類似的事情時(shí),必須使用WinCC變量。為此,有許多用于讀取和寫入WinCC變量值的函數(shù)可以使用。這些函數(shù)可以與每種WinCC 缺省變量類型一起使用。在本實(shí)例中,將數(shù)值寫入各種WinCC變量。WinCC變量的內(nèi)容顯示在輸出域內(nèi)。在事件→ 鼠標(biāo)→ 鼠標(biāo)動(dòng)作處為對(duì)象按鈕3組態(tài)了本實(shí)例 按鈕3的C動(dòng)作: #include “apdefap.h” void OnClick(char# lpszPictureName char3 lpszObjectName,char#lpszProper” { CHAR cNumber; //signed 8 bit v
38、alue SHOURT sNumber; //signed 16 bit value LONG 1Number: //signed 32 bit value BOOL bNumbeer; //TRUE or FALSE BYTE byNumber;//unsigned 8 bit value WORD wNumber; //unsigned 16 bit value DWORDdwNumber; //unsigned 32 bit value CNumber = -128; SNumber = -32768; 1Number = -2147483648;
39、 //set wincc tage Set agSByte(“SO8i-course-tag-1”,cNumber); SetTagSWord(“S16i-course-tag-1”,sNumber); SetTagSDWord(“S32i-course-tag-1”,1Number); bNumber = TRUE; byNumber = 255; wNumber = 65535; dwNumber = 4294967295; //set wincc tage SetTageBit(“BINi-course-tage-1”(SHORT)bNumber);
40、 SetTageByte(“VO8i-course-tage-1”byNumber); SetTageWord(“V16i-course-tage-1”wNumber) SetTageDWord(“V32i-course-tage-1”bwNumber) } 在第一部分中,定義變量。根據(jù)變量可用的數(shù)據(jù)類型選擇變量的數(shù)據(jù)類型。在第二部分中 ,將數(shù)值賦給變量。本實(shí)例中所用的數(shù)值又恰好是各種數(shù)據(jù)類型所能顯示的數(shù)值范圍的極限值。 利用相應(yīng)的函數(shù)將變量賦值給各種WinCC變量。函數(shù)名字包括文本SetTag和函數(shù)所應(yīng)用的WinCC變量的數(shù)據(jù)類型標(biāo)志。與用于寫入WinCC變量的SetTag函
41、數(shù)相對(duì)應(yīng),也用于讀取WinCC變量的GetTag函數(shù)。 如果將BOOL數(shù)據(jù)類型(int的別名)的變量傳遞給SetTagBit()函數(shù),則編譯程序?qū)l(fā)出警告。發(fā)生這種情況是因?yàn)镾etTagBit()函數(shù)希望用SHORT作為所傳遞變量的數(shù)據(jù)類型。因此,本實(shí)例代碼中將變量bNumber的內(nèi)容傳遞給SetTagBit()函數(shù)之前,先將其轉(zhuǎn)換為SHORT類型。此過(guò)程又稱為Typecast(類型轉(zhuǎn)換)。 類型轉(zhuǎn)換:變量的內(nèi)容在傳遞給函數(shù)或賦給其他變量之前,可以轉(zhuǎn)換為不同的數(shù)據(jù)類型。然而,變量本身的數(shù)據(jù)類型保持不變。以下程序代碼說(shuō)明了如何將float數(shù)據(jù)類型的變量轉(zhuǎn)換為int數(shù)據(jù)類型。 INumber
42、 = (int)fNumber; WinCC變量的數(shù)據(jù)類型:下表包括與C中可用數(shù)據(jù)類型相應(yīng)的WinCC變量的各種數(shù)據(jù)類型。它們就是傳遞給SetTag函數(shù)并由GetTag函數(shù)返回的數(shù)據(jù)類型。 WinCC變量的數(shù)據(jù)類型 C的數(shù)據(jù)類型 有符號(hào)的8位數(shù) char 有符號(hào)的16位數(shù) Short int 有符號(hào)的32位數(shù) Long int 二進(jìn)制變量 Short int 無(wú)符號(hào)的8位數(shù) BYTE 無(wú)符號(hào)的16位數(shù) WORD 無(wú)符號(hào)的32位數(shù) DWORD 2.2.3 浮點(diǎn)數(shù)數(shù)據(jù)類型 用C中可用的缺省數(shù)據(jù)類型來(lái)顯示浮點(diǎn)數(shù)。在時(shí)間→ 鼠標(biāo)→ 鼠標(biāo)動(dòng)作處為對(duì)象按鈕4組態(tài)了本
43、實(shí)例。 按鈕4的動(dòng)作: #include “apdefap.h” void OnClick(char* lpszPictureName,char* char3 lpszObjectName,char*lpszProper” { fioat fNumber;? ? //32 bit double dNumber? //64 bit fNumber = 1.0000001; dNumber = 1.0000001; //output in diagnostics window printf(“\r\nExample:4:\r\n); printf(“flo
44、at:\t%2 17f\tsizeof(float):\t%d\r\n” “double:\t%2.17\tsizeof(double):\t%d\r\n”, Fnumber,siaeof(float),dNumber,sizeof(double)); } 在第一部分中,定義變量。用float和double數(shù)據(jù)類型各定義一個(gè)變量。 在第二部分中,將數(shù)值賦給變量。在本實(shí)例中,將相同的數(shù)值賦給兩個(gè)變量。 Float型變量的精度大約為小數(shù)點(diǎn)后第七位。Double變量可以顯示的精度為浮點(diǎn)數(shù)的兩倍,這可以參考診斷窗口中輸出的實(shí)質(zhì)(使用printf()函數(shù))。除變量之外,還輸出其所須的
45、存儲(chǔ)空間。變量所須的存儲(chǔ)空間通過(guò)sizeof()命令來(lái)確定。所須的存儲(chǔ)空間以字節(jié)為單位表示。 4.2.4 浮點(diǎn)數(shù)WinCC變量 除整數(shù)以外,WinCC 變量也可以包含浮點(diǎn)數(shù)。因此,與C的數(shù)據(jù)類型float和double相對(duì)應(yīng),WinCC變量有兩種數(shù)據(jù)類型可用。為了以讀或?qū)懙姆绞皆L問這些WinCC變量,提供了相應(yīng)的SetTag和GetTag函數(shù)。在本實(shí)例中,將數(shù)值寫入各種WinCC變量。WinCC變量的內(nèi)容顯示在輸出域內(nèi)。在事件→ 鼠標(biāo)→ 鼠標(biāo)動(dòng)作處為對(duì)象按鈕5組態(tài)了本實(shí)例。 按鈕5的C動(dòng)作: #include “apdefap.h” void OnClick(char# lpszP
46、ictureName char3 lpszObjectName,char#lpszProper” { fioat fNumber;? ? //32 bit double dNumber? //64 bit fNumber = 1.0000001; dNumber = 1.0000001; //set wincc tags SetTagFloat(“F32i-course-tag-1” fNumber); SetTagDouble(“F64i-course-tag-1” dNumber); } 在第一部分中,定義變量。為float和double數(shù)據(jù)類型各定
47、義一個(gè)變量。在第二部分中,將數(shù)值賦給變量。在本實(shí)例中,將相同的數(shù)值賦給兩個(gè)變量。 利用相應(yīng)的函數(shù)將變量賦值給各種WinCC變量。與此處所用的用于寫入WinCC變量的SetTag函數(shù)相對(duì)應(yīng),用于讀取WinCC變量的GetTag函數(shù)也可用。 2.2.5 靜態(tài)變量和外部變量 在事件→ 鼠標(biāo)→ 鼠標(biāo)動(dòng)作處為對(duì)象按鈕6組態(tài)了本實(shí)例。 1.靜態(tài)變量 C 變量在定義后才能在函數(shù)中生效。在函數(shù)終止后,它又變成無(wú)效。如果再次調(diào)用該函數(shù),則將會(huì)再生成C變量。然而,如果在變量前加關(guān)鍵字static,則在兩次函數(shù)調(diào)用之間保留該變量。因此,它將保留其值。然而對(duì)于C動(dòng)作,只有選擇了WinCC畫面,靜態(tài)變量才
48、會(huì)有效。如果撤消選定畫面,則靜態(tài)變量變成無(wú)效。再次打開畫面后,在C動(dòng)作期間將會(huì)再次生成靜態(tài)變量。 2.外部函數(shù) C變量只能在定義它的函數(shù)內(nèi)訪問。然而,如果在任何函數(shù)以外定義變量。則該變量將成為全局(外部)變量。于是,在任何函數(shù)中都可以利用關(guān)鍵字extern來(lái)申明變量并且可以訪問它。 項(xiàng)目函數(shù)CreateExternalTags() int ext-iNumber = 0 void CreateExternalTags() { //nothing to do } 函數(shù)CreateExternalTags()只用于定義和初始化一個(gè)int類型的外部變量。在項(xiàng)目啟動(dòng)時(shí),調(diào)用
49、一次該函數(shù)(在起始畫面kzz-00.PDL的事件→ 其他→ 打開畫面處)。從此刻起,變量ext-iNumber被定義并且可以在任何C動(dòng)作和其它函數(shù)中使用。 按鈕6的C 動(dòng)作: #include “apdefap.h” void OnClick(char# lpszPictureName char3 lpszObjectName,char#lpszProper” { //declare external tag exter int ext-iNumber; //define static tag static int statt-iNumber = 0: //ou
50、tput in diagnostics window printf(“\r\nExample 6:\r\n” “mouseclicks since project was started:%d\r\n” “mouseclicks since project was opend:%d\r\n” ++ext-iNumber,++stat-iNumber); } 在第一部分中聲明外部變量ext-iNumber,以便能在C動(dòng)作中使用它。在第二部分中,定義并初始化靜態(tài)變量stat-iNumber。它們將在選擇WINCC畫面后首次執(zhí)行C動(dòng)作時(shí)執(zhí)行。對(duì)于以后再此執(zhí)行C動(dòng)作,該變量的值
51、將會(huì)保留。如果撤消選定后在再選擇畫面,則將會(huì)再生成變量。 變量的數(shù)值通過(guò)自增運(yùn)算符++增加1,并通過(guò)printf()函數(shù)在診斷窗口中輸出。因此,變量ext-iNumber將顯示從項(xiàng)目啟動(dòng)后單擊按鈕的次數(shù),而變量stat-iNumber將顯示從畫面打開后單擊的次數(shù)。 2.3? C中的運(yùn)算符和數(shù)學(xué)函數(shù) 運(yùn)算符:在程序中,運(yùn)算符控制變量和常量進(jìn)行的運(yùn)算。變量和常量與運(yùn)算符連接,這樣會(huì)導(dǎo)致產(chǎn)生新的變量值。運(yùn)算符可以分成多種類別。包括數(shù)學(xué)運(yùn)算符。按位運(yùn)算符和賦值運(yùn)算符。 數(shù)學(xué)運(yùn)算符: 運(yùn)算符 描述 +(單目) 正號(hào)(實(shí)際不可使用) -(單目) 負(fù)號(hào) +(雙目)
52、加 -(雙目) 減 * 乘 / 除 % 模(返回除法運(yùn)算的余數(shù)) ++ 自增 –– 自減 按位運(yùn)算符: 這些運(yùn)算符使得可以對(duì)變量中的各個(gè)位進(jìn)行設(shè)置、查詢或重新設(shè)定。 運(yùn)算符 描述 & 按位與 | 按位或 ^ 按位異或 ~ 按位取反 << 將位向左移 >> 將位相右移 邏輯運(yùn)算符 所有的邏輯運(yùn)算符都遵循相同的原則:0表示假,所有其他數(shù)都表示真。這些運(yùn)算符不是生成0(假)就是生成1(真) 運(yùn)算符 描述 > 大于 >= 大于或等于 = = 等于 !=
53、不等于 <= 小于或等于 < 小于 && 邏輯與 || 邏輯或 ! 邏輯非 2.3.1 基本的數(shù)學(xué)運(yùn)算 在本實(shí)例中使用了基本的數(shù)學(xué)運(yùn)算符。在事件→ 鼠標(biāo)→ 鼠標(biāo)動(dòng)作處為對(duì)象按鈕1組態(tài)了本實(shí)例。 按鈕1的動(dòng)作 #include “apdefap.h” void OnClick(char# lpszPictureName char3 lpszObjectName,char#lpszProper” { float fValuel = 123.6; float fValuel = 23.4; float fResAdd; fl
54、oat fResSub; float fResMul; float fResDiv; fResAdd = fValuel+fValue2;//add fResAdd = fValuel-fValue2;//subtract fResAdd = fValuel*fValue2;//multiply fResAdd = fValuel/fValue2;//divide //output in diagnostics window printf(“\r\nExample 1\r\n”) printf(“%1f + %1f = %1f\r\n”,fValuel,fV
55、alue2,fResADD); printf(“%1f - %1f = %1f\r\n”,fValuel,fValue2,fResSub); printf(“%1f * %1f = %1f\r\n”,fValuel,fValue2,fResMul); printf(“%1f /%1f = %1f\r\n”,fValuel,fValue2,fResDiv); } 在第一部分中,定義并初始化兩個(gè)數(shù)據(jù)類型為float的變量。將數(shù)學(xué)運(yùn)算符應(yīng)用于這兩個(gè)變量。在第二部分中,另外定義四個(gè)數(shù)據(jù)類型為float的變量。這些變量存儲(chǔ)執(zhí)行數(shù)學(xué)運(yùn)算的結(jié)果。在第三部分中,用數(shù)學(xué)運(yùn)算符進(jìn)行加、減、乘、
56、除運(yùn)算。這些計(jì)算結(jié)果通過(guò)printf()函數(shù)在診斷窗口中輸出。 4.3.2 自增和自減運(yùn)算符 在本實(shí)例中使用了自增和自減運(yùn)算符。在事件→ 鼠標(biāo)→ 鼠標(biāo)動(dòng)作處為對(duì)象按鈕2組態(tài)了本實(shí)例。 1.前綴和后綴 自增和自減運(yùn)算符既可以用作前綴也可以用作后綴。這兩種類型執(zhí)行相同的動(dòng)作,也就是使用運(yùn)算符的變量值增加或減少1。其區(qū)別在于返回值。如果運(yùn)算符作為前綴,則增加或減少變量值并返回此新值。如果運(yùn)算符作為后綴,則返回原來(lái)的變量值,然后才使變量遞增或遞減。 iValue = ++iCount;//prefix iValue = iCount++;//postfix 2.按鈕2動(dòng)作 #inc
57、lude “apdefap.h” void OnClick(char# lpszPictureName char3 lpszObjectName,char#lpszProper” { static int stat-iPrafix = 0; static int stat-iPostfix = 0; printf(“\r\nExample 2\r\n”); //execte operators printf(“Prefix operator on first tag;? %d\r\n,==stat-iPrafix); printf(“Postfix operat
58、or on second tag;? %d\r\n,==stat-iPostfix++); //check values printf(“Value of first tag after execution:%d\r\n”,stat-iPrafix); printf(“Value of second tag after execution:%d\r\n”,stat-iPostfix); } 在第一部分中,定義并初始化兩個(gè)數(shù)據(jù)類型為int的變量,自增運(yùn)算符作為前綴或后綴應(yīng)用于這兩個(gè)變量。這些運(yùn)算符的返回值通過(guò)printf()函數(shù)在診斷窗口中輸出。然后變量?jī)?nèi)容也通過(guò)prin
59、tf()函數(shù)在診斷窗口中輸出。 2.3.3 位運(yùn)算 在本實(shí)例中使用了基本的按位運(yùn)算符。在事件→ 鼠標(biāo)→ 鼠標(biāo)動(dòng)作處為對(duì)象按鈕3組態(tài)了本實(shí)例。 1.說(shuō)明 在本實(shí)例中,按位運(yùn)算符應(yīng)用了兩個(gè)WinCC變量(無(wú)符號(hào)的16位數(shù))的內(nèi)容。運(yùn)算的結(jié)果存儲(chǔ)在另一個(gè)相同類型的WinCC變量中。應(yīng)用的運(yùn)算符由對(duì)象按鈕 6控制并同時(shí)顯示。按位連接AND、OR、NAND、NOR和EXOR都可用。為每個(gè)選項(xiàng)分配一個(gè)數(shù)值,并將它存儲(chǔ)在另一個(gè)WinCC 變量(無(wú)符號(hào)的8位數(shù))中。 2.按鈕3的動(dòng)作 #include “apdefap.h” void OnClick(char# lpszPictureNam
60、e char3 lpszObjectName,char#lpszProper” { BYTE byOperation; DWORD dwValue1; DWORD dwValue2; DWORD dwResult; //read tag values dwValuel = GetTagWord(“V16i-course-op-1”) dwValue2 = GetTagWord(“V16i-course-op-2”) //get desired operation byOperation = GetTagByte(“V08i-course-op-1”) switch (byOperation) { //AND case 0:dwResult = dwValuel & dwValue2; ? ? ? break; //OR 22 / 22
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇教版五上《小數(shù)乘整數(shù)》ppt課件
- 蘇教版一年級(jí)數(shù)學(xué)上冊(cè)《數(shù)一數(shù)》ppt課件
- 江南1優(yōu)秀課件
- 提高印字質(zhì)量課件
- 服務(wù)分銷策略課件
- 數(shù)學(xué)必修蘇教版互斥事件課件3(共32張PPT)
- 第三章要素費(fèi)用的核算PPT優(yōu)秀資料
- 元素的質(zhì)量分?jǐn)?shù)計(jì)算答案
- 圖形的欣賞與設(shè)計(jì)
- 八年級(jí)下期Uuit10SectionA課件
- 部編七年級(jí)語(yǔ)文下冊(cè)4孫權(quán)勸學(xué)課件
- 部編一年級(jí)語(yǔ)文下冊(cè)端午粽課件
- 超市防損的技能課件
- 表彰班會(huì)教學(xué)課件教學(xué)課件
- 第17講中考數(shù)學(xué)專題復(fù)習(xí) 函數(shù)的綜合應(yīng)用中考數(shù)學(xué)專題復(fù)習(xí)課件課件各版通用