WINCCc語言基礎_第1頁
WINCCc語言基礎_第2頁
WINCCc語言基礎_第3頁
WINCCc語言基礎_第4頁
WINCCc語言基礎_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、WINCCCS言基礎要使對象動態化,在WinCC中有多種不同的選項可用。其中包括變量連接.動態對話框和直接連接。通過它們可以實現復雜的動態。然而,隨著要求的增加它們會有限制。對于用戶來說,組態C動作、項目函數或動作可以有更廣的范圍。它們在WinCC腳本語言C中創建。對于許多應用來說,不必具備非常全面的C語言知識。它足以為現有函數提供參數。然而,為了使用WinCC腳本語言C的全部功能,需要具備有關這種編輯語言的基本知識。本課程可以為用戶提供這些知識。本課程用來為不熟悉C語言的人員提供有關編輯語言C的常規應用的基本知識。具備C語言編輯經驗的編程員可以學習C語言應用于WinCC時的特性。2.1 C腳

2、本的開發環境對于C腳本的創建,WinCC提供兩個不同的編輯器。一個是圖形編輯器中的動作編輯器,用于在對象處創建C動作;另一個是全局腳本編輯器,用于創建項目函數和全局動作。腳本語言的語法與米用ANSI的標準C語言相一致。在WinCC中編輯語言C的另一個應用領域是關于動態向導的創建。為此,可以使用一個單獨的編輯器。2.1.1 圖形編輯器的動作編輯器在圖形編輯器中,可以通過C動作使對象屬性動作化。同樣,也可以使用C動作來響應對象事件。1 .動作編輯器對于C動作的組態,可以使用動作編輯器。此編輯器可以在對象屬性對話框中通過以下方法打開,即點擊鼠標右鍵期望的屬性或事件,然后從顯示的彈出式菜單中選擇C動作

3、。已經存在白CC動作在屬性或事件處用綠色箭頭標記。在動作編輯器中,可以編寫C動作。對于屬性的C動作,必須定義觸發器。對于事件的C動作,由于事件本身就是觸發器所以不必再定義。完成的C動作必須進行編譯,如果編譯程序沒有檢測到錯誤,則可以通過單擊確定退出動作編輯器2 .動作的結構通常,一個C動作相當與C中的一個函數。C動作由兩種不同類型:為屬性創建動作和為事件創建的動作。通常,屬性的C動作用于根據不同的環境條件控制此屬性的值(例如變量的值)。對于這種類型的C動作,必須定義觸發器來控制其執行。事件的C動作來響應此事件。3 .屬性的C動作#includeapdefap hlong-main(char*l

4、pszPictureName.char*lpszObjectName.char*lpszPropertyName)/*1*/long1ReturnValue;/*2*/1ReturnValue*GetTagSDword(*S32icourse-test-1*);/*3*/return1ReturnValue;上述實例代碼代表一個典型的屬性的C動作。各部分的含義描述如下:標題(灰色):灰色陰影顯示的前三行構成C的動作標題。該標題自動生成并且不能更改。除返回類型(在實例代碼中為long)之外,所有的函數標題完全相同。將三個參數傳送給C動作。它們是畫面名稱(LpszPictureName),對象名(

5、lpszObjectName)和屬性名(lpszPropertyName).變量聲明(1):在可以編輯的第一段代碼中聲明使用的變量。在本實例代碼中,指的是一個long型的變量。數值計算(2):在本段中,執行屬性值的計算。在實例代碼中,只讀入一個WinCC變量的數值。數值返回(3):將計算得出的屬性值賦給屬性。這通過return命令來完成4 .事件的C動作#includeapdefap.h*voidOnClicik(char*lpszPictureName.char*lpszObjectName.char*lpszPropertyName)/*1*/long1Value;/*2*/1Value*

