wincc函數(shù)實例_第1頁
wincc函數(shù)實例_第2頁
wincc函數(shù)實例_第3頁
wincc函數(shù)實例_第4頁
wincc函數(shù)實例_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、如何在 WinCC 運行時通過按下一個按鈕來啟動一個程序,打印一個文本文件或者打開一個PDF文件?隱藏訂貨號顯示訂貨號訂貨號:說明:WinCC 在動態(tài)向?qū)Ю锾峁┝朔奖愕摹皢悠渌麘?yīng)用程序”功能來啟動一個外部程序。這個向?qū)梢粋€C 腳本。為了給這個程序添加參數(shù),可以打開該腳本并添加相關(guān)參數(shù)。下面提供了一些例子,這里只顯示了腳本中最重要的那一行語句。  序號.例程1調(diào)用標(biāo)準(zhǔn)程序: · ProgramExecute("C:WINDOWSwinhlp32.exe");2打開 PDF 文件: · ProgramExecute("C:progr

2、am filesAdobeReader 8.0ReaderAcroRD32.exe C:Tempdocument.pdf");3打印文本文件: · ProgramExecute("C:WINDOWSsystem32print.exe C:Tempdocument.txt /C");也可以在 WinCC 在線幫助中找到相關(guān)描述,在目錄 "WinCC 信息系統(tǒng) > 使用 WinCC > 用于創(chuàng)建函數(shù)和動作的 ANSI-C > ANSI-C 函數(shù)描述> 標(biāo)準(zhǔn)函數(shù) > Windows" ,如果您使用的是VBS,

3、則在目錄 "使用 WinCC > 用于創(chuàng)建程序和動作的 VBS > VBScript實例 > 常規(guī)例程"。 注意: · 在編寫 C 動作時,當(dāng)指定路徑時必須輸入雙斜線 ( "" ),否則會被解釋為一個控制字符。 · 當(dāng)調(diào)用某些文件類型(如 Microsoft Excel文件)時,需要輸入不止一個函數(shù)參數(shù)。因此,如果路徑規(guī)范里包含一個路徑,需要在函數(shù)參數(shù)里面將該路徑放在反斜線和雙引號標(biāo)志之間, (如,ProgramExecute("C:ProgrammeMicrosoft OfficeOFFICE1

4、1EXCEL.EXE "C:tempNew FolderMappe1.xls""))。 · 注意當(dāng)操作員打開系統(tǒng)窗口的時候,可能會有操作系統(tǒng)級別的系統(tǒng)操作。執(zhí)行完程序之后關(guān)閉這些窗口。 · 您可以用Win32 API函數(shù)終止一個程序,更多信息和例程可參考條目號 2976503。使用C函數(shù)“Sleep”隱藏訂貨號顯示訂貨號訂貨號:問題:如何在WinCC中編程“Sleep”等待功能? 解答:為此,可以使用Windows API功能“Sleep()”。下面的樣例程序演示了如何使用“Sleep”功能。 #pragma code("Kernel

5、32.dll")void Sleep(int Milliseconds);#pragma code() Sleep(1000); /time in milliseconds 警告:“Sleep”函數(shù)對動作處理性能有很大的負(fù)面影響。因此,如果想用此函數(shù)的話,請注意以下幾點: · 使用Sleep()時,C 腳本的處理在特定的一段時間內(nèi)被中斷。在此期間內(nèi),任何對于被中斷功能的請求將不被處理。 · 而且,使用相同觸發(fā)器的所有動作將不再被處理。使用相同的觸發(fā)器意味著用同一個循環(huán)觸發(fā)器所有動作或變量觸發(fā)器的所有動作將不再被處理。如果同步地調(diào)用動 作,這種調(diào)用通過一個變量觸發(fā)器

6、或事件被周期性地或非周期性地啟動,而且所有這些功能使用了Sleep()函數(shù),那么所有的動作會被終止。最壞情況下是; 由于啟動這四個動作將終止對所有動作的處理。 · 如果說,在一個帶10-秒延遲觸發(fā)器的動作中使用了Sleep()函數(shù)。那么所有被循環(huán)調(diào)用的動作將被中斷。結(jié)果是,如:用1-秒觸發(fā)器的動作操作中斷, 除此以外,所有后繼的動作也不被執(zhí)行。這就是說,不僅當(dāng)前的動作不被處理,其它還沒有啟動的動作也不會被處理。 · 作業(yè)不被處理是因為中斷仍儲存在隊列中。一旦中斷結(jié)束,所有在隊列中的動作將開始被處理。但是,中斷結(jié)束后,在隊列中的動作不會在他們原來指定的循環(huán)中被 處理。因此,如

7、同前面所述的那樣,那么隊列中剩下的動作將被一個接一個的處理而不再由觸發(fā)器啟動。并且這些動作只是盡可能快的被處理掉。 (理論上同步)。 如何打開一個應(yīng)用程序并保持其始終在前臺顯示?隱藏訂貨號顯示訂貨號訂貨號:描述:以 Adobe Reader 8.0 作為示例,我們將演示如何打開一個程序窗口并始終在前臺顯示。  No.程序1在按鈕事件的“鼠標(biāo)動作”中創(chuàng)建以下 C 語言函數(shù),例如: #include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszP

8、ropertyName)  HWND Handle = NULL;  Handle = FindWindow("AcrobatSDIWindow",NULL);  if (Handle)      ShowWindow(Handle, SW_SHOWNORMAL);  else     ProgramExecute("C:/Program Files/Adobe/Reader 8.0/Reader/AcroRD32.exe"); 

9、60;  Handle = FindWindow(NULL, "Adobe Reader");    SetWindowPos (Handle, HWND_TOPMOST, 400, 200, 520, 420, 0); 注意:為了參數(shù)傳遞,Windows 函數(shù) “ HWND FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName);” 需要窗口的類名或者窗口自己的名字。可以很容易的通過打開相關(guān)程序獲得窗口的名字(沒有文檔)。窗口名字會顯示在標(biāo)題欄。然而使用窗口名字時,當(dāng)打開文檔 時窗口名

10、字也許會發(fā)生改變。這也是為什么最好使用“ lpClassName ”參數(shù)的原因。2在按鈕事件的“鼠標(biāo)動作”中以下的 C 語言函數(shù), 從窗口名稱中確定了窗口的類名:為了顯示“ printf() ”函數(shù)的輸出,可以在 WinCC 畫面中加載“ GSC - Diagnostics ” 應(yīng)用程序窗口或者啟動“ apdiag.exe ”程序。 #include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)  char winclass2

11、56;  HWND Handle = NULL;  Handle = FindWindow(NULL, "Adobe Reader");  if (!Handle)     ProgramExecute("C:/Program Files/Adobe/Reader 8.0/Reader/AcroRD32.exe");    Handle = FindWindow(NULL, "Adobe Reader");    GetCla

12、ssName(Handle, winclass, sizeof (winclass)-1);  printf ("Window Class Name: %s rn", winclass);在WinCC中如何加載用戶自定義DLLs?隱藏訂貨號顯示訂貨號訂貨號:描述:在WinCC中,您希望使用用戶自定義動態(tài)鏈接庫,在此條目,我們演示了如何在WinCC中加載一個實例DLL。在帶有VBS的WinCC運行 模式下,使用VB創(chuàng)建的DLLs不能被加載。 關(guān)于DLLs更多的信息可以在WinCC在線幫助系統(tǒng)下“使用WinCC>用于創(chuàng)建函數(shù)和動作的ANSI-C>在函數(shù)和動

13、作中使用DLL”  編號.過程1實例DLL:使用下面的程序代碼,利用C編譯器創(chuàng)建動態(tài)鏈接庫"T1_C.dll"。 在這里,您可以下載已經(jīng)可以編譯的DLL。T1_C.zip ( 17 KB )   extern "C" _declspec (dllexport) int aufruf1 (int a); #include <stdio.h>#include <windows.h>FILE *h_test;FILE *h_trace;extern "C" _declspec (dllexport

14、) int aufruf1(int a)    h_test= fopen ("C:/temp/test_dll.txt","a");  if (h_test)      fprintf(h_test, "Function 'aufruf1' was called!n");    fclose (h_test );    a+=100;  return a;N.B. · 必須在無出

