国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Wincc中變量參數(shù)的設定

2012-04-29 05:12徐剛
電腦知識與技術 2012年5期
關鍵詞:變量

徐剛

摘要:WINCC通過類C語言編程實現(xiàn)畫面和聲音的報警,但變量值需頻繁設定且易丟失;通過VB編程設定初始化文件中的變量,能徹底解決之,并給出了相應程序。

關鍵詞:VB;WINCC;變量

中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2012)05-1102-03

1概述

從面市伊始,用戶就對SIMATICWinCC印象深刻。一方面,是其高水平的創(chuàng)新,它使用戶在早期就認識到即將到來的發(fā)展趨勢并予以實現(xiàn);另一方面,是其基于標準的長期產(chǎn)品策略,可確保用戶的投資利益。憑籍這種戰(zhàn)略思想,WinCC,這一運行于Microsoft Windows 2000和XP下的Windows控制中心,已發(fā)展成為歐洲市場中的領導者,乃至業(yè)界遵循的標準。如果你想使設備和機器最優(yōu)化運行,如果你想最大程度地提高工廠的可用性和生產(chǎn)效率,WinCC當是上乘之選。

水廠生產(chǎn)自動化中控室使用西門子的自動化監(jiān)控軟件WINCC6.0,在編程代碼支持類c的語言代碼。在廠區(qū)檢測圖中,對于出廠水壓力、出廠水壓力、加藥量等模擬量的關鍵數(shù)據(jù)在wincc編程中不僅在畫面上報警,指示燈顏色又綠色變成紅色,而且提供了聲音的報警。

圖1

2編程原理

2.1 VBScript和ANSI-C——編寫腳本的最佳選擇

通常,畫面、操作邏輯和動畫都是通過簡單的對話框組態(tài)的。如果有必要,也可以使用腳本如VBScript或ANSI-C,例如用來轉換數(shù)值、啟動報表或生成操作員消息。VBScript有其自己的用戶友好、帶調(diào)試支持的編輯器。腳本本身能訪問所有WinCC圖形對象的屬性和方法,以及ActiveX控件和其它制造商的應用程序?qū)ο竽P汀_@使你能控制對象的動態(tài)性能,方便地建立與其它制造商應用程序的連接,例如與Microsoft Excel和SQL數(shù)據(jù)庫的連接。

2.2開放性編程接口——C-API

由于有API接口,WinCC功能模塊是開放的,通過它可以訪問組態(tài)和運行時系統(tǒng)的數(shù)據(jù)和功能。這意味著,可在你的腳本中使用WinCC組態(tài)和運行時功能,甚至可以開發(fā)獨立的應用程序,直接對WinCC進行訪問。這樣更多的應用程序可以自已開發(fā)。

3程序設計

該程序的關鍵工藝參數(shù)設定需要專業(yè)的編程人員,很容易想到用變量來對應這些工藝參數(shù)的上下限報警值,,如果在報警設置的上限和下限中與變量連接,雖然在運行中可以起到報警的作用,但是一旦遇到系統(tǒng)關閉或者機器死機重啟之后,這些變量都會歸零。現(xiàn)在需要解決的問題就是即使在重啟之后這些變量也能恢復設置時的值,用ini文件比較方便,以下給出了初始化文件的范例。

API函數(shù)

#pragma code ("kernel32.dll")

VOID WINAPI GetPrivateProfileStringA (char * lpApplicationName , char * lpKeyName, char * lpDefault , char lpReturnedString[256] , long int nsize , char * lpFileName);

VOID WINAPI WritePrivateProfileStringA (char * lpApplicationName, char * lpKeyName,char * lpString, char * lpFileName);

#pragma code()

兩個函數(shù)分別實現(xiàn)讀和寫數(shù)據(jù)?;蛘呤褂胏語言的fprintf和fscanf函數(shù),自己定義文本文件格式實現(xiàn),我不推薦。

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

寫入.ini

Private Sub cmdbqzm_Click()

Dim success As Long

Frmmain.txtcjsw = "4.3"

Frmmain.txtjfl = "0.8"

Frmmain.txtjll = "0.44"

success = WritePrivateProfileString("MyApp", "長江水位", Frmmain.txtcjsw.Text, "c:aa.ini")

success = WritePrivateProfileString("MyApp", "加礬量", Frmmain.txtjfl.Text, "c:aa.ini")

success = WritePrivateProfileString("MyApp", "加氯量", Frmmain.txtjll.Text, "c:aa.ini")