6、GetTagSDWord(*s32i-course-tset-1”);SetIeft(lpszPictureName,lpszobjectName,1value);上述實例代碼代表一個典型的事件的C動作。各部分含義描述如下:標題(灰色):灰色陰影顯示的前三行構成C動作的標題。該標題自動生成并且不能更改。對于不同類型的事件,其參數標題也不同。將參數lpszPictureName(畫面名稱).lpszObjectName(對象名)和lpszPropertyName(屬性名)傳遞給C動作。參數lpszPropertyName只包含與響應屬性變化的事件相關的信息。可以傳遞附加的事件指定的參數。變量聲明

7、(1):在可以編輯的第一代碼段中聲明使用的變量。在本實例代碼中,指的是一個long型的變量。事件處理(2):在本段中,執行響應事件的動作。在本實例代碼中,讀入一個WinCC變量的數值。該數值作為位置X分配給自己的對象。事件的C動作的返回值為void類型,也就是說不需要返回值5. C動作的創建創建C動作的步驟如下:(1).打開圖形編輯器,打開期望的WinCC畫面,打開所期望對象的對象屬性對話框(2)通過鼠標R期望的屬性或事件,然后從彈出式菜單中選擇C動作來打開動作編輯器(3)將顯示動作編輯器,其中將顯示函數的基本框架。此外,C動作的標題已經自動生成,該標題不能更改。在C動作的標題的第一行內,包括

8、文件apdefap.h.。通過該文件,向C動作預告所有項目的函數.標準函數以及內部函數。C動作標題的第二部分為函數標題。該函數標題提供有關C動作的返回值和可以在C動作中使用的傳送參數的信息。C動作標題的第三部分開始是花括弧。此花括弧不能刪除。在該開始大括弧和結束大括弧之間,編寫C動作的實際代碼。(4)其他自動生成的代碼部分包括兩個注釋塊,若要使交叉索引編輯器可以訪問C動作的內部信息,則需要這些塊,要允許C動作中語句重新排列也需要這兩個塊。如果這些選項都不用。則可以刪除這些注解。第一個塊用于定義C動作中使用的WinCC變量。在程序代碼中必須使用定義變量名稱而不是實際的變量名稱第二個注釋塊用于定義

9、C中所使用的WinCC畫面。在程序代碼中也必須使用定義的畫面名稱而不是實際畫面名稱。(5)編寫執行期望計算的函數主題、動作等。有多種編輯輔助工具可供使用,其中一種輔助工具是變量選擇對話框,此對話框如下所示的按鈕可以打開。在顯示的選擇變量對話框中,選才iWinCC變量然后單擊確定來確認。于是在C動作中在當前光標位置處插入所選WinCC的變量名稱。(6)另一種輔助工具是動作編輯器左窗口中的函數選擇。利用函數選擇,可以在C動作中的當前光標位置處自動插入所有可用的項目函數、標準函數和內部函數。為此,通過鼠標D來選擇其數據類型的列表。該函數可以在數值列中進行參數化。除簡單的文本輸入以外,選擇變量.圖形對

10、象和畫面選項都可以用。為了在C動作中的當前光標位置插入函數,可通過單擊確認來確定對話框。(7)現在必須翻譯已完成的函數。在通過如下所示的工具按鈕來完成。翻譯過程的結果顯示在動作編輯器的左下角。它包括找到錯誤的個數和警告的個數。錯誤總會使C動作無法進行。而警告是一種提示,指出在執行C動作期間可能出現的錯誤。良好的編輯風格可防止在創建C動作時出現除0Ereor(S),0Warning(s)的輸出結果之外的情況。如果在編譯過程中出現錯誤,則它們將在輸出窗口中顯示。通過鼠標D輸出窗口中的錯誤消息,可以直接跳轉到相應的代碼行。(8)對于已經為對象屬性創建的C動作,必須定義觸發器。對于事件本身就是觸發器所