15、錯 信息后,創(chuàng)建動態(tài)鏈接庫。 · 所 有在WinCC中使用的DLL功能都必須使用相應(yīng)的語法在DLL的開始部分進行指定(在實例動態(tài)鏈接庫"T1_C.dll"的第一行)。 · 為 了能夠使用DLL功能,在WinCC中的動作或者函數(shù)中調(diào)用DLL,必須使用"#pragma code"語法。2在WinCC中的C腳本加載"T1_C.dll"動態(tài)鏈接庫并且執(zhí)行"aufruf1"功能:使用下列的WinCC變量: · var1 (signed 32-bit value) · result (s

16、igned 32-bit value)在一個按鈕的事件的“鼠標(biāo)單擊”C動作中輸入下面的C腳本:   #include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)  #pragma code ("c:/temp/T1_C.dll")  int aufruf1(int a);  #pragma code ()  int value;  value = GetT

17、agDouble("var1"); /Return-Type: double  SetTagDouble("result",aufruf1(value); /Return-Type: BOOL3結(jié)果: 圖. 01關(guān)鍵字:函數(shù)調(diào)用,API 調(diào)用打印機的狀態(tài)框隱藏訂貨號顯示訂貨號訂貨號:問題:如何從WinCC調(diào)用打印機的狀態(tài)框 ? 解答:“控制打印機”從控制面板上調(diào)用該框。  下面的動作必須在一個按鈕下加以編輯,比方說: #include "apdefap.h"void OnClick(char* lpszPictur

18、eName, char* lpszObjectName, char*lpszPropertyName)/ 打印機框的調(diào)用ProgramExecute("C:WIN.95control.exe printers"); 當(dāng)在WinCC腳本中結(jié)合一個DLL時,使用的內(nèi)存空間增加了隱藏訂貨號顯示訂貨號訂貨號:問題:如果使用Visual C+創(chuàng)建的一個DLL文件時,發(fā)現(xiàn)PC上使用的內(nèi)存增加了。對于這種情況,應(yīng)該怎么辦? 解答:檢查是否用正式發(fā)行的版本創(chuàng)建了DLL。所提供WinCC是正式發(fā)行的版本。這意味著WinCC也可以使用Microsoft DLL MFC42.DLL的發(fā)行版本。

