嚴(yán)浪濤,王 丹
(1. 重慶交通大學(xué)航海學(xué)院,重慶 400074;2. 大連海事大學(xué)輪機(jī)工程學(xué)院,遼寧 大連 116026)
基于GDI+的同步表動(dòng)態(tài)顯示的實(shí)現(xiàn)
嚴(yán)浪濤1,2,王 丹2
(1. 重慶交通大學(xué)航海學(xué)院,重慶 400074;2. 大連海事大學(xué)輪機(jī)工程學(xué)院,遼寧 大連 116026)
鑒于同步表在船舶電站模擬器以及船舶綜合監(jiān)控系統(tǒng)中的重要性,以GDI+和VS.net編程技術(shù)為基礎(chǔ),設(shè)計(jì)出了指示燈式船用同步表。該同步表的動(dòng)態(tài)旋轉(zhuǎn)速度和旋轉(zhuǎn)方向真實(shí)地反映了待并發(fā)電機(jī)和電網(wǎng)間頻差的大小以及頻差的正負(fù),工作特點(diǎn)符合船舶電站并車(chē)設(shè)計(jì)要求。恰當(dāng)?shù)膱D像處理技術(shù)使得同步表的整體外觀形象逼真,具有3D效果,符合操作人員的視覺(jué)感。為此,論文給出了相應(yīng)的設(shè)計(jì)思路和設(shè)計(jì)步驟,畫(huà)出了對(duì)應(yīng)的設(shè)計(jì)圖,運(yùn)用相應(yīng)的數(shù)學(xué)方法對(duì)同步表控件的屬性設(shè)計(jì)的合理性進(jìn)行了詳細(xì)的論述。結(jié)果證明,該方案實(shí)現(xiàn)了指示燈式同步表的動(dòng)態(tài)顯示,從而也可為其他類(lèi)似儀表控件的開(kāi)發(fā)提供一種思路。
船舶電站 監(jiān)控 同步表 動(dòng)態(tài)顯示;GDI+
同步表是船舶電站并車(chē)操作中必不可少的重要儀表之一,通過(guò)同步表對(duì)待并發(fā)電機(jī)和在網(wǎng)發(fā)電機(jī)的頻率、相位等參數(shù)的檢測(cè),獲得并車(chē)合閘的時(shí)刻,從而完成并車(chē)合閘操作。同步表一般分為指針式同步表和指示燈式同步表[1],本文以指示燈式同步表為例。
在船舶電站模擬器以及船舶電站監(jiān)控系統(tǒng)的開(kāi)發(fā)中,儀表控件的開(kāi)發(fā)為關(guān)鍵,尤其是同步表。因?yàn)閷?duì)于指示燈式同步表,它不僅僅是指示燈在旋轉(zhuǎn)(即每一個(gè)指示燈輪流發(fā)光),而且指示燈發(fā)光的順序(順時(shí)針或逆時(shí)針)跟頻率差的正負(fù)有關(guān),除此之外,每一個(gè)指示燈輪流發(fā)光的時(shí)間間隔還反映了這個(gè)頻率差的大小。這些特點(diǎn)對(duì)同步表控件的開(kāi)發(fā)帶來(lái)了較多的困難。
船舶電站模擬器或船舶電站監(jiān)控系統(tǒng)中的同步表不僅應(yīng)能具備上述同步表本身應(yīng)該具有的特點(diǎn),其信息顯示還必須與實(shí)船信息保持一致,同時(shí)在外觀上應(yīng)具有真實(shí)感,符合操作人員的視覺(jué)習(xí)慣[2],所以在圖像上也應(yīng)該做一些相應(yīng)的處理,比如3D效果的實(shí)現(xiàn)。
針對(duì)以上這些要求,運(yùn)用最新的GDI+ ( Graphics Device Interface)技術(shù)和C#.net編程語(yǔ)言來(lái)設(shè)計(jì)外觀形象逼真且功能完善的同步表控件。
指示燈式同步表采用發(fā)光二極管進(jìn)行指示,用于指示待并發(fā)電機(jī)與在網(wǎng)發(fā)電機(jī)的頻率差和相位差。
指示燈式同步表的結(jié)構(gòu)如圖1所示。表盤(pán)圓周均勻分布36個(gè)指示燈,每個(gè)指示燈代表10°電角度,上方12點(diǎn)鐘處指示燈是360°,其中“SYNC”(Synchronization)綠色指示燈與12點(diǎn)鐘處指示燈同步。
并車(chē)時(shí),先合上運(yùn)行發(fā)電機(jī)測(cè)量開(kāi)關(guān)K1,此時(shí)表面36個(gè)指示燈為隨機(jī)狀態(tài)。然后合上待并發(fā)電機(jī)測(cè)量開(kāi)關(guān)K2,此時(shí)指示燈開(kāi)始旋轉(zhuǎn),指示燈旋轉(zhuǎn)速度的快慢反映了待并發(fā)電機(jī)和在網(wǎng)發(fā)電機(jī)頻率差、相位差值的大小;指示燈的旋轉(zhuǎn)方向(順時(shí)針或逆時(shí)針)反映了待并發(fā)電機(jī)和在網(wǎng)發(fā)電機(jī)的頻率差、相位差的正與負(fù)[1]。
圖1 指示燈式同步表結(jié)構(gòu)及工作原理
當(dāng)在網(wǎng)發(fā)電機(jī)組與待并發(fā)電機(jī)組頻率差小于0.2 Hz,且相位差在350°~360°之間時(shí),上方“SYNC”綠色指示燈亮,此刻待并發(fā)電機(jī)組便可并入電網(wǎng)運(yùn)行。
在GDI+中,提供了Bitmap類(lèi)來(lái)處理圖像,Bitmap類(lèi)繼承于GDI+的Image類(lèi),Bitmap類(lèi)在圖像的裝入、存儲(chǔ)和處理方面擴(kuò)展了Image類(lèi)的方法[3]。Image類(lèi)和Bitmap類(lèi)主要功能是負(fù)責(zé)圖像裝入內(nèi)存、在內(nèi)存中對(duì)圖像的處理和由內(nèi)存將圖像數(shù)據(jù)寫(xiě)入外設(shè)[4]。正是由于GDI+中提供的Bitmap類(lèi)來(lái)處理圖像,這給同步表指示燈的動(dòng)態(tài)旋轉(zhuǎn)提供了一定的方便。
實(shí)際的指示燈式同步表是隨著頻差Δf大小而旋轉(zhuǎn)的,Δf越大轉(zhuǎn)動(dòng)速度越快,Δf越小轉(zhuǎn)動(dòng)的速度越慢。所以在同步表控件編制過(guò)程中,動(dòng)態(tài)旋轉(zhuǎn)顯示效果的實(shí)現(xiàn)較為復(fù)雜,其主要思想是按照顯示頻率的快慢提取坐標(biāo)值,顯示在用戶界面即可[5]。動(dòng)態(tài)旋轉(zhuǎn)顯示不僅需要實(shí)現(xiàn)動(dòng)態(tài)旋轉(zhuǎn)這一基本效果,還需要對(duì)圖像做相應(yīng)的處理,否則可能會(huì)發(fā)生圖像閃爍、圖像失真等現(xiàn)象。先簡(jiǎn)單地介紹一下同步表的外圍結(jié)構(gòu)設(shè)計(jì)思路。
2.1 外廓結(jié)構(gòu)設(shè)計(jì)
因?yàn)橹甘緹羰酵奖淼膱A周表盤(pán)均勻分布36個(gè)指示燈,所以在運(yùn)用GDI+設(shè)計(jì)同步表的表盤(pán)時(shí),理論上應(yīng)每10°電角度設(shè)置一個(gè)指示燈。
現(xiàn)需要畫(huà)一個(gè)直徑為R的圓作為同步表表盤(pán)的圓周,在該圓周上均勻的分布36個(gè)指示燈。但在C#控件開(kāi)發(fā)中,圓點(diǎn)位于整個(gè)界面的最左上角,如圖2中的o點(diǎn)。
圖2 外廓結(jié)構(gòu)設(shè)計(jì)圖
圓心O/點(diǎn)的坐標(biāo)即為(R/2,R/2),B點(diǎn)的坐標(biāo)為(R,R/2),根據(jù)坐標(biāo)平移方法可以得到A點(diǎn)的坐標(biāo)為(x,y)[6],
圖3 指示燈布局圖
同理,整個(gè)圓周的36個(gè)指示燈的坐標(biāo)位置可以寫(xiě)為M(xi, yi)(i≤36),其中:
按照上述計(jì)算公式(3)、(4)及設(shè)計(jì)方案可以得到指示燈式同步表表盤(pán)上36個(gè)指示燈的布局圖,如圖3所示。
2.2 圖像效果處理
為了使儀表控件更形象逼真、更適合操作人員的視覺(jué)習(xí)慣,控件圖像上需要做一些處理。
2.2.1 像素控制
在布置36個(gè)指示燈的時(shí)候,曾提到了一句“理論上應(yīng)每10°電角度設(shè)置一個(gè)指示燈”,但是實(shí)際上由于指示燈自身的大小,以及GDI+畫(huà)圖時(shí)畫(huà)筆的寬度等,所以只能說(shuō)理論上應(yīng)每10°電角度設(shè)置一個(gè)指示燈。同時(shí),在設(shè)計(jì)儀表的外廓的矩形框時(shí),需要繪制矩形、填充矩形,這時(shí)候還需要考慮繪制區(qū)域的邊界問(wèn)題。
例如從點(diǎn)(x0,y0)到對(duì)角點(diǎn)(x0+A,y0+B)之間繪制一個(gè)矩形,矩形的實(shí)際占有長(zhǎng)度是A+1,矩形的實(shí)際占有寬度是B+1,當(dāng)調(diào)用填充函數(shù)FillRectangle()進(jìn)行填充矩形時(shí),是從點(diǎn)(x0,y0)到點(diǎn)(x0+A-1,y0+B-1)范圍內(nèi)進(jìn)行填充。
在進(jìn)行繪制圖像的時(shí)候,要考慮畫(huà)筆的寬度以及填充圖像時(shí)的邊界問(wèn)題,防止圖像出現(xiàn)錯(cuò)位、防止邊框和填充部分出現(xiàn)重疊[7]。
2.2.2 抗閃爍技術(shù)
在電站模擬器或者船舶監(jiān)控系統(tǒng)中的界面中,當(dāng)鼠標(biāo)拉滾動(dòng)條滑動(dòng)的時(shí)候,圖像待顯示部分會(huì)發(fā)生一些變化,使整個(gè)界面發(fā)生閃爍,從而影響整個(gè)系統(tǒng)的穩(wěn)定性。所以在設(shè)計(jì)控件的時(shí)候,需要做相應(yīng)的處理。
產(chǎn)生閃爍的根本原因是因Invalidate()方法造成的,它會(huì)使控件背景顏色被擦除,使整個(gè)控件重新繪制。在設(shè)計(jì)時(shí),把整個(gè)控件的顏色分為前景顏色和背景顏色;當(dāng)?shù)谝淮芜\(yùn)行程序或者縮放控件時(shí),調(diào)用函數(shù)Paint(),用前景顏色創(chuàng)建畫(huà)筆或畫(huà)刷,再根據(jù)當(dāng)前的屬性繪制同步表的表盤(pán)??丶傩愿淖儠r(shí),在屬性的Set()語(yǔ)句塊內(nèi)的Degree=value語(yǔ)句之前,用背景顏色的畫(huà)筆或畫(huà)刷來(lái)重畫(huà)最近曾用前景顏色繪制過(guò)的圖像,用背景顏色覆蓋前景顏色。在Degree=value語(yǔ)句之后再用前景顏色繪制新圖像。這樣就能有效的消除閃爍現(xiàn)象[8]。
2.3 同步表控件的屬性
指示燈式同步表旋轉(zhuǎn)速度的快慢取決于頻差大?。?/p>
式中:fd為待并發(fā)電機(jī)的頻率;fw為電網(wǎng)頻率。
如Δf >0,即待并發(fā)電機(jī)的頻率大于電網(wǎng)頻率,同步表指示燈順時(shí)針旋轉(zhuǎn);如Δf <0,即待并發(fā)電機(jī)的頻率小于電網(wǎng)頻率,同步表指示燈逆時(shí)針旋轉(zhuǎn)。||fΔ越大,同步表指示燈轉(zhuǎn)動(dòng)的速度越快。
指示燈式同步表控件有兩個(gè)重要的屬性,指示燈的旋轉(zhuǎn)方向和轉(zhuǎn)動(dòng)的速度。
2.3.1 旋轉(zhuǎn)方向
36個(gè)指示燈(發(fā)光二極管)輪流被點(diǎn)亮,并且在某一個(gè)時(shí)刻只有一個(gè)二極管被點(diǎn)亮,其他二極管熄滅,其被點(diǎn)亮的順序(順時(shí)針或逆時(shí)針)就構(gòu)成了指示燈的旋轉(zhuǎn)順序,它取決于頻差Δf的正負(fù)。
設(shè)計(jì)36個(gè)指示燈時(shí),把各個(gè)指示燈按一定的順序(可以順時(shí)針也可逆時(shí)針)做相應(yīng)的編號(hào)(如L1-L36)。現(xiàn)假設(shè)以順時(shí)針進(jìn)行編號(hào),并令任意某一燈的編號(hào)為L(zhǎng)i,如圖4所示。如果當(dāng)接收到的信號(hào)時(shí)Δf >0,那么指示燈L1-L36發(fā)光的順序必然為L(zhǎng)i-1,Li,Li+1;圖4中當(dāng)前是Li發(fā)光(紅色),下一時(shí)刻就應(yīng)該是Li+1被點(diǎn)亮發(fā)光,同時(shí)上一時(shí)刻發(fā)光的Li燈熄滅。同理當(dāng)接收到的信號(hào)時(shí)Δf<0,那么指示燈L1-L36發(fā)光的順序必然為L(zhǎng)i+1,Li,Li-1;圖4中當(dāng)前是Li發(fā)光(紅色),下一時(shí)刻就應(yīng)該是Li-1被點(diǎn)亮發(fā)光,同時(shí)上一時(shí)刻發(fā)光的Li燈熄滅。
圖4 指示燈旋轉(zhuǎn)方向設(shè)計(jì)圖
2.3.2 旋轉(zhuǎn)速度
指示燈的旋轉(zhuǎn)速度,反映頻差的大小。頻差越大,旋轉(zhuǎn)速度越快;反之亦然。指示燈旋轉(zhuǎn)一周的時(shí)間就是頻差的一個(gè)周期[1],即:
根據(jù)《鋼質(zhì)海船入級(jí)與建造規(guī)范2009》要求,一般頻差Δf在±1%額定頻率值以內(nèi),即要求Δf≤±1%fe。對(duì)于50 Hz的船舶電網(wǎng),并車(chē)操作時(shí)一般頻差Δf在±0.5 Hz以內(nèi)被認(rèn)為是允許的。
為了實(shí)現(xiàn)同步表的動(dòng)態(tài)旋轉(zhuǎn),在控件編寫(xiě)過(guò)程中令一個(gè)timer來(lái)控制同步表旋轉(zhuǎn)的速度,在代碼編寫(xiě)過(guò)程中,根據(jù)(6)式來(lái)設(shè)置同步表控件的旋轉(zhuǎn)速度:
由(7)式可知,同步表指示燈的旋轉(zhuǎn)速度和頻差Δf成比例關(guān)系,寫(xiě)入代碼中,實(shí)現(xiàn)旋轉(zhuǎn)速度的控制。
3.1 工作前
圖5 工作前的指示燈式同步表
待并發(fā)電機(jī)起動(dòng)之前,同步表未投入工作,相應(yīng)的指示燈全滅,效果如圖5所示。
圖6為網(wǎng)上某公司待售的同步表,對(duì)比圖6,設(shè)計(jì)出的圖5所示的指示燈式同步表形象逼真,真實(shí)感強(qiáng)。當(dāng)前狀態(tài)所有的指示燈處于熄滅狀態(tài),即同步未投入工作。待并發(fā)電機(jī)的頻率fd低于電網(wǎng)頻率(即Δf =fd- fw<0),則同步表指示燈將向逆時(shí)針?lè)较蛐D(zhuǎn),即指示燈向“SLOW”的方向旋轉(zhuǎn);待并機(jī)的頻率高于電網(wǎng)的頻率(即Δf =fd- fw>0),同步表指示燈順時(shí)針?lè)较蜣D(zhuǎn)動(dòng),即指示燈向“FAST”的方向旋轉(zhuǎn)[9]。
圖6 同步表實(shí)物圖
3.2 旋轉(zhuǎn)中的同步表
當(dāng)Δf =fd- fw<0或者Δf =fd- fw>0時(shí),同步表將以ω=2π(fd- fw)= 2πΔf進(jìn)行旋轉(zhuǎn)(同步表36個(gè)二極管指示燈輪流發(fā)光)。假設(shè)Δf =fd- fw>0,同步表指示燈旋轉(zhuǎn)示意圖如圖7所示。
圖7 順時(shí)針旋轉(zhuǎn)中的同步表
圖7中,(a)圖表示t0時(shí)刻同步表指示燈旋轉(zhuǎn)到當(dāng)前位置;經(jīng)過(guò)一段時(shí)間t之后,即t1時(shí)刻同步表指示燈旋轉(zhuǎn)到(b)圖所示位置;(c)圖,(d)圖分別表示t2、t3時(shí)刻同步表指示燈旋轉(zhuǎn)所處的位置。圖(a)(b)(c)(d)為同步表運(yùn)行過(guò)程中的抓圖,所以指示燈的點(diǎn)亮順序不是相鄰位置。
3.3 成功合閘
并車(chē)合閘完成時(shí),同步表對(duì)應(yīng)的指示燈也會(huì)被點(diǎn)亮,表明當(dāng)前并網(wǎng)成功,如圖8所示。
圖8 成功并車(chē)
同步表是短時(shí)工作制,并車(chē)結(jié)束后斷開(kāi)同步表電源[10],同時(shí)圖8中相應(yīng)指示燈熄滅。
在船舶電站模擬器以及船舶綜合監(jiān)控系統(tǒng)的開(kāi)發(fā)中,很多儀表控件的開(kāi)發(fā)比較麻煩,一是要滿足儀表本身應(yīng)該具有的特點(diǎn)(指示燈旋轉(zhuǎn)方向、旋轉(zhuǎn)速度,數(shù)值的動(dòng)態(tài)顯示等);二是還需要對(duì)相應(yīng)的圖像做一些處理,使控件更形象逼真,更具有真實(shí)感,更符合操作人員的視覺(jué)感。因此,在設(shè)計(jì)或開(kāi)發(fā)過(guò)程中,熟悉了儀表本身的工作原理后,還要仔細(xì)地分析和準(zhǔn)確地計(jì)算,再結(jié)合恰當(dāng)?shù)膱D像處理技術(shù),以保證某些復(fù)雜儀表控件的設(shè)計(jì)和開(kāi)發(fā)得以順利完成。
[1] 吳志良. 船舶電站及其自動(dòng)化系統(tǒng). 大連: 大連海事大學(xué)出版社, 2010: 65-72.
[2] 李順亮, 王新輝, 鐘碧良. 應(yīng)用GDI+和C#開(kāi)發(fā)船舶壓載水監(jiān)控系統(tǒng)控件. 廣州航海高等專(zhuān)科學(xué)校學(xué)報(bào), 2012, (3): 4-6.
[3] 劉宏申, 陳小平. GDI+及多格式圖像的轉(zhuǎn)換. 微機(jī)發(fā)展, 2004, (11):40-43.
[4] Eric White. GDI+程序設(shè)計(jì). 北京: 清華大學(xué)出版社, 2002: 190-195
[5] 閆宇晗, 常鑫. 在C#中用GDI+實(shí)現(xiàn)圖形動(dòng)態(tài)顯示計(jì)算機(jī)技術(shù)與發(fā)展, 2006, (12): 117-120
[6] 嚴(yán)浪濤, 任光. RotateTransform函數(shù)在船舶儀表控件編寫(xiě)中的運(yùn)用及數(shù)學(xué)分析. 計(jì)算技術(shù)與自動(dòng)化, 2006, (12): 129-132.
[7] 惠為君, 吉善兵. 基于GDI+的ColorGrid控件的設(shè)計(jì). 鹽城工學(xué)院學(xué)報(bào), 2008, (6): 31-34.
[8] 李順亮, 張均東, 甘輝兵. GDI+技術(shù)在綜合船舶監(jiān)控系統(tǒng)中的應(yīng)用. 大連海事大學(xué)學(xué)報(bào), 2005, (2): 42-45.
[9] 吳志良. 船舶電站. 大連: 大連海事大學(xué)出版社, 2012: 62-66.
[10] 中華人民共和國(guó)海事局. 中華人民共和國(guó)海船船員適任考試大綱. 大連: 大連海事大學(xué)出版社2012.08.
Realization of Dynamic Display of a Synchronization Meter Based on GDI+
Yan Langtao1,2, Wang Dan2
(1. Navigation College of Chongqing Jiaotong University, Chongqing 400074, China; 2. Marine Engineering College, Dalian Maritime University, Dalian 116026, China)
For the importance of a synchronization meter in the development of the simulator of ship's power station or the integrated monitoring system, the lamp type marine synchronization meter is designed based on GDI+ and VS.net. The dynamic rotating speed of the developed synchronization meter can veritably reflect the frequency difference value between the standby generator and the power-gird, rotating direction reflects the positive and negative of the frequency difference, whose characteristics can meet the design requirements of marine power station. Proper image processing techniques make the synchronization meter vivid and lifelike, with 3D effects, conformed to operator's visual sense. For this purpose, the design idea and steps are presented with corresponding drawings. The rationality of property designing is discussed in detailed, by using the mathematics method. Results show that dynamic display of the synchronization meter can be realized by using the method discussed in this article, providing a new idea for the development of other similar instrument control.
marine power station; monitor; synchronization meter; dynamic display; GDI+
TP391
A
1003-4862(2015)06-0019-05
2015-02-03
重慶市教委科技項(xiàng)目(項(xiàng)目編號(hào):KJ110422)、重慶市科委集成示范項(xiàng)目(項(xiàng)目編號(hào):cstc2013jcsf70002)
嚴(yán)浪濤(1979-),男,講師,博士生。研究方向:船舶電力系統(tǒng)自動(dòng)控制。