11、以不用在定義。觸發器的定義通過如下所示的按鈕來執行。可以選擇使用時間變量觸發器。(9)通過單擊動作編輯器的確定按鈕,可將已編寫的C動作放置在期望的屬性或事件處。通過C動作動態化的屬性或事件將用綠箭頭標記。WinCC簽定義和畫面定義#include“apdefap.h”long-main(char*lpszPictureName.char*lpszObjectName.Char*lpszPropertyName)/WINCC.TAGNAME-SECTTON-START/syntax.#defineTagNameInAction“DMTagNam”e#defineS32I-COURSE-0TEST

12、-1“S32i-course-test-1”/nextTagID:1/WINCCTAGNAME-SECTION-END/WINCC:PICNAME-SECCTON-START/syntax:#definePicNameInAction“PictureName”#defineCC-0-STARTPICTURE-00“cc-0-startpicture-00.Pd1”/nextPicID:1/WINCC:PICNAME-SECTTON-ENDSetTagSDWord(S32I-COURSE-TEST-1,100);OpenPicture(CC-0-STARTPICTURE-00);Return0;

13、如果創建新的C的動作,則自動生成的代碼將包括兩個注釋塊。若要使用交叉索引編輯器可以仿問C動作的內部信息,則需要這些注釋塊。要允許C動作中語句重新排列也需要這兩個塊。變量定義:第一個注釋塊用于定義C動作中使用的WinCC變量。該注釋塊以/MINCC:TAGAME-SECTION-START為開始,以/MINCC:TAGNAME-SECTION-END結束。在兩行命令之間,定義C動作中的所有WinCC的變量名稱。通過預處理程序命令#define后跟定義的名稱(在本實例代碼中為S32I-COURSE-TEST-。,其后在接WinCC變量的名稱(在本實例中為(S32i-course-tsse-1)來定

14、義。畫面定義:第二個注釋塊用來定義C動作中所使用的WinCC畫面。該注釋塊以行/MINCC:PICNAME-SECTION-START為開始,以行/MINCC:PICNAME-SECTION-EN昨為結束。在兩行之間,定義C動作中使用的所有WinCC畫面名稱。它遵循的規律與上面所描述的定義變量名稱時所遵循的規則相同。應用:在實際程序代碼中,必須使用定義的值,而不是實際的變量和畫面名稱。在編譯C動作之前,預處理程序將用實際名稱替換所有定義的名稱.1.2全局腳本編輯器全局腳本編輯器用于創建項目函數、標準函數和動作。1項目函數如果在C動作中經常需要相同的功能,則該功能可以在項目函數中公式化。在Win

15、CC項目的所有C動作都可以按照調用所有其他函數一樣的方式來調用項目函數。下面列出了使用項目函數對于在C動作中創建完整的程序代碼的優點:編輯器的中心位置:項目函數的改變會影響所有正在使用該函數的C動作。如果沒有使用項目函數,則必須手動修改所有相關的C動作。這不但可以簡化組態,而且可以簡化維護和故障檢測工作。可重用性:一旦一個項目函數編寫完并進行了廣泛的測試,則它隨時都可以再次使用,無須附加的組態或新的測試。畫面容量減少:如果并不是在對象的C動作中直接放置完整的程序代碼,則畫面的容量將減少。這可以使畫面打開的速度更快并且在運行系統中的效果更佳。口令保護:項目函數可以通過指定口令進行保護,以防更改。

16、這樣可以保護組態數據以及用戶的技術竅門。項目函數只能在項目內使用。它們存儲在WinCCProjectFolderLIBRARY文件夾內并在相同的文件夾中的ap-pbib.h文件內定義。許多函數只能在項目內使用。與項目函數相反,標準函數可以用于所有的WinCC項目。可以更改現有的標準函數。也可以創建新的標準函數。標準函數與項目函數的區別僅在于它們的可用性:標準函數可以跨項目使用,然而項目函數只能在項目內使用。標準函數存儲在WinCCInstallationFolderLIBRARY文件夾內,并在同一文件夾中的ap-glob.h文件內定義。2內部函數除項目函數和標準函數之外,還有內部函數。其中,它