19、如果在測試版本中有DLL文件,那么全局腳本中必須另外加載MFC42.DLL的 測試版本。另外,這會增加對內(nèi)存的用量。 在WinCC中始終使用DLL文件的發(fā)行版本。 可按如下方法創(chuàng)建發(fā)行版本: 1. 打開DLL的項目文件。 2. 檢查是否DLL已在Win32 Release組態(tài)下被創(chuàng)建。 3. 如有必要,把活化的組態(tài)切換到“Win32 Release”。在Microsoft Visual C+ Studio中的“創(chuàng)建”->“定義活化的組態(tài)”中做該切換。 4. 重新創(chuàng)建DLL。 5. 用DLL的發(fā)行版本替換測試版本的DLL。 在 WinCC 中通過 C 腳本輸出聲音隱藏訂貨號顯示訂貨號訂貨號

20、:問題:如何在 WinCC 中通過 C 腳本輸出聲音? 解答:附件是一個小實例。該 C 動作位于按鈕后,這樣只需單擊該按鈕就可產(chǎn)生聲音。 C 動作: #include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)#pragma code ("Winmm.dll ")VOID WINAPI PlaySoundA ( char* pszSound, char* hmo

21、de, DWORD dwflag );#pragma code()PlaySoundA("C:Winnt.400Mediatada.wav",NULL,1);該功能需要有聲卡。PlaySoundA 函數(shù)的說明: 1. 參數(shù) char* pszSound:指定聲音文件 (*.wav 文件) 的全路徑。 2. 參數(shù) char* hmode:總為 0。 3. 參數(shù) DWORD dwflag:SND_SYNC = 0x0000:聲音文件播放一次,該腳本一直等到播放結(jié)束SND_ASYNC = 0x0001:聲音文件播放一次,同時并行處理該腳本SND_NODEFAULT = 0x000

22、2:如果未找到該聲音文件,則不播放默認(rèn)值,而是什么也不播放。SND_LOOP = 0x0008:重復(fù)該聲音文件直到下個 PlaySoundA 調(diào)用 (只能通過 0x0001) => 總是指定 0x0009。這些參數(shù)也可通過逐位邏輯或進行組合 (如:SND_ASYNC | SND_LOOP)注意事項:如果想使用計算機內(nèi)部揚聲器的蜂鳴聲而不是聲音文件,則實現(xiàn)如下腳本:由于尋址內(nèi)部揚聲器,無需聲卡。                

23、60;  #include "apdefap.h" void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)#pragma code ("Kernel32.dll")BOOL Beep( DWORD dwFreq, DWORD dwDuration); /dwFreq  定義蜂鳴聲的頻率,單位:Hz      

24、0;                                                 

25、0;                               /dwDuration 指定蜂鳴聲的持續(xù)時長,單位:ms#pragma code() Beep(1000,100);         

26、                                                  

27、  /實例:頻率:1000 Hz,100 ms 如何創(chuàng)建 Windows MessageBox 并且確定操作員按下的是哪個按鈕?隱藏訂貨號顯示訂貨號訂貨號:說明:使用動態(tài)向?qū)А癙icture Functions > Display error box”可以創(chuàng)建在 WinCC 運行系統(tǒng)中顯示 Windows MessageBox 的 C 腳本。使用該向?qū)傻?C 腳本使用的是 Windows API 函數(shù)“MessageBox()”。關(guān)于這個函數(shù)的詳細(xì)信息可從 Microsoft 的“MSDN Library”中獲 得。 MessageBox() 函數(shù)的參數(shù):MessageBo