End Sub

此時c:aa.ini文件中的內(nèi)容如下:

[Myapp]

長江水位=4.3

加礬量=0.8

加氯量=0.44

調(diào)用.ini

Private Sub Form_Load()

Dim ret As Long

Dim buff As String

buff = String(255, 0)

ret = GetPrivateProfileString("Myapp", "長江水位", "4.5", buff, 256, "c:aa.ini")

txtname.Text =buff

ret = GetPrivateProfileString("Myapp", "加礬量", "0.85", buff, 256, "c:aa.ini")

txtage.Text =buff

ret = GetPrivateProfileString("Myapp", "加氯量", "0.5", buff, 256, "c:aa.ini")

txtsex.Text =buff

上面程序中長江水位“4.5”是默認值,加礬量、加氯量也是如此。使用INI文件保存配置信息是很方便的,它最大的優(yōu)點就是用戶可以手工去就改它,它通常用來保存一些不是至關重要的數(shù)據(jù)。它的缺點就是不適合保存結構比較復雜的數(shù)據(jù),而且文件容易被破壞。

4程序

附聲音報警的程序alarm.pas

#include "apdefap.h"

int gscAction( void )

{int i;

char* pszToken;

#pragma code("Winmm.dll")

BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);

#pragma code()

DWORD SND_ASYNC=0x0001;

DWORD SND_LOOP=0x0008;

BOOL n1;

SetTagBit("ALARM_5",(GetTagFloat("lf_out_water_nephelo2")>7));

//SetTagBit("reset_5",(GetTagFloat("lf_out_water_nephelo2")<5));//Return - Type :BOOL

SetTagBit("ALARM_6",(GetTagFloat("lf_cszd_3")>7)); //Return - Type :BOOL

//SetTagBit("reset_6",(GetTagFloat("lf_cszd_3")<5));//Return - Type :BOOL

//清水庫(西)水位

SetTagBit("ALARM_7",(GetTagFloat("lf_cszd_4")>7));

//SetTagBit("reset_7",(GetTagFloat("lf_cszd_4")<5));//Return - Type :BOOL

SetTagBit("ALARM_8",GetTagBit("monitor"));

tTagBit("ALARM_9",(GetTagFloat("2pf_gen_press")<250));

//SetTagBit("ALARM_10",(GetTagFloat("2pf_neopelo")>0.3));

/SetTagBit("ALARM_11",(GetTagFloat("2pf_over_ch")>1)|(GetTagFloat("2pf_over_ch")<0.3));

SetTagBit("ALARM_12",(GetTagFloat("lf_drug")<0.05)|(GetTagFloat("lf_jyl")<0.05));

//SetTagBit("ALARM_13",(GetTagFloat("lc_p1")<4)|(GetTagFloat("lc_p2")<4));

SetTagBit("ALARMZ",GetTagBit("ALARM_1") | GetTagBit("ALARM_2")| GetTagBit("ALARM_3")| GetTagBit("ALARM_4")| GetTag? Bit("ALARM_5") | GetTagBit("ALARM_6") | GetTagBit("ALARM_7") | GetTagBit("ALARM_8") | GetTagBit("ALARM_9") | GetTag? Bit("ALARM_12"));

if (! GetTagBit("ALARMZ"))

SetTagBit("resetz",1);

//SetTagBit("resetz",GetTagBit("reset_1") & GetTagBit("reset_2")& GetTagBit("reset_3")& GetTagBit("reset_4") & GetTagBit("reset_ 5") & GetTagBit("reset_6") & GetTagBit("reset_7"));

n1=GetTagBit("ALARMZ")&GetTagBit("resetz");

//Return - Type :short int

//Return - Type :short int

//Return - Type :BOOL

if (n1)

sndPlaySoundA("D:\AWAV\alarm1.WAV",SND_ASYNC|SND_LOOP);

else

sndPlaySoundA(NULL,SND_ASYNC);

//sndPlaySoundA("C:\windows\media\office97\laser.wav",SND_ASYNC|SND_LOOP);

SetTagFloat("cjsw",GetTagFloat("cj_water_level"));

//}

return 1; }

參考文獻:

[1]深入淺出西門子WINCC V6[Z].

猜你喜歡
變量
抓住不變量解題
也談分離變量
素變量混合冪丟番圖逼近
SL(3,3n)和SU(3,3n)的第一Cartan不變量
分離變量法:常見的通性通法
變中抓“不變量”等7則