17、們是標準的C函數。用戶不能對其進行更改,也不能創建新的內部函數。動作:動作(與先前描述的函數相反)不能由C動作或其他函數調用。必須為動作指定觸發器來控制其執行。它在運行系統中執行時與當前所選擇的畫面無關。可以組態全局動作,既跨項目動作。在這種情況下它們存儲字WinCCProjectFolderPAS文件夾中。也可以組態全局動作(指定計算機的動作),它們將存儲在WinCCProjiectFolderComputerNamePAS文件夾中。如果在計算機的啟動列表中選中了全局腳本運行系統,則一旦項目啟動,屬于該計算機的所有全局動作和所有局部動作將被激活。3建立項目函數創建項目函數所須的步驟與創建標準

18、函數的步驟完全相同,因此下面的說明也適用于標準函數的創建建立項目函數步驟:(1)打開全局腳本編輯器。(2)通過鼠標的右鍵項目函數條目,然后從彈出式菜單中選擇新建-函數,將創建新項目函數的基本框架。(3)項目函數可以完全由用戶進行配置,沒有不能編譯的代碼段。編寫函數標題,函數必須有一個名稱,以便C動作或其他函數調用時所有。此外,必須指定返回值和函數所須的傳遞參數。如果當前的函數中要使用其他項目函數或標準函數,則必須結合apdefap.h文件,這通過預處理程序命令#include“apdefap.h”來完成,該命令必須插在函數標題之前。#include“apdefap.h”intMy-Projec

19、t-Function(intiFirstParam,BOOLbSecondParem)return0;(4)編寫函數主題。可以使用與編寫C動作相同的輔助工具,特別是變量選擇和函數選擇。(5)已完成的函數現在必須進行編譯。這通過如下所示的工具欄按鈕來完成。編譯過程的結果顯示在輸出窗口中,將列出產生的錯誤和警告,并且顯示其數量。通過鼠標D輸出窗口中的錯誤消息,可以直接跳轉到相應的代碼行。CompilingLine3:error(0086):functionMy-Project-FunctiondoesnotreturnavalError(s),oWarning(s)(6)通過如下所示的工具欄按鈕,

20、可以將描述添加大批項目函數中。可以與描述一起定義一個口令,以保護項目函數免遭未*人員訪問。(7)完成的項目函數必須用合適的名稱進行保存。4建立全局動作創建全局動作所須的步驟與創建局部動作所須的步驟完全相同。因此,下面的步驟也適用于創建局部動作。建立全局動作步驟:(1)打開全局腳本編輯器(2)通過鼠標的右鍵項目函數條目,然后從彈出式菜單中選擇新建動作,將創建動作的基本框架。(3)動作的標題將會自動生成并且不能更該。此外,插入用于定義WinCC變量和WinCC畫面的兩個注釋塊。這兩個注釋塊的含義已經在先前的C動作一節中進行說明。#include“apdefap.h”intgscAction(voi

21、d)/WINCC:TAGNAME-SETION-START/syntax.#defineTagNameInAction“DMTagNam”e/nextTagID:1/WINCC:TAGNAME-SECTION-END/WINCC:PICNAME-SECTION-START/oyntax:#definePicNameInAction”PictureName”/nextPicID:1/WINCC:PICNAME-SECTION-ENDreturno;(4)編寫動作主體。可以使用與編寫C動作相同的輔助工具。特別是變量選擇和函數選擇。動作具有int類型的返回值。缺省的情況下,返回值為0。(5)通過如下

22、所示的工具按鈕,可以如同函數描述一樣將描述添加到動作中。也可以定義口令來保護項目函數免遭未*人員的訪問。與函數相比,它還需要設置一個觸發器來控制動作的執行。對于動作觸發器的選擇,用戶所具有的選擇的范圍要比對象的C動作觸發器的選擇范圍大。其中,可以編寫一次執行過程(6)完成的動作必須進行保存。5測試輸出執行程序來測試輸出。這樣便于在開發期間進行故障檢測和錯誤診斷。測試輸出可以通過printf()函數來啟動。通過該函數,不但可輸出簡單文本。而且可輸出當前變量值。為了使輸出文本可見,必須組態全局腳本診斷窗口。Printf()函數:Printf()函數允許執行測試輸出功能。該函數的實例應用如下所示:P