28、x 的顯示受以下這些參數(shù)的影響。  參數(shù)描述HWND hWnd父窗口的處理零 = 消息沒有父窗口LPCTSTR lpText消息文本LPCTSTR lpCaption文本的標(biāo)題如果該參數(shù)設(shè)為零,標(biāo)題將使用默認(rèn)的文本“Error”。UINT uTypeMessageBox 的類型;這個參數(shù)定義了 MessageBox 的外觀和行為。它是不同“Flags”的組合(逐位進行“或”操作)。 以下列出了一些主要的標(biāo)記:MB_OK,MB_OKCANCEL,MB_YESNO,MB_YESNOCANCEL,MB_ABORTRETRYIGNORE,MB_CANCELTRYCONTINUE,MB_HEL

29、P,MB_RETRYCANCEL使用這些標(biāo)記中的一個可以定義 MessageBox 中顯示哪些按鈕。MB_ICONEXCLAMATION,MB_ICONQUESTION,MB_ICONWARNING,MB_ICONINFORMATION,MB_ICONQUESTION,MB_ICONASTERISK,MB_ICONSTOP,MB_ICONERROR,MB_ICONHAND使用這些標(biāo)記中的一個可以定義 MessageBox 中顯示的圖標(biāo)。MB_DEFBUTTON1,MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4使用這些標(biāo)記中的一個可以定義默認(rèn)的按鈕。MB_SE

30、TFOREGROUNDMessageBox 顯示在最前面。MB_SYSTEMMODALMessageBox 定義為系統(tǒng)模式。消息直到確認(rèn)之前一直顯示在最前面。 重要事項:“MB_SYSTEMMODAL”標(biāo)記應(yīng)該總用于避免發(fā)生阻塞整個系統(tǒng)的可能。MessageBox() 函數(shù)的返回值:  返回值描述IDABORT,IDCANCEL,IDCONTINUE,IDIGNORE,IDNO,IDOK,IDRETRY,IDTRYAGAIN,IDYES函數(shù)的返回值是“int”類型并告知操作員按下的是哪個按鈕。 注意事項: · 如果 MessageBox 有“Cancel”鍵,并且操作員使用

31、“ESC”鍵終止 MessageBox,系統(tǒng)將返回 IDCANCEL 的值。 · 如果函數(shù)使用失敗,將返回“0”。更多的錯誤信息可通過調(diào)用“GetLastError()”函數(shù)獲得。 · 如果函數(shù)調(diào)用成功,函數(shù)將返回左邊給出的某個值(常數(shù))中的一個。下圖顯示了如何使用“MessageBox()”函數(shù)以及如何評價函數(shù)返回值。 ( 26 KB ) 圖 01 為何不能在 WinCC 中使用 Windows 消息框?隱藏訂貨號顯示訂貨號訂貨號:描述:不能在 WinCC 中使用 Windows 消息框有多個原因: · 只要打開消息框,就阻塞系統(tǒng)只要打開 Windows 消息框

32、,WinCC 運行系統(tǒng)保持“阻塞”狀態(tài),直到用戶關(guān)閉消息框。一旦關(guān)閉消息框,就緩沖并處理消息框外的鼠標(biāo)單擊事件。 · 可能阻塞整個系統(tǒng)打開消息框時如果沒有置位 "MB_SYSTEMMODAL" 標(biāo)志,則系統(tǒng)不能操作。這種情況下,如果在消息框外單擊鼠標(biāo)左鍵,則消息框切換到后臺,而單擊的應(yīng)用程序(通常為 WinCC 運行系統(tǒng))切換到前臺。打開消息框時不能操作  WinCC 運行時。但要關(guān)閉消息框,則消息框必須返回前臺。但是這在通過組合鍵(例如,"ALT-TAB")切換任務(wù)被阻止的情況下是不能實現(xiàn)的。只能通過斷開/接 通計算機來實現(xiàn)。當(dāng)仍然

33、需要使用消息框時,使用 "MB_SYSTEMMODAL" 標(biāo)志來確保系統(tǒng)保持可操作。 · 按鈕文本語言取決于 Windows 操作系統(tǒng)的語言在 Windows 消息框按鈕上顯示的文本取決于當(dāng)前為操作系統(tǒng)設(shè)定的語言。對于多種語言,則需要使用多語言版本(MUI)的操作系統(tǒng)。在運行時中,必須改變操作系統(tǒng)的語 言。欲知詳情,請參見條目號 21923800。 · 必須手動組態(tài)消息文本和標(biāo)題的語言切換條目號22907359介紹了如何組態(tài)消息文本和標(biāo)題的語言切換。補救措施:可使用 WinCC 工具來模擬 Windows 消息框功能。為此,可以將一個 WinCC 畫面窗口切換為可見。該

溫馨提示

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

評論

0/150

提交評論