版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、WINCC C語言基礎(chǔ)要使對(duì)象動(dòng)態(tài)化,在WinCC中有多種不同的選項(xiàng)可用。其中包括變量連接.動(dòng)態(tài)對(duì)話框和直接連接。通過它們可以實(shí)現(xiàn)復(fù)雜的動(dòng)態(tài)。然而,隨著要求的增加它們會(huì)有限制。對(duì)于用戶來說,組態(tài)C動(dòng)作、項(xiàng)目函數(shù)或動(dòng)作可以有更廣的范圍。它們?cè)赪inCC 腳本語言C中創(chuàng)建。對(duì)于許多應(yīng)用來說,不必具備非常全面的C語言知識(shí)。它足以為現(xiàn)有函數(shù)提供參數(shù)。然而,為了使用WinCC腳本語言C的全部功能,需要具備有關(guān)這種編輯語言的基本知識(shí)。本課程可以為用戶提供這些知識(shí)。本課程用來為不熟悉C語言的人員提供有關(guān)編輯語言C的常規(guī)應(yīng)用的基本知識(shí)。具備C語言編輯經(jīng)驗(yàn)的編程員可以學(xué)習(xí)C語言應(yīng)用于WinCC時(shí)的特性。2.1
2、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)作。腳本語言的語法與采用ANSI的標(biāo)準(zhǔn)C語言相一致。在WinCC中編輯語言C的另一個(gè)應(yīng)用領(lǐng)域是關(guān)于動(dòng)態(tài)向?qū)У膭?chuàng)建。為此,可以使用一個(gè)單獨(dú)的編輯器。2.1.1 圖形編輯器的動(dòng)作編輯器在圖形編輯器中,可以通過C動(dòng)作使對(duì)象屬性動(dòng)作化。同樣,也可以使用C動(dòng)作來響應(yīng)對(duì)象事件。1動(dòng)作編輯器對(duì)于C動(dòng)作的組態(tài),可以使用動(dòng)作編輯器。此編輯器可以在對(duì)象屬性對(duì)話框中通過以下方法打開,即點(diǎn)擊鼠標(biāo)右鍵期望的屬性或事件,然后從顯示的彈出式菜單中選擇C動(dòng)作
3、。已經(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ò)誤,則可以通過單擊確定退出動(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ā)器來控制其執(zhí)行。事件的C動(dòng)作來響應(yīng)此事件。3屬性的C動(dòng)作#include apdefap hlong-main(char* lpsz
4、PictureName.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)生成并且不能更改。除返回類型(在實(shí)例代碼中為long)之外,所有的函數(shù)標(biāo)題完全相同。將三個(gè)參數(shù)傳送給C動(dòng)作。它們是畫面名稱(Lpsz PictureName
5、),對(duì)象名(lpszObjectName)和屬性名(lpszPropertyName).變量聲明(1):在可以編輯的第一段代碼中聲明使用的變量。在本實(shí)例代碼中,指的是一個(gè)long型的變量。數(shù)值計(jì)算(2):在本段中,執(zhí)行屬性值的計(jì)算。在實(shí)例代碼中,只讀入一個(gè)WinCC 變量的數(shù)值。數(shù)值返回(3):將計(jì)算得出的屬性值賦給屬性。這通過return命令來完成4事件的C動(dòng)作#include apdefap.h*void OnClicik(char* lpszPictureName.char* lpszObjectName.char* lpszPropertyName)/*1*/ long 1Value;
6、/*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)題也不同。將參數(shù)lpszPictureName(畫面名稱).lpszObjectName(對(duì)象名)和lpszPropertyName(屬性名)傳遞給C動(dòng)作。參數(shù)lpszPropertyName只包含與響應(yīng)屬性變化的事件相關(guān)的信息??梢?/p>
7、傳遞附加的事件指定的參數(shù)。變量聲明(1):在可以編輯的第一代碼段中聲明使用的變量。在本實(shí)例代碼中,指的是一個(gè)long型的變量。事件處理(2):在本段中,執(zhí)行響應(yīng)事件的動(dòng)作。在本實(shí)例代碼中,讀入一個(gè)WinCC變量的數(shù)值。該數(shù)值作為位置X分配給自己的對(duì)象。事件的C動(dòng)作的返回值為void類型,也就是說不需要返回值5C動(dòng)作的創(chuàng)建創(chuàng)建C動(dòng)作的步驟如下:(1).打開圖形編輯器,打開期望的WinCC畫面,打開所期望對(duì)象的對(duì)象屬性對(duì)話框(2)通過鼠標(biāo)R期望的屬性或事件,然后從彈出式菜單中選擇C動(dòng)作來打開動(dòng)作編輯器(3)將顯示動(dòng)作編輯器,其中將顯示函數(shù)的基本框架。此外,C動(dòng)作的標(biāo)題已經(jīng)自動(dòng)生成,該標(biāo)題不能更改。
8、在C動(dòng)作的標(biāo)題的第一行內(nèi),包括文件apdefap.h.。通過該文件,向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)其他自動(dòng)生成的代碼部分包括兩個(gè)注釋塊,若要使交叉索引編輯器可以訪問C動(dòng)作的內(nèi)部信息,則需要這些塊,要允許C動(dòng)作中語句重新排列也需要這兩個(gè)塊。如果這些選項(xiàng)都不用。則可以刪除這些注解。第一個(gè)塊用于定義C動(dòng)作中使用的WinCC變量。在程序代碼中必須使用定義變量名稱而不是實(shí)際
9、的變量名稱第二個(gè)注釋塊用于定義C中所使用的WinCC畫面。在程序代碼中也必須使用定義的畫面名稱而不是實(shí)際畫面名稱。(5)編寫執(zhí)行期望計(jì)算的函數(shù)主題、動(dòng)作等。有多種編輯輔助工具可供使用,其中一種輔助工具是變量選擇對(duì)話框,此對(duì)話框如下所示的按鈕可以打開。在顯示的選擇變量對(duì)話框中,選擇WinCC變量然后單擊確定來確認(rèn)。于是在C動(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ù)。為此,通過鼠標(biāo)D來選擇其數(shù)據(jù)類型的列表。該函數(shù)可以在數(shù)值列中進(jìn)行參數(shù)化。除簡(jiǎn)單的文
10、本輸入以外,選擇變量.圖形對(duì)象和畫面選項(xiàng)都可以用。為了在C動(dòng)作中的當(dāng)前光標(biāo)位置插入函數(shù),可通過單擊確認(rèn)來確定對(duì)話框。(7)現(xiàn)在必須翻譯已完成的函數(shù)。在通過如下所示的工具按鈕來完成。翻譯過程的結(jié)果顯示在動(dòng)作編輯器的左下角。它包括找到錯(cuò)誤的個(gè)數(shù)和警告的個(gè)數(shù)。錯(cuò)誤總會(huì)使C動(dòng)作無法進(jìn)行。而警告是一種提示,指出在執(zhí)行C動(dòng)作期間可能出現(xiàn)的錯(cuò)誤。良好的編輯風(fēng)格可防止在創(chuàng)建C動(dòng)作時(shí)出現(xiàn)除0 Ereor(S),0 Warning(s)的輸出結(jié)果之外的情況。如果在編譯過程中出現(xiàn)錯(cuò)誤,則它們將在輸出窗口中顯示。通過鼠標(biāo)D輸出窗口中的錯(cuò)誤消息,可以直接跳轉(zhuǎn)到相應(yīng)的代碼行。(8)對(duì)于已經(jīng)為對(duì)象屬性創(chuàng)建的C動(dòng)作,必須定義
11、觸發(fā)器。對(duì)于事件本身就是觸發(fā)器所以不用在定義。觸發(fā)器的定義通過如下所示的按鈕來執(zhí)行??梢赃x擇使用時(shí)間變量觸發(fā)器。(9)通過單擊動(dòng)作編輯器的確定按鈕,可將已編寫的C動(dòng)作放置在期望的屬性或事件處。通過C動(dòng)作動(dòng)態(tài)化的屬性或事件將用綠箭頭標(biāo)記。 WinCC標(biāo)簽定義和畫面定義#include“apdefap.h”long-main(char*lpszPictureName.char* lpsz ObjectName. Char* lpszPropertyName)/WINCC.TAGNAME-SECTTON-START/syntax.#define TagNameInAction “DMTagName”
12、#define S32I-COURSE-0TEST-1 “S32i-course-test-1”/next TagID :1/WINCC TAGNAME-SECTION-END/WINCC:PICNAME-SECCTON-START/syntax: #define PicNameInAction “PictureName”#define CC-0-STARTPICTURE-00 “cc-0-startpicture-00.Pd1”/next PicID:1/WINCC:PICNAME-SECTTON-ENDSetTagSDWord(S32I-COURSE-TEST-1,100);OpenPic
13、ture(CC-0-STARTPICTURE-00);Return 0;如果創(chuàng)建新的C的動(dòng)作,則自動(dòng)生成的代碼將包括兩個(gè)注釋塊。若要使用交叉索引編輯器可以仿問C動(dòng)作的內(nèi)部信息,則需要這些注釋塊。要允許C動(dòng)作中語句重新排列也需要這兩個(gè)塊。變量定義:第一個(gè)注釋塊用于定義C動(dòng)作中使用的WinCC變量。該注釋塊以/MINCC:TAGAME-SECTION-START作為開始,以/MINCC:TAGNAME-SECTION-END作為結(jié)束。在兩行命令之間,定義C動(dòng)作中的所有WinCC的變量名稱。通過預(yù)處理程序命令#define后跟定義的名稱(在本實(shí)例代碼中為S32I-COURSE-TEST-1), 其后
14、在接WinCC變量的名稱(在本實(shí)例中為(S32i-course-tsse-1)來定義。畫面定義:第二個(gè)注釋塊用來定義C動(dòng)作中所使用的WinCC畫面。該注釋塊以行/MINCC:PICNAME-SECTION-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)
15、作。1項(xiàng)目函數(shù)如果在C動(dòng)作中經(jīng)常需要相同的功能,則該功能可以在項(xiàng)目函數(shù)中公式化。在WinCC 項(xiàng)目的所有C動(dòng)作都可以按照調(diào)用所有其他函數(shù)一樣的方式來調(diào)用項(xiàng)目函數(shù)。下面列出了使用項(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í)都可以再次使用,無須附加的組態(tài)或新的測(cè)試。畫面容量減少:如果并不是在對(duì)象的C動(dòng)作中直接放置完整的程序代碼,則畫面的容量將減少。這可以使畫面打開的
16、速度更快并且在運(yùn)行系統(tǒng)中的效果更佳??诹畋Wo(hù):項(xiàng)目函數(shù)可以通過指定口令進(jìn)行保護(hù),以防更改。這樣可以保護(hù)組態(tài)數(shù)據(jù)以及用戶的技術(shù)竅門。項(xiàng)目函數(shù)只能在項(xiàng)目?jī)?nèi)使用。它們存儲(chǔ)在WinCC Project FolderLIBRARY文件夾內(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ǔ)在WinCCInstallationFolderLIBRARY文件夾內(nèi),并在同一文件
17、夾中的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)行更改,也不能創(chuàng)建新的內(nèi)部函數(shù)。動(dòng)作:動(dòng)作(與先前描述的函數(shù)相反)不能由C動(dòng)作或其他函數(shù)調(diào)用。必須為動(dòng)作指定觸發(fā)器來控制其執(zhí)行。它在運(yùn)行系統(tǒng)中執(zhí)行時(shí)與當(dāng)前所選擇的畫面無關(guān)。可以組態(tài)全局動(dòng)作,既跨項(xiàng)目動(dòng)作。在這種情況下它們存儲(chǔ)字WinCCProjectFolderPAS文件夾中。也可以組態(tài)全局動(dòng)作(指定計(jì)算機(jī)的動(dòng)作),它們將存儲(chǔ)在WinCCProjiectFolderComputerNamePAS文件夾中。如果在計(jì)算機(jī)的啟動(dòng)列表中選中了全局腳本運(yùn)行系統(tǒng),則一旦項(xiàng)目啟動(dòng),屬
18、于該計(jì)算機(jī)的所有全局動(dòng)作和所有局部動(dòng)作將被激活。3建立項(xiàng)目函數(shù)創(chuàng)建項(xiàng)目函數(shù)所須的步驟與創(chuàng)建標(biāo)準(zhǔn)函數(shù)的步驟完全相同,因此下面的說明也適用于標(biāo)準(zhǔn)函數(shù)的創(chuàng)建建立項(xiàng)目函數(shù)步驟:(1)打開全局腳本編輯器 。(2)通過鼠標(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文件,這通過預(yù)處理程序命令#include“apdefap.h”來
19、完成,該命令必須插在函數(shù)標(biāo)題之前。#include “apdefap.h” int My-Project-Function(int iFirstParam,BOOL bSecondParem) return 0; (4)編寫函數(shù)主題??梢允褂门c編寫C動(dòng)作相同的輔助工具,特別是變量選擇和函數(shù)選擇。(5)已完成的函數(shù)現(xiàn)在必須進(jìn)行編譯。這通過如下所示的工具欄按鈕來完成。編譯過程的結(jié)果顯示在輸出窗口中,將列出產(chǎn)生的錯(cuò)誤和警告,并且顯示其數(shù)量。通過鼠標(biāo)D輸出窗口中的錯(cuò)誤消息,可以直接跳轉(zhuǎn)到相應(yīng)的代碼行。Compiling Line 3:error (0086):function My-Project-F
20、unction does not return a val Error(s),o Warning(s) (6)通過如下所示的工具欄按鈕,可以將描述添加大批項(xiàng)目函數(shù)中。可以與描述一起定義一個(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)通過鼠標(biāo)的右鍵項(xiàng)目函數(shù)條目,然后從彈出式菜單中選擇新建動(dòng)作,將創(chuàng)建動(dòng)作的基本框架。(3)動(dòng)作的標(biāo)題將會(huì)自動(dòng)生成并且不能更該。此外,插入用于定義WinCC變量和WinCC畫面
21、的兩個(gè)注釋塊。這兩個(gè)注釋塊的含義已經(jīng)在先前的C動(dòng)作一節(jié)中進(jìn)行說明。#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 PicID:1 /WINCC:PICNAME-SECTION-E
22、ND return o; (4)編寫動(dòng)作主體。可以使用與編寫C動(dòng)作相同的輔助工具。特別是變量選擇和函數(shù)選擇。動(dòng)作具有int類型的返回值。缺省的情況下,返回值為0。(5)通過如下所示的工具按鈕,可以如同函數(shù)描述一樣將描述添加到動(dòng)作中。也可以定義口令來保護(hù)項(xiàng)目函數(shù)免遭未*人員的訪問。與函數(shù)相比,它還需要設(shè)置一個(gè)觸發(fā)器來控制動(dòng)作的執(zhí)行。對(duì)于動(dòng)作觸發(fā)器的選擇,用戶所具有的選擇的范圍要比對(duì)象的C動(dòng)作觸發(fā)器的選擇范圍大。其中,可以編寫一次執(zhí)行過程(6)完成的動(dòng)作必須進(jìn)行保存。5測(cè)試輸出執(zhí)行程序來測(cè)試輸出。這樣便于在開發(fā)期間進(jìn)行故障檢測(cè)和錯(cuò)誤診斷。測(cè)試輸出可以通過printf()函數(shù)來啟動(dòng)。通過該函數(shù),不但
23、可輸出簡(jiǎn)單文本。而且可輸出當(dāng)前變量值。為了使輸出文本可見,必須組態(tài)全局腳本診斷窗口。Printf()函數(shù):Printf()函數(shù)允許執(zhí)行測(cè)試輸出功能。該函數(shù)的實(shí)例應(yīng)用如下所示:Printf(“I am %d years oldrn,iAge);Printf()函數(shù)至少一個(gè)參數(shù)。該參數(shù)是一個(gè)字符串。要傳遞的附加類型和數(shù)量取決于該字符串。字符%由prinft()函數(shù)用作在該位置插入變量值的標(biāo)識(shí)符。跟在字符%之后的字符確定給變量的數(shù)據(jù)類型。上表中所使用的字符組合%d表明輸出為十進(jìn)制數(shù),其他可能的組合及其描述如下:%d 輸出十進(jìn)制數(shù)(int或char),%ld 長(zhǎng)整型變量作為十進(jìn)制輸出,%c 輸出字符(
24、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ù)值, % 輸出%字符, |n 換行輸出(回車),、r 進(jìn)一行輸出, 、t 制表位輸出, 、 輸出、字符6全局腳本診斷窗口由printf()函數(shù)指定的文本輸出顯示在全局腳本診斷窗口中。
25、組態(tài)這種診斷窗口的步驟如下:(1).打開圖形編輯器 打開期望的WinCC 畫面。(2)組態(tài)智能對(duì)象 應(yīng)用窗口。將應(yīng)用窗口置于畫面內(nèi)之后,將打開窗口對(duì)話框。從列表中選擇全局腳本條目。通過單擊確定退出對(duì)話框。 打開模板對(duì)話框,從列表中選擇GSC診斷條目。同樣通過單擊確定退出對(duì)話框。(3)為了便于利用全局腳本診斷窗口,建議將對(duì)象屬性對(duì)話框其他條目下的所有屬性設(shè)置為是。(4)如果項(xiàng)目在運(yùn)行,則由printf()函數(shù)指定的文本輸出將顯示在診斷窗口中。如果用工具欄上相應(yīng)的按鈕中止更新,則可以保存或打印輸出窗口內(nèi)容。2.2變量 在WinCC項(xiàng)目Project-C-Course中,有關(guān)變量的主題實(shí)例可以通過單
26、擊如下所示的瀏覽欄來訪問。實(shí)例在kzz-00.PDL畫面中組態(tài)。變量:變量是由程序處理的數(shù)據(jù)對(duì)象。變量只有在定義以后才能使用。在第一條指令可以執(zhí)行前,必須先定義程序中的所有變量。變量可以比做一個(gè)容器。通過變量名,我們給容器一個(gè)唯一的名稱。容器中內(nèi)容的類型通過其數(shù)據(jù)類型來指定,容器的初始內(nèi)容通過初始值來指定。在大多數(shù)情況下,該內(nèi)容將在程序執(zhí)行過程中進(jìn)行處理。此處所描述的變量不應(yīng)誤認(rèn)為是WinCC變量。它們只能在程序代碼中使用。以下程序代碼說明了定義變量的一個(gè)實(shí)例。Int itag;.在該實(shí)例中,用名字Itag來定義一個(gè)int數(shù)據(jù)類型的變量。代碼行以分號(hào)結(jié)束。變量名的前面是描述數(shù)據(jù)類型的前綴。這并
27、非必須遵循,但它卻使得在程序創(chuàng)建期間能夠立即識(shí)別變量的數(shù)據(jù)類型。在定義變量時(shí),也可以將其初始化。Int itag = 0;常量:除變量之外,程序中也使用常量。它只是數(shù)值的直接使用。為了說明這種數(shù)值的含義,可以使用#define命令為它定義符號(hào)常量。以下程序代碼說明了定義符號(hào)常量的一個(gè)實(shí)例。#define MAX-VALUE 7483647在給實(shí)例中,用數(shù)值7483647來定義符號(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 單
28、精度型浮點(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代表無符號(hào)數(shù)。Int數(shù)據(jù)類型之前也可以加關(guān)鍵字long或short.這些關(guān)鍵字也可以不帶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ù)值范圍
29、:每種數(shù)據(jù)類型都可以顯示某一數(shù)值范圍的數(shù)值。區(qū)別在于不同的數(shù)據(jù)類型所須的存儲(chǔ)空間不同,以及是有符號(hào)還是無符號(hào)數(shù)據(jù)類型。Int 2147483648至2147483647Unsigned int 0至429967295Short -32768至32767Unsigtned short 0-65535Long 2147483648至2147483647Unsigned long 0至4294967295Char 128至127(所有的ASC|字符)Unsigned char 0至225(所有的ASC|字符)float 1038z 至038double 10308至0308整數(shù)數(shù)據(jù)類型 用C的缺省數(shù)
30、據(jù)類型來顯示整數(shù)。在事件鼠標(biāo)鼠標(biāo)動(dòng)作的對(duì)象按鈕1組態(tài)了本實(shí)例。1按鈕1的C動(dòng)作#include “apdefap.h” void OnClick(char# lpszPictureName char3 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;
31、/unsigned 8 bit value unsigned long ulNumber; /unsigned 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(“rnExaple 1:rn”); print
32、f(“char:tt%drnshort:tt%drn” “l(fā)ong:tt%drninth:tt%drn”, cNumber,sNumber,1Number,iNumber); ucNumber = 255; usNumder = 65535; u1Nuber = 4294967295; uiNuber = 4294967295; /output in diagnostics vindow printf(“unsigned char:t%urunsigned short:t%urn” “unsigned long:t%urnunsigned int:t%urn”, ucNumber,usNumb
33、er,ulNumber,uiNumber); 前三行為C動(dòng)作的標(biāo)題。該標(biāo)題不能更改。在第二部分中,定義變量。為char long short和int數(shù)據(jù)類型及其無符號(hào)的對(duì)應(yīng)量各定義一個(gè)變量。變量名稱前面加上描述數(shù)據(jù)類型的前綴。這并非必須遵循,但它卻使得在程序創(chuàng)建期間能夠立即識(shí)別變量的數(shù)據(jù)類型。作為注釋,每一行包括變量所需的存儲(chǔ)空間(以字符串/開始的注釋部分用綠色標(biāo)記)。在第三部分中,將數(shù)值賦給變量。這通過使用賦值運(yùn)算符= 來完成。本實(shí)例中所使用的數(shù)值恰好是各種數(shù)據(jù)類型所能顯示的數(shù)值范圍中的極限值。這些數(shù)值通過函數(shù)printf()在診斷窗口中輸出。此輸出在下部分顯示。2診斷窗口中的輸出本節(jié)中描述
34、的實(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ù)情況下,要通過C動(dòng)作或其他函數(shù)來使對(duì)象動(dòng)態(tài)化和解決類似的事情時(shí),必須使用WinCC變量。為此,有許多用于讀取和寫入WinCC變量值的函數(shù)可以使用。這些函數(shù)可以與每種WinCC 缺省變量類型一起使用。在本
35、實(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 value SHOURT sNumber; /signed 16 bit value LONG 1Number: /signed 32 bit value BOOL bNumbeer; /TRUE or FALSE
36、BYTE byNumber;/unsigned 8 bit value WORD wNumber; /unsigned 16 bit value DWORDdwNumber; /unsigned 32 bit value CNumber = -128; SNumber = -32768; 1Number = -2147483648; /set wincc tage Set agSByte(“SO8i-course-tag-1”,cNumber); SetTagSWord(“S16i-course-tag-1”,sNumber); SetTagSDWord(“S32i-course-tag-1”
37、,1Number); bNumber = TRUE; byNumber = 255; wNumber = 65535; dwNumber = 4294967295; /set wincc tage SetTageBit(“BINi-course-tage-1”(SHORT)bNumber); SetTageByte(“VO8i-course-tage-1”byNumber); SetTageWord(“V16i-course-tage-1”wNumber) SetTageDWord(“V32i-course-tage-1”bwNumber) 在第一部分中,定義變量。根據(jù)變量可用的數(shù)據(jù)類型選擇變
38、量的數(shù)據(jù)類型。在第二部分中 ,將數(shù)值賦給變量。本實(shí)例中所用的數(shù)值又恰好是各種數(shù)據(jù)類型所能顯示的數(shù)值范圍的極限值。利用相應(yīng)的函數(shù)將變量賦值給各種WinCC變量。函數(shù)名字包括文本SetTag和函數(shù)所應(yīng)用的WinCC變量的數(shù)據(jù)類型標(biāo)志。與用于寫入WinCC變量的SetTag函數(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)
39、換為SHORT類型。此過程又稱為Typecast(類型轉(zhuǎn)換)。類型轉(zhuǎn)換:變量的內(nèi)容在傳遞給函數(shù)或賦給其他變量之前,可以轉(zhuǎn)換為不同的數(shù)據(jù)類型。然而,變量本身的數(shù)據(jù)類型保持不變。以下程序代碼說明了如何將float數(shù)據(jù)類型的變量轉(zhuǎn)換為int數(shù)據(jù)類型。INumber = (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無符
40、號(hào)的8位數(shù)BYTE無符號(hào)的16位數(shù)WORD無符號(hào)的32位數(shù)DWORD2.2.3 浮點(diǎn)數(shù)數(shù)據(jù)類型 用C中可用的缺省數(shù)據(jù)類型來顯示浮點(diǎn)數(shù)。在時(shí)間 鼠標(biāo) 鼠標(biāo)動(dòng)作處為對(duì)象按鈕4組態(tài)了本實(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 d
41、iagnostics window printf(“rnExample:4:rn); printf(“float:t%2 17ftsizeof(float):t%drn” “double:t%2.17tsizeof(double):t%drn”, Fnumber,siaeof(float),dNumber,sizeof(double); 在第一部分中,定義變量。用float和double數(shù)據(jù)類型各定義一個(gè)變量。在第二部分中,將數(shù)值賦給變量。在本實(shí)例中,將相同的數(shù)值賦給兩個(gè)變量。Float型變量的精度大約為小數(shù)點(diǎn)后第七位。Double變量可以顯示的精度為浮點(diǎn)數(shù)的兩倍,這可以參考診斷窗口中輸出的實(shí)
42、質(zhì)(使用printf()函數(shù))。除變量之外,還輸出其所須的存儲(chǔ)空間。變量所須的存儲(chǔ)空間通過sizeof()命令來確定。所須的存儲(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 On
43、Click(char# lpszPictureName 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ù)類型各定義一個(gè)變量。在第二部分中,將
44、數(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ù)終止后,它又變成無效。如果再次調(diào)用該函數(shù),則將會(huì)再生成C變量。然而,如果在變量前加關(guān)鍵字static,則在兩次函數(shù)調(diào)用之間保留該變量。因此,它將保留其值。然而對(duì)于C動(dòng)作,只有選擇了WinCC畫面,靜態(tài)變量才會(huì)有效。如果撤消選定畫面,則靜態(tài)變量變成無效。再次打開
45、畫面后,在C動(dòng)作期間將會(huì)再次生成靜態(tài)變量。2外部函數(shù)C變量只能在定義它的函數(shù)內(nèi)訪問。然而,如果在任何函數(shù)以外定義變量。則該變量將成為全局(外部)變量。于是,在任何函數(shù)中都可以利用關(guān)鍵字extern來申明變量并且可以訪問它。項(xiàng)目函數(shù)CreateExternalTags()int ext-iNumber = 0 void CreateExternalTags() /nothing to do 函數(shù)CreateExternalTags()只用于定義和初始化一個(gè)int類型的外部變量。在項(xiàng)目啟動(dòng)時(shí),調(diào)用一次該函數(shù)(在起始畫面kzz-00.PDL的事件 其他 打開畫面處)。從此刻起,變量ext-iNumb
46、er被定義并且可以在任何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: /output in diagnostics window printf(“rnExample 6:rn” “mouseclicks since projec
47、t was started:%drn” “mouseclicks since project was opend:%drn” +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)作,該變量的值將會(huì)保留。如果撤消選定后在再選擇畫面,則將會(huì)再生成變量。變量的數(shù)值通過自增運(yùn)算符+增加1,并通過printf()函數(shù)在診斷窗口中輸出。因此,變量ext-iNumber將顯示從項(xiàng)目啟動(dòng)后單擊按鈕的次數(shù),
48、而變量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) +(雙目) 加 -(雙目) 減 * 乘 / 除 % 模(返回除法運(yùn)算的余數(shù)) + 自增 自減 按位運(yùn)算符:這些運(yùn)算符使得可以對(duì)變量中的各個(gè)位進(jìn)行設(shè)置、查詢或重新設(shè)定。運(yùn)算符 描述 & 按位與 | 按位或 按位異或 按位取反 將位相右移邏輯運(yùn)算符所有的邏輯運(yùn)算符都遵
49、循相同的原則:0表示假,所有其他數(shù)都表示真。這些運(yùn)算符不是生成0(假)就是生成1(真)運(yùn)算符 描述 大于 = 大于或等于 = = 等于 != 不等于 = 小于或等于 小于 & 邏輯與 | 邏輯或 ! 邏輯非 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 = 2
50、3.4; float fResAdd; float 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(“rnExample 1rn”) printf(“%1f + %1f = %1frn”,fValuel,fValue2,fResADD); printf(“%1f - %1f = %1frn”,fValuel,fValue2,fResSub
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 拓展訓(xùn)練心得體會(huì)范文
- 護(hù)士副高個(gè)人工作總結(jié)范文(7篇)
- 技術(shù)方案匯編7篇
- 2024年招商引資居間合同范本與法律法規(guī)解讀3篇
- 早教親子食育課程設(shè)計(jì)
- 2025年山東淄博市淄川區(qū)事業(yè)單位緊缺人才招聘50人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東德州德城區(qū)引進(jìn)專業(yè)自然資源人才4人管理單位筆試遴選500模擬題附帶答案詳解
- 護(hù)士的表揚(yáng)信
- 幼兒專家講座主持詞
- 演練方案4篇資料
- 法學(xué)概論(第七版) 課件全套 谷春德 第1-7章 我國(guó)社會(huì)主義法的基本理論 - 國(guó)際法
- MOOC 模擬電子技術(shù)基礎(chǔ)-華中科技大學(xué) 中國(guó)大學(xué)慕課答案
- 中考語文-排序題(30題含答案)-閱讀理解及答案
- (2024年)特種設(shè)備安全法律法規(guī)培訓(xùn)課件
- (高清版)TDT 1013-2013 土地整治項(xiàng)目驗(yàn)收規(guī)程
- 2024年車輛鉗工(技師)考試復(fù)習(xí)題庫(kù)(含答案)
- 《國(guó)際貿(mào)易單證實(shí)務(wù)》課件-項(xiàng)目四 繕制海運(yùn)提單
- 第9章 解不等式與不等式組100題(基礎(chǔ)篇)
- 高分子材料在能源存儲(chǔ)中的應(yīng)用
- 國(guó)內(nèi)外研究現(xiàn)狀及發(fā)展趨勢(shì)(含文獻(xiàn)綜述)
- 西晉的短暫統(tǒng)一和北方各族的內(nèi)遷 一等獎(jiǎng)
評(píng)論
0/150
提交評(píng)論