23、rintf(“Iam%dyearsoldrn,iAge);Printf()函數至少一個參數。該參數是一個字符串。要傳遞的附加類型和數量取決于該字符串。字符%由prinft()函數用作在該位置插入變量值的標識符。跟在字符%之后的字符確定給變量的數據類型。上表中所使用的字符組合%d表明輸出為十進制數,其他可能的組合及其描述如下:%d輸出十進制數(int或char),%ld長整型變量作為十進制輸出,%c輸出字符(char),%x以16進制格式輸出數值。(用小寫字母a,b,cf),%X以16進制格式輸出數值。(用大寫字母AF),%o以八進制格式輸出數值,%u輸出十進制數(專用于unsigned類型),

24、%f以浮點數計數制輸出浮點型數值例如3.43234,%e以指數計數制輸出浮點型數值,例如23e+432,%E同3但使用大寫E,例如23E+432,%s輸出字符串(char*),%le輸出雙精度型數值,%輸出%字符,|n換行輸出(回車),、r進一行輸出,、t制表位輸出,、輸出、字符6全局腳本診斷窗口由printf()函數指定的文本輸出顯示在全局腳本診斷窗口中。組態這種診斷窗口的步驟如下:( 1).打開圖形編輯器打開期望的WinCC畫面。( 2)組態智能對象應用窗口。將應用窗口置于畫面內之后,將打開窗口對話框。從列表中選擇全局腳本條目。通過單擊確定退出對話框。打開模板對話框,從列表中選擇GSC斷條

25、目。同樣通過單擊確定退出對話框。( 3)為了便于利用全局腳本診斷窗口,建議將對象屬性對話框其他條目下的所有屬性設置為是。( 4)如果項目在運行,則由printf()函數指定的文本輸出將顯示在診斷窗口中。如果用工具欄上相應的按鈕中止更新,則可以保存或打印輸出窗口內容。2.2變量在WinCC項目Project-C-Course中,有關變量的主題實例可以通過單擊如下所示的瀏覽欄來訪問。實例在kzz-00.PDL畫面中組態。變量:變量是由程序處理的數據對象。變量只有在定義以后才能使用。在第一條指令可以執行前,必須先定義程序中的所有變量。變量可以比做一個容器。通過變量名,我們給容器一個唯一的名稱。容器中

26、內容的類型通過其數據類型來指定,容器的初始內容通過初始值來指定。在大多數情況下,該內容將在程序執行過程中進行處理。此處所描述的變量不應誤認為是WinCC變量。它們只能在程序代碼中使用。以下程序代碼說明了定義變量的一個實例。Intitag;.在該實例中,用名字Itag來定義一個int數據類型的變量。代碼行以分號結束。變量名的前面是描述數據類型的前綴。這并非必須遵循,但它卻使得在程序創建期間能夠立即識別變量的數據類型。在定義變量時,也可以將其初始化。Intitag=0常量:除變量之外,程序中也使用常量。它只是數值的直接使用。為了說明這種數值的含義,可以使用#define命令為它定義符號常量。以下程

27、序代碼說明了定義符號常量的一個實例。#defineMAX-VALUE7483647在給實例中,用數值7483647來定義符號常量MAX-VALUE注意代碼行不得用分號結束。用大寫字母表示符號常量是一般的編程規律,以便易于與變量區分。數據類型:C所識別的基本數據類型如下:Char一個字節,可以接受一個字符,Int整型數值,Float單精度型浮點數,Double雙精度型浮點數,Char數據類型的變量需要一個字節的存儲空間。其內容可以解釋為一個字符或一個數字。Int數據類型之前可以加關鍵字signed或unsigned。關鍵字signed代表有符號數,關鍵字unsigned代表無符號數。Int數據類

