亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于C#液位過程測(cè)控軟件的設(shè)計(jì)與實(shí)現(xiàn)

        2012-08-01 08:25:52崔海全張春梅趙志誠(chéng)
        關(guān)鍵詞:液位程序

        崔海全,張春梅,趙志誠(chéng)

        (1.太原科技大學(xué)電子信息工程學(xué)院,太原030024;2.新疆69028部隊(duì),烏魯木齊830006)

        液位控制是工業(yè)生產(chǎn)過程中的一類常見問題,液位過程控制實(shí)驗(yàn)系統(tǒng)能夠很好地模擬工業(yè)生產(chǎn)中液位過程具有的非線性、時(shí)滯和時(shí)變等復(fù)雜特性。此外,液位過程測(cè)控平臺(tái)的搭建和控制策略的研究,對(duì)工業(yè)生產(chǎn)中實(shí)施液位過程控制具有重要的指導(dǎo)作用[1]。

        利用工業(yè)自動(dòng)化組態(tài)軟件可以快速搭建起較復(fù)雜的測(cè)控平臺(tái)。組態(tài)軟件除去了測(cè)控軟件實(shí)現(xiàn)過程中的大量編程工作,使測(cè)控平臺(tái)的開發(fā)效率獲得了極大的提高,同時(shí)保證了測(cè)控平臺(tái)的工作性能和測(cè)控質(zhì)量[2]。然而,由于組態(tài)軟件重點(diǎn)強(qiáng)調(diào)通用性,在使用過程中使得系統(tǒng)體積龐大,造成了資源的很大浪費(fèi),同時(shí)又難以滿足個(gè)性化要求,價(jià)格昂貴,不適合大多數(shù)中小型企業(yè)。因此,開發(fā)人員更多地利用VC++、VB等具有強(qiáng)大功能的編程環(huán)境開發(fā)符合企業(yè)要求的測(cè)控軟件[3-4]。雖然利用這些編程語言可以自由地對(duì)系統(tǒng)資源進(jìn)行控制,但是很容易造成內(nèi)存泄漏而影響軟件運(yùn)行和控制質(zhì)量。同時(shí),用于這些編程環(huán)境的COM(Component Object Model)組件往往難以掌控和使用。

        C#是微軟提出的一種基于.NET框架且面向?qū)ο蟮母呒?jí)編程語言。C#由C和C++派生并擁有其強(qiáng)大的性能,同時(shí)擁有類似VB的快速開發(fā)能力[5]。基于C#開發(fā)的液位過程測(cè)控軟件可以很好地實(shí)現(xiàn)測(cè)控系統(tǒng)的要求,利用.NET程序集、MSIL(Microsoft Intermediate Language)和JIT(Just In Time)編譯器完成對(duì)組件的充分利用,并且通過垃圾回收機(jī)制回收軟件運(yùn)行時(shí)不再使用的內(nèi)存資源,避免了內(nèi)存泄露等缺陷。

        1 控制系統(tǒng)構(gòu)成

        選用的液位過程控制系統(tǒng)由被控對(duì)象、檢測(cè)裝置、執(zhí)行機(jī)構(gòu)、采集模塊和工控機(jī)5部分組成,其結(jié)構(gòu)如圖1所示。其中,被控對(duì)象由上水箱、中水箱和下水箱組成,其中上、中水箱的直徑為25 cm,高度為20 cm.下水箱的直徑為35 cm,高度為20 cm.檢測(cè)裝置為安裝于水箱底部的擴(kuò)散硅壓力傳感器和變送器,實(shí)現(xiàn)對(duì)水箱液位的測(cè)量,其輸出信號(hào)為4 mA~20 mA DC.執(zhí)行機(jī)構(gòu)為智能直行程電動(dòng)調(diào)節(jié)閥,其輸入的控制信號(hào)為4 mA~20 mA DC或1 V~5 V DC,輸出為4 mA~20 mA DC的閥位信號(hào)。檢測(cè)裝置和執(zhí)行機(jī)構(gòu)通過臺(tái)灣鴻格ICP7000系列智能采集模塊與工控機(jī)進(jìn)行通信,其中I-7017是8路模擬量輸入模塊,I-7027是4路模擬量輸出模塊。工控機(jī)實(shí)現(xiàn)對(duì)液位過程的監(jiān)督和控制作用。

        系統(tǒng)工作時(shí),壓力傳感器和變送器將液位高度轉(zhuǎn)化為4 mA~20 mA DC模擬信號(hào),經(jīng)泓格I-7017采集并轉(zhuǎn)換為數(shù)字信號(hào)送入工控機(jī)。測(cè)控軟件調(diào)用適當(dāng)?shù)目刂扑惴ńo出控制量,通過I-7024模塊將控制量轉(zhuǎn)化為4 mA~20 mA DC模擬信號(hào)傳送到電動(dòng)調(diào)節(jié)閥,控制閥門開度,實(shí)現(xiàn)對(duì)液位過程的控制。

        圖1 液位過程控制系統(tǒng)結(jié)構(gòu)圖Fig.1 Structure of the level-process control system

        2 測(cè)控軟件設(shè)計(jì)

        2.1 軟件功能需求和性能要求

        為實(shí)現(xiàn)對(duì)液位過程的控制,測(cè)控軟件應(yīng)具備的功能主要包括:與采集和控制設(shè)備通信并進(jìn)行數(shù)據(jù)交換;動(dòng)態(tài)添加、設(shè)置并加載控制算法;實(shí)時(shí)顯示監(jiān)測(cè)數(shù)據(jù);數(shù)據(jù)報(bào)警;繪制實(shí)時(shí)曲線和歷史曲線;存儲(chǔ)歷史數(shù)據(jù)并支持對(duì)歷史數(shù)據(jù)的查詢等。

        對(duì)測(cè)控軟件的性能要求主要包括:實(shí)時(shí)性,在有限時(shí)間內(nèi)對(duì)各種事件作出反應(yīng),并給出控制作用;多任務(wù)性,使多個(gè)任務(wù)在同一臺(tái)計(jì)算機(jī)上并發(fā)執(zhí)行;高可靠性,在計(jì)算機(jī)、輸入輸出設(shè)備、被控過程等正常工作條件下,要求軟件運(yùn)行穩(wěn)定、可靠。

        2.2 軟件設(shè)計(jì)思想和流程框架

        采用人性化的HMI(Human Machine Interface)。設(shè)計(jì)用戶界面有以下幾個(gè)主要規(guī)則:用戶的熟悉程度;一致性;可復(fù)原性;用戶的多樣性等。

        測(cè)控軟件的設(shè)計(jì)方法采用面向?qū)ο缶幊?Object-oriented Programming,OOP)技術(shù)。OOP作為一種程序設(shè)計(jì)泛型將對(duì)象作為程序的基本單元,將數(shù)據(jù)和程序封裝在對(duì)象中,提高了程序的重用性、靈活性和可擴(kuò)展性[6]。

        利用.NET程序集編寫控制算法。在組件技術(shù)的基礎(chǔ)上,.NET程序集提出了一種全新的建立和展開組件的方法[7]。其允許不同版本的組件無需在系統(tǒng)注冊(cè)表中注冊(cè)組件信息即可安全地在同一臺(tái)計(jì)算機(jī)上共存[8]。

        應(yīng)用多線程技術(shù),使計(jì)算機(jī)并行處理多個(gè)任務(wù),提升系統(tǒng)的運(yùn)行能力。此外,由于多核處理器近年來的快速發(fā)展,將并行的多任務(wù)線程交給不同的核心分別處理,使采用線程級(jí)并行編程的軟件運(yùn)行速度得到進(jìn)一步地提升。

        設(shè)計(jì)測(cè)控軟件的基本流程框架如圖2所示。

        圖2 軟件基本流程框架Fig.2 Basic framework of the software process

        3 測(cè)控軟件的實(shí)現(xiàn)

        選用Visual Studio 2005(VS2005)進(jìn)行所有.NET程序的開發(fā)。VS2005擁有軟件生命周期所需的大部分工具,同時(shí)C#是微軟專為.NET平臺(tái)而創(chuàng)建的編程語言,能夠使用.NET Framework代碼庫提供的每一種功能[9]。數(shù)據(jù)庫選用SQL Server 2005.下面介紹軟件實(shí)現(xiàn)的一些關(guān)鍵技術(shù)。

        3.1 創(chuàng)建用戶控件

        VS2005中缺乏監(jiān)控界面需要的一些特殊控件,因此,根據(jù)VS2005工具箱中的控件并利用.NET程序集創(chuàng)建需要的用戶控件。通過將幾個(gè)已有控件組合并且將其功能和界面封裝在一起,實(shí)現(xiàn)顯示和控制的功能。通過這種方法創(chuàng)建的用戶控件所有屬性均可在軟件運(yùn)行時(shí)動(dòng)態(tài)調(diào)整并保存到配置文件中。

        曲線信息控件CanCurveShow,如圖3(a)所示。通過組合checkBox和pictureBox控件,用以解決實(shí)時(shí)曲線和歷史曲線描繪時(shí),某一曲線是否顯示和顯示該曲線的名稱、顏色、畫筆寬度、畫筆樣式等屬性。其中,將更新顯示方法放在屬性中,當(dāng)屬性改變時(shí)可及時(shí)更新顯示。定義CanCurveShow控件的CheckedChanged事件,以響應(yīng)是否顯示該曲線。

        圖3 用戶控件Fig.3 User controls

        采用類似方法創(chuàng)建的其他用戶控件包括:實(shí)時(shí)數(shù)據(jù)顯示控件UCMonitor,用以實(shí)時(shí)數(shù)據(jù)的監(jiān)控,如圖3(b)所示;閥門控件Valve,用以顯示電動(dòng)調(diào)節(jié)閥反饋回測(cè)控軟件的模擬信號(hào),如圖3(c)所示;管道控件Pipe,用于顯示水流的位置和方向,如圖3(d)所示。

        3.2 串口通信

        利用ActiveX Control(OCX)for ICP7000系列組件,通過串口實(shí)現(xiàn)工控機(jī)與模擬量輸入模塊I-7017和模擬量輸出模塊I-7024之間的通信。在程序添加該OCX組件時(shí),自動(dòng)將組件中的數(shù)據(jù)類型轉(zhuǎn)換為.NET數(shù)據(jù)類型,并為其創(chuàng)建一個(gè)Wrapper assembly(包裝器程序集),該程序集在.NET運(yùn)行中自我說明,避免了在系統(tǒng)注冊(cè)表中注冊(cè)信息,可供C#直接調(diào)用。通過該組件可以完成串口、輸入輸出模塊地址、通信參數(shù)、輸入輸出通道等信息的設(shè)置以及對(duì)串口的控制。

        通過程序集中的方法可完成數(shù)據(jù)的采集和輸出。獲取模擬量輸入數(shù)據(jù)的函數(shù)原型為:float AnologIn(short iChannelNum);輸出控制數(shù)據(jù)的函數(shù)原型為:void AnalogOut(short iChannelNum,float fOutValue);獲取控制輸出反饋數(shù)據(jù)的函數(shù)原型為:float AnalogOutReadBack(short iChannelNum)。

        3.3 控制算法參數(shù)的配置以及數(shù)據(jù)的存儲(chǔ)

        軟件能夠?qū)攵喾N控制算法,不同控制算法所需監(jiān)控的參數(shù)各不相同,需要在加載算法時(shí)能夠進(jìn)行詳細(xì)地配置。此外,從數(shù)據(jù)庫中讀取的相關(guān)數(shù)據(jù)的維數(shù)也隨著控制算法的不同而不同。本文利用.NET泛型類Dircionary<K,V> 和List<T>類完成對(duì)參數(shù)的配置和數(shù)據(jù)的讀取。泛型類是以實(shí)例化過程中提供的類型或類為基礎(chǔ)建立的,創(chuàng)建過程非常簡(jiǎn)便,可完成對(duì)集合動(dòng)態(tài)地增加、刪除、插入或排序等多種功能。在添加控制算法程序集時(shí),通過對(duì)控制算法參數(shù)個(gè)數(shù)的設(shè)定,動(dòng)態(tài)生成標(biāo)號(hào)從0開始的文本控件,將標(biāo)號(hào)與輸入的參數(shù)名稱對(duì)增加到Dircionary<K,V>類的實(shí)例中,達(dá)到對(duì)參數(shù)的配置。數(shù)據(jù)采集時(shí),將一周期采集到的多個(gè)數(shù)據(jù)順序添加到List<T>類實(shí)例中,實(shí)現(xiàn)對(duì)不同維數(shù)數(shù)據(jù)的讀取。

        數(shù)據(jù)存儲(chǔ)的實(shí)現(xiàn)分為兩步,首先軟件運(yùn)行過程中將采集到的數(shù)據(jù)及采集時(shí)刻的時(shí)間信息利用文件流保存到本地磁盤,然后在控制結(jié)束后,將本地磁盤的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫。這樣既保證了軟件運(yùn)行時(shí)過少地訪問數(shù)據(jù)庫,也保留了文本形式的數(shù)據(jù)備份,提高軟件運(yùn)行的實(shí)時(shí)性和可靠性。

        3.4 實(shí)時(shí)曲線和歷史曲線的繪制

        本文中實(shí)時(shí)曲線實(shí)現(xiàn)為兩種顯示方式:背景隨曲線同步移動(dòng);背景固定,曲線移動(dòng)。歷史曲線顯示內(nèi)容分為:當(dāng)前控制過程的歷史曲線;數(shù)據(jù)庫中歷史數(shù)據(jù)的歷史曲線。曲線圖形的Y坐標(biāo)為數(shù)值大小,X坐標(biāo)為相對(duì)于第一次采樣時(shí)間的時(shí)間間隔。實(shí)現(xiàn)增加某一數(shù)據(jù)newValues[i]在曲線圖形控件的Y坐標(biāo)語句如下。

        tmpNoteMessage.Y.Add(picHeight-coordinateY-

        (((float)newValues[i]-yMinValue)/(yMaxValue

        yMinValue))*(picHeight-coordinateY));

        其中,picHeight為曲線圖形控件的高度,coordinateY為曲線圖形控件的Y軸偏移量,用以顯示在X軸方向的時(shí)間坐標(biāo)信息,newValues[i]為某一組數(shù)據(jù)中的一個(gè)數(shù)據(jù),yMinValue為Y軸顯示的數(shù)據(jù)最小值,yMaxValue為Y軸顯示的數(shù)值最大值。

        當(dāng)前控制過程的歷史曲線利用文件操作的輸入流將數(shù)據(jù)讀取到程序中并顯示。數(shù)據(jù)庫歷史曲線利用以關(guān)系型的、面向表的格式訪問數(shù)據(jù)的ADO.NET將數(shù)據(jù)庫中的歷史數(shù)據(jù)讀取到程序中并顯示。與實(shí)時(shí)曲線不同的是,歷史曲線采用兩個(gè)泛型類實(shí)例存儲(chǔ)數(shù)據(jù),分別為全部的歷史數(shù)據(jù)和供顯示的歷史數(shù)據(jù),通過按比例減少供顯示使用的泛型類實(shí)例的數(shù)據(jù)量實(shí)現(xiàn)曲線的放大、縮小功能,同時(shí)不影響曲線的質(zhì)量。此外,在顯示曲線圖形控件上,通過MouseMove事件響應(yīng)鼠標(biāo)在曲線圖形控件上的移動(dòng)動(dòng)作,根據(jù)鼠標(biāo)的位置,判斷鼠標(biāo)是否劃過曲線,將鼠標(biāo)處的曲線數(shù)據(jù)及采集時(shí)刻信息跟隨鼠標(biāo)顯示。

        3.5 多線程實(shí)現(xiàn)

        設(shè)計(jì)的線程包括:人機(jī)交互線程(主線程),數(shù)據(jù)采集、控制算法運(yùn)算線程,數(shù)據(jù)采樣線程等。為避免多個(gè)線程同時(shí)訪問同一塊內(nèi)存,采用兩種線程同步技術(shù)。對(duì)于標(biāo)志位采用Interlocked類為多個(gè)線程共享的變量提供原子操作。對(duì)于數(shù)據(jù)更新代碼塊的同步定義了一個(gè)線程鎖,利用lock關(guān)鍵字保證代碼塊的安全運(yùn)行。

        3.6 控制算法程序集的實(shí)現(xiàn)與加載

        本文將控制算法實(shí)現(xiàn)為.NET程序集,通過更改控制算法程序集實(shí)例中的字段和屬性改變控制算法參數(shù),輸出為運(yùn)算過程中需要監(jiān)控的參數(shù)數(shù)組。程序中利用.NET反射技術(shù)編寫LoadDllFrom-Resource類,該類用以動(dòng)態(tài)處理控制算法程序集。將程序集內(nèi)容讀取到字符數(shù)組中,通過Assembly類實(shí)例裝載字符數(shù)組,實(shí)例化程序集內(nèi)容。Assembly是System.Reflection.Emit命名空間的類,能夠在運(yùn)行時(shí)構(gòu)造類型。關(guān)鍵代碼如下:

        FileMode.Open);

        //定義字符數(shù)組,用以存儲(chǔ)程序集內(nèi)容

        byte[]buffer=new byte[(int)Fs.Length];

        //讀取程序集內(nèi)容到字符數(shù)組中

        Fs.Read(buffer,0,buffer.Length);

        //利用Assembly類裝載程序集

        Assembly myAssembly=Assembly.Load(buffer);

        //獲取程序集中定義的類型

        Type[]type=myAssembly.GetTypes();

        //判斷程序集是否與配置時(shí)相匹配,namespace為控制算法的命名空間,className為控制算法的類名稱

        foreach(Type t in type)

        {if(t.Namespace==namespace && t.Name==

        className)

        {//獲取程序集中方法,m獲取運(yùn)算過程方法,fm獲取更新參數(shù)方法,lpProcName為運(yùn)算過程方法名稱,lpFreshName為更新參數(shù)方法名稱

        MethodInfo m=t.GetMethod(lpProcName);

        MethodInfo fm=t.GetMethod(lpFreshName);

        if(m!=null&& fm!=null)

        {//實(shí)例化與配置項(xiàng)匹配的類型

        object o=Activator.CreateInstance(t);

        return;

        }}}

        4 實(shí)驗(yàn)結(jié)果及分析

        //定義文件流用于讀寫文件,lpFileName表示程序集路徑,F(xiàn)ileMode.Open表示打開現(xiàn)有文件

        FileStream Fs=new FileStream(lpFileName,

        以下水箱為被控對(duì)象,編寫PID控制算法程序集進(jìn)行控制實(shí)驗(yàn)。軟件運(yùn)行界面如圖4所示,界面分為三個(gè)面板,分別為虛擬液位過程面板、參數(shù)監(jiān)控面板和實(shí)時(shí)曲線面板。

        圖4 人機(jī)交互界面Fig.4 Human-machine interactive interface

        根據(jù)采樣定理及現(xiàn)場(chǎng)要求,設(shè)定采樣周期為500 ms.采用經(jīng)驗(yàn)試湊法確定PID控制器參數(shù),其中比例系數(shù)kp=10,積分系數(shù)kI=0.11,微分系數(shù)kD=0.07.初始液位為1 cm,待液位穩(wěn)定后,設(shè)定液位值為6 cm,控制效果如圖5所示。其中,系統(tǒng)調(diào)節(jié)時(shí)間為264 s,上升時(shí)間為183 s,超調(diào)量近似為0.實(shí)驗(yàn)結(jié)果表明,基于.NET程序集開發(fā)的PID算法能夠很好地實(shí)現(xiàn)液位控制,并且運(yùn)行穩(wěn)定。

        5 結(jié)語

        基于C#設(shè)計(jì)的測(cè)控軟件,實(shí)現(xiàn)了實(shí)時(shí)液位數(shù)據(jù)的采集和處理、數(shù)據(jù)異常報(bào)警和報(bào)警日志記錄、動(dòng)態(tài)加載控制算法、實(shí)時(shí)曲線和歷史曲線的繪制、數(shù)據(jù)存儲(chǔ)和查詢等功能。在.NET框架基礎(chǔ)上運(yùn)用了面向?qū)ο缶幊獭?NET程序集、多線程等技術(shù),簡(jiǎn)化了控制算法加載和配置方法,節(jié)省了運(yùn)行時(shí)間,保證了運(yùn)行時(shí)對(duì)系統(tǒng)資源的合理利用,使軟件具有很好的可靠性和實(shí)時(shí)性。

        圖5 液位響應(yīng)曲線Fig.5 Response curve of the liquid level

        [1]王志新,谷云東,李洪興.三水箱多變量液位控制實(shí)驗(yàn)設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2007,24(1):32-36.

        [2]王朝陽,王學(xué)選.時(shí)滯液位過程模糊-PI控制系統(tǒng)設(shè)計(jì)[J].太原科技大學(xué)學(xué)報(bào),2011,32(2):98-102.

        [3]李子彬,趙志誠(chéng),張井崗.基于VC++6.0的PC機(jī)與PLC串口通信的實(shí)現(xiàn)及其應(yīng)用[J].太原科技大學(xué)學(xué)報(bào),2008,29(3):192-195.

        [4]李曉鹿.基于C#上位機(jī)監(jiān)控組態(tài)軟件的設(shè)計(jì)與開發(fā)[D].濟(jì)南:濟(jì)南大學(xué),2010.

        [5]ANDREW KENNEDY.Securing the.NET programming model[J].Theoretical Computer Science,2006,364(3):311-317.

        [6]韓欣欣.面向?qū)ο蟮能浖y(cè)試方法研究[J].信息化研究,2010,36(10):32-36.

        [7]黃海濤,譚瑛,周小波.基于構(gòu)件的動(dòng)態(tài)配置應(yīng)用框架設(shè)計(jì)與實(shí)現(xiàn)[J].太原科技大學(xué)學(xué)報(bào),2008,29(4):271-275.

        [8]孫玉鈺.基于.NET組件技術(shù)的插件式框架的研究[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(6):143-145.

        [9]KARLI WATSON,CHRISTIAN NAGEL.Beginning Visual C#2005[M].北京:清華大學(xué)出版社,2006.

        猜你喜歡
        液位程序
        試論我國(guó)未決羈押程序的立法完善
        基于STM32燃?xì)鉄崴仩t液位控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
        石油儲(chǔ)罐液位開關(guān)的應(yīng)用分析
        失能的信仰——走向衰亡的民事訴訟程序
        雙電容測(cè)量液位方法
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        寶馬530車?yán)鋮s液液位過低報(bào)警
        恐怖犯罪刑事訴訟程序的完善
        国产免费av片在线观看播放| 人妻av中文字幕精品久久| 国产一区二区三区蜜桃| 大尺度极品粉嫩嫩模免费 | 水野优香中文字幕av网站| 欧美不卡一区二区三区| 久久精品成人无码观看不卡| 亚洲av一宅男色影视| 国产一级毛片卡| 欧美日韩一二三区高在线| 邻居少妇张开腿让我爽视频| 老女人下面毛茸茸的视频| 亚洲av无码一区二区三区天堂 | 国产在线91精品观看| 亚洲国产精品久久艾草| 欧美日韩精品一区二区三区高清视频| 欧美成人看片黄a免费看| 国产成人综合久久久久久| 国产一区二区三区亚洲天堂| 精品亚洲一区二区在线观看| 日本人妻伦理在线播放| 一二区成人影院电影网| 好吊色欧美一区二区三区四区| 亚洲日本三级| 亚洲熟妇av日韩熟妇av| 国产一区二区杨幂在线观看性色| 精品女同一区二区三区| 日韩精品视频一区二区三区 | 日本高清一级二级三级| 欧美成妇人吹潮在线播放| 97久久天天综合色天天综合色hd| 91亚洲国产成人aⅴ毛片大全| 亚洲视频一区二区久久久| 蕾丝女同一区二区三区| 日韩在线永久免费播放| 欧美天天综合色影久久精品| www.狠狠艹| 亚洲在战AV极品无码| 国产福利不卡视频在线| 人妻少妇看a偷人无码| 国产青草视频在线观看|