28、型之前也可以加關鍵字long或short.這些關鍵字也可以不帶int而單獨使用,其含義仍然相同。Short(或shortint)數據類型的變量需要2個字節的存儲空間,long(或longint)數據類型的變量與int數據的變量一樣需要4個字節的存儲空間,然而double數據類型的變量需要8個字節的存儲空間。各數據類型的數值范圍:每種數據類型都可以顯示某一數值范圍的數值。區別在于不同的數據類型所須的存儲空間不同,以及是有符號還是無符號數據類型。Int-2147483648至2147483647Unsignedint0至429967295Short-32768至32767Unsigtnedshor

29、t0-65535Long-2147483648至2147483647Unsignedlong0至4294967295Char-128至127(所有的ASC|字符)Unsignedchar0至225(所有的ASC|字符)float-10A38z至0A38double-10A308至0A3081按鈕1的C動作#include“apdefap.h”voidOnClick(char#lpszPictureNamechar3lpszObjectName,char#lpszPropercharcNumber;long1Nameber;shortsNamber;intiNumber;/signad0bitv

30、alue/signad32bitvalue/signad16bitvalue/signad32bitvalueunsignedcharucNumber;/unsigned8bitvalueunsignedlongulNumber;/unsigned32bitvalueunsignedshortusNamber:/unsigned16bitvalueunsignedintuiNumber;cNumber=-128;sNumder=-32768;lNumber=-2147483648;iNumber=2147483467;/outputindignsticssindowprinft(“printf

31、(“char:“long:/unsigned32bitvaluen”);n”n”,cNumber,sNumber,1Number,iNumber);ucNumber=255;usNumder=65535;u1Nuber=4294967295;uiNuber=4294967295;/outputindiagnosticsvindown”n”printf(“unsignedchar:unsignedlong:ucNumber,usNumber,ulNumber,uiNumber);前三行為C動作的標題。該標題不能更改。在第二部分中, 和 int 數據類型及其無符號的對應量各定義一個變量。定義變量。

32、為char long short變量名稱前面加上描述數據類型的前綴。 這并非必須遵循, 但它卻使得在程序創建期間能夠立即識別變量的數據類型。 作為注釋,每一行包括變量所需的存儲空間 (以字符串 / 開始的注釋部分用綠色標記) 。 在第三部分中,將數值賦給變量。 這通過使用賦值運算符= 來完成。 本實例中所使用的數值恰好是各種數據類型所能顯示的數值范圍中的極限值。這些數值通過函數輸出在下部分顯示。printf() 在診斷窗口中輸出。此2診斷窗口中的輸出本節中描述的實例在診斷窗口中內生成下列輸出:Example1:Char:-128Short:-32768Long:-21474833648Int:

33、2147483647Unsigned char:255Unsigned short:65535Unsigned long:4294967295Unsigned int:42949672952.2.2整數WinCC變量在大多數情況下,要通過C動作或其他函數來使對象動態化和解決類似的事情時,必須使用WinCC變量。為此,有許多用于讀取和寫入WinCC變量值的函數可以使用。這些函數可以與每種WinCC缺省變量類型一起使用。在本實例中,將數值寫入各種WinCC變量。WinCC變量的內容顯示在輸出域內。在事件-鼠標-鼠標動作處為對象按鈕3組態了本實例按鈕3的C動作:#include“apdefap.h”

34、voidOnClick(char#lpszPictureNamechar3lpszObjectName,char#lpszProper”CHARcNumber;/signed8bitvalueSHOURTsNumber;/signed16bitvalueLONG1Number:/signed32bitvalueBOOLbNumbeer;/TRUEorFALSEBYTEbyNumber;/unsigned8bitvalueWORDwNumber;/unsigned16bitvalueDWORDdwNumber;/unsigned32bitvalueCNumber=-128;SNumber=-32

35、768;1Number=-2147483648;/setwincctageSetagSByte(“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;/setwincctageSetTageBit("BINi-course-tage-1”(SHORT)bNumber);SetTageByte(&qu

36、ot;VO8i-course-tage-1"byNumber);SetTageWord("V16i-course-tage-1"wNumber)SetTageDWord("V32i-course-tage-1"bwNumber)在第一部分中,定義變量。根據變量可用的數據類型選擇變量的數據類型。在第二部分中,將數值賦給變量。本實例中所用的數值又恰好是各種數據類型所能顯示的數值范圍的極限值。利用相應的函數將變量賦值給各種WinCC變量。函數名字包括文本SetTag和函數所應用的WinCC量的數據類型標志。與用于寫入WinC吸量的SetTag函數相對

37、應,也用于讀取WinCC變量的GetTag函數。如果將BOO嗷據類型(int的別名)的變量傳遞給SetTagBit()函數,則編譯程序將發出警告。發生這種情況是因為SetTagBit()函數希望用SHOR祚為所傳遞變量的數據類型。因此,本實例代碼中將變量bNumber的內容傳遞給SetTagBit()函數之前,先將其轉換為SHORT!型。此過程又稱為Typecast(類型轉換)。類型轉換:變量的內容在傳遞給函數或賦給其他變量之前,可以轉換為不同的數據類型。然而,變量本身的數據類型保持不變。以下程序代碼說明了如何將float數據類型的變量轉換為int數據類型。INumber=(int)fNumb

38、er;WinCC變量的數據類型:下表包括與C中可用數據類型相應的WinCC變量的各種數據類型。它們就是傳遞給SetTag函數并由GetTag函數返回的數據類型。WinCC變量的數據類型C的數據類型有符號的8位數char有符號的16位數Shortint有符號的32位數Longint二進制變量Shortint無符號的8位數BYTE無符號的16位數WORD無符號的32位數DWORD用C中可用的缺省數據類型來顯示浮點數。在時間f鼠標f鼠標動作處為對象按鈕4組態了本實例。按鈕4的動作:#include“apdefap.h”voidOnClick(char*lpszPictureName,char*cha

39、r3lpszObjectName,char*lpszProper”fioatfNumber;/32bitdoubledNumber/64bitfNumber=1.0000001;dNumber=1.0000001;/outputindiagnosticswindowprintf(“rnExample:4:rn);printf(“float:n”“double:n”,Fnumber,siaeof(float),dNumber,sizeof(double);在第一部分中,定義變量。用float和double數據類型各定義一個變量。在第二部分中,將數值賦給變量。在本實例中,將相同的數值賦給兩個變量。

40、Float型變量的精度大約為小數點后第七位。Double變量可以顯示的精度為浮點數的兩倍,這可以參考診斷窗口中輸出的實質(使用printf()函數)。除變量之外,還輸出其所須的存儲空間。變量所須的存儲空間通過sizeof()命令來確定。所須的存儲空間以字節為單位表示。4.2.4浮點數WinC儀量除整數以外,WinCC變量也可以包含浮點數。因此,與C的數據類型float和double相對應,WinCC變量有兩種數據類型可用。為了以讀或寫的方式訪問這些WinCC變量,提供了相應的SetTag和GetTag函數。在本實例中,將數值寫入各種WinCC變量。WinCC變量的內容顯示在輸出域內。在事件-鼠

41、標-鼠標動作處為對象按鈕5組態了本實例。按鈕5的C動作:#include“apdefap.h”voidOnClick(char#lpszPictureNamechar3lpszObjectName,char#lpszProperfioatfNumber;/32bitdoubledNumber/64bitfNumber=1.0000001;dNumber=1.0000001;/setwincctagsSetTagFloat(“F32i-course-tag-1”fNumber);SetTagDouble(“F64i-course-tag-1”dNumber);在第一部分中,定義變量。為float

42、和double數據類型各定義一個變量。在第二部分中,將數值賦給變量。在本實例中,將相同的數值賦給兩個變量。利用相應的函數將變量賦值給各種WinCC變量。與此處所用的用于寫入WinCC變量的SetTag函數相對應,用于讀取WinCC變量的GetTag函數也可用。2.2.5靜態變量和外部變量在事件->鼠標->鼠標動作處為對象按鈕6組態了本實例。1靜態變量C變量在定義后才能在函數中生效。在函數終止后,它又變成無效。如果再次調用該函數,則將會再生成C變量。然而,如果在變量前加關鍵字static,則在兩次函數調用之間保留該變量。因此,它將保留其值。然而對于C動作,只有選擇了WinCC畫面,靜

43、態變量才會有效。如果撤消選定畫面,則靜態變量變成無效。再次打開畫面后,在C動作期間將會再次生成靜態變量。2外部函數C變量只能在定義它的函數內訪問。然而,如果在任何函數以外定義變量。則該變量將成為全局(外部)變量。于是,在任何函數中都可以利用關鍵字extern來申明變量并且可以訪問它。項目函數CreateExternalTags()intext-iNumber=0voidCreateExternalTags()/nothingtodo函數CreateExternalTags()只用于定義和初始化一個int類型的外部變量。在項目啟動時,調用一次該函數(在起始畫面kzz-00.PDL的事件f其他f打

44、開畫面處)。從此刻起,變量ext-iNumber被定義并且可以在任何C動作和其它函數中使用。按鈕6的C動作:#include“apdefap.h”voidOnClick(char#lpszPictureNamechar3lpszObjectName,char#lpszProper/declareexternaltagexterintext-iNumber;/definestatictagstaticintstatt-iNumber=0:/outputindiagnosticswindowprintf(“n”“mouseclickssinceprojectwasstarted:%dn”“mous

45、eclickssinceprn”+ext-iNumber,+stat-iNumber);在第一部分中聲明外部變量ext-iNumber,以便能在C動作中使用它。在第二部分中,定義并初始化靜態變量stat-iNumber。它們將在選擇WINCCg面后首次執行C動作時執行。對于以后再此執行C動作,該變量的值將會保留。如果撤消選定后在再選擇畫面,則將會再生成變量。變量的數值通過自增運算符+增加1,并通過printf()函數在診斷窗口中輸出。因此,變量ext-iNumber將顯示從項目啟動后單擊按鈕的次數,而變量stat-iNumber將顯示從畫面打開后單擊的次數。2.3C中的運算符和數學函數運算符:

46、在程序中,運算符控制變量和常量進行的運算。變量和常量與運算符連接,這樣會導致產生新的變量值。運算符可以分成多種類別。包括數學運算符。按位運算符和賦值運算符。數學運算符:運算符描述+(單目)正號(實際不口使用)-(單目)負號+(雙目)加-(雙目)減*乘/除%模(返回除法運算的余數)1+自增自減按位運算符:這些運算符使得可以對變量中的各個位進行設置、查詢或重新設定。運算符描述&按位與按他按位異或按位取反<<將位向左移>>將位相右移邏輯運算符所有的邏輯運算符都遵循相同的原則:0表示假,所有其他數都表示真。這些運算符不是生成0(假)就是生成1(真)運算符描述>&g

47、t;=大于或等于=不Q<=小于或等于<小于&&邏輯與|邏輯或邏輯非2.3.1基本的數學運算在本實例中使用了基本的數學運算符。在事件一鼠標一鼠標動作處為對象按鈕1組態了本實例。按鈕1的動作#include“apdefap.h"voidOnClick(char#IpszPictureNamechar3lpszObjectName,char#lpszProperfloatfValuel=123.6;floatfValuel=23.4;floatfResAdd;floatfResSub;floatfResMul;floatfResDiv;fResAdd=fValuel+fValue2;/addfResAdd=fValuel-fValue2;/subtractfResAdd=fValuel*fValue2;/multiplyfResAdd=fValuel/fValue2;/divide/outputindiagnosticswindowprintf( “print f( “%1f + %1f = %1fprintf( “%1fprintf( “%1f * %1f = %1fprintf( “%1f /%1f = %1fn” )n” ,fValuel,fValue2,fResADD)n”

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論