張洪寶,華曉峰,田曉龍
(德州職業(yè)技術(shù)學(xué)院,山東德州253000)
通常,模擬時(shí)鐘設(shè)計(jì)通常利用單片機(jī)(或嵌入式)系統(tǒng)完成,本文利用組態(tài)王軟件進(jìn)行模擬時(shí)鐘設(shè)計(jì)。組態(tài)王Kingview軟件是一種通用的開(kāi)放型工業(yè)監(jiān)控軟件,其融過(guò)程控制設(shè)計(jì)、現(xiàn)場(chǎng)操作以及工廠資源管理于一體[1],與常見(jiàn)的PLC、變頻器、智能儀表、智能模塊等通訊方便,很容易實(shí)現(xiàn)自動(dòng)監(jiān)控,在現(xiàn)代生產(chǎn)和教學(xué)中得到了廣泛應(yīng)用。利用組態(tài)王軟件進(jìn)行模擬時(shí)鐘的設(shè)計(jì),目的是為了讓學(xué)生練習(xí)畫面制作、旋轉(zhuǎn)設(shè)置和命令語(yǔ)言的編寫,同時(shí)解決其他文獻(xiàn)中不足的問(wèn)題。有的教材也講述了利用組態(tài)王進(jìn)行模擬時(shí)鐘的設(shè)計(jì),但效果都不盡人意,有的講述不細(xì)致,學(xué)生自己根據(jù)教材根本做不出結(jié)果;有的雖然能做出結(jié)果,但時(shí)針的旋轉(zhuǎn)和現(xiàn)實(shí)中時(shí)鐘的時(shí)針不相符;有的畫出的刻度線位置不準(zhǔn)確,方向不指向圓心,時(shí)針不能隨時(shí)間勻速旋轉(zhuǎn)。于玲等[2-3]和石敬波等[4]講述了模擬時(shí)鐘的設(shè)計(jì)過(guò)程,但對(duì)畫面中時(shí)鐘指針和刻度線的設(shè)計(jì)都沒(méi)有詳細(xì)地講述;于玲等[2-3]的畫面命令語(yǔ)言比較繁瑣,時(shí)針雖然能勻速旋轉(zhuǎn),但與分針的旋轉(zhuǎn)不能同步,石敬波等[4]設(shè)計(jì)的時(shí)鐘關(guān)聯(lián)的是系統(tǒng)時(shí)間;設(shè)計(jì)的時(shí)鐘在運(yùn)行畫面中數(shù)字顯示的時(shí)間都不能手動(dòng)更改;劉玉秀等[5]中模擬時(shí)鐘顯示畫面,刻度線不均勻且有的刻度線不能指向中心;王雪、侯秋華等[6-7]是利用系統(tǒng)中三角函數(shù)模塊完美的畫出了表盤畫面,而組態(tài)王軟件不具備這一功能。通過(guò)反復(fù)研究,本文詳述了利用組態(tài)王軟件進(jìn)行模擬時(shí)鐘的設(shè)計(jì)過(guò)程。
組態(tài)軟件的應(yīng)用,繪制畫面是重要的一個(gè)方面,模擬時(shí)鐘的畫面設(shè)計(jì)是很重要的一個(gè)環(huán)節(jié),表盤上12個(gè)整點(diǎn)的刻度線一定要均勻分布,并且畫出的刻度線要指向圓心。
模擬時(shí)鐘畫面設(shè)計(jì)主要包括時(shí)鐘表盤設(shè)計(jì)和時(shí)鐘指針設(shè)計(jì)。
模擬鐘表的表盤設(shè)計(jì),主要是刻度線的位置和方向的確定。在畫面中畫出正圓后,根據(jù)圓的坐標(biāo)和直徑(長(zhǎng)度或高度)計(jì)算出圓心坐標(biāo),然后在圓周上放置12個(gè)刻度線。
1.1.1 設(shè)置3、6、9、12點(diǎn)鐘刻度線
特殊位置的4個(gè)刻度線,可以直接計(jì)算出坐標(biāo)確定其位置。先畫出兩條水平刻度線,設(shè)置好其縱坐標(biāo)(縱坐標(biāo)=圓心縱坐標(biāo)-刻度線寬度/2),然后利用鍵盤上的左右移動(dòng)鍵,將刻度線分別放置于3點(diǎn)鐘和9點(diǎn)鐘位置。用同樣的方法設(shè)置6點(diǎn)鐘和12點(diǎn)鐘刻度線,畫出兩條豎直刻度線,設(shè)置好其橫坐標(biāo)(橫坐標(biāo)=圓心橫坐標(biāo)-刻度線寬度/2),然后利用鍵盤上的上下移動(dòng)鍵,將刻度線分別放置于6點(diǎn)鐘和12點(diǎn)鐘位置。
1.1.2 設(shè)置其余刻度線
在組態(tài)王的畫面設(shè)計(jì)中,其余刻度線的位置不能用編程的方法來(lái)確定,刻度線也不能旋轉(zhuǎn)任意角度,只能用特殊的方法解決。畫刻度線時(shí)要充分利用有關(guān)刻度線的對(duì)稱性。
(1)先確定1點(diǎn)鐘和5點(diǎn)鐘刻度線在圓周上的位置。這兩個(gè)刻度線的位置與圓心的連線和過(guò)圓心豎直方向的直徑成30°角,根據(jù)圓心坐標(biāo)和半徑的大小,確定這兩個(gè)刻度線的橫坐標(biāo)(橫坐標(biāo)=圓心橫坐標(biāo)+半徑/2),在該坐標(biāo)位置畫一條豎線,這條豎線與圓周的交點(diǎn)便是1點(diǎn)鐘和5點(diǎn)鐘的刻度線在圓周上的位置。利用同樣的方法,確定7點(diǎn)鐘和11點(diǎn)鐘刻度線在圓周上的位置。
(2)再確定2點(diǎn)鐘和10點(diǎn)鐘刻度線在圓周上的位置。這兩個(gè)刻度線的位置與圓心的連線和過(guò)圓心水平方向的直徑成30°角,根據(jù)圓心坐標(biāo)和半徑的大小,確定這兩個(gè)刻度線的縱坐標(biāo)(縱坐標(biāo)=圓心縱坐標(biāo)-半徑/2),在該坐標(biāo)位置畫一條橫線,這條橫線與圓周的交點(diǎn)便是2點(diǎn)鐘和10點(diǎn)鐘的刻度線在圓周上的位置。利用同樣的方法,確定4點(diǎn)鐘和8點(diǎn)鐘刻度線在圓周上的位置。如圖1所示。
圖1 刻度線位置
(3)確定出刻度線的位置以后,再畫出刻度線。先畫1點(diǎn)鐘和7點(diǎn)鐘刻度線。經(jīng)過(guò)這兩個(gè)刻度線的位置畫一條細(xì)線,沿著細(xì)線的方向畫出這兩條刻度線,使刻度線的長(zhǎng)度和原先畫好的刻度線一樣。利用1和7的連線與4和10的連線是垂直的,復(fù)制1點(diǎn)鐘和7點(diǎn)鐘這兩條刻度線,旋轉(zhuǎn)90°,分別放置在4點(diǎn)鐘和10點(diǎn)鐘位置。再畫5點(diǎn)鐘和11點(diǎn)鐘刻度線。經(jīng)過(guò)這兩個(gè)刻度線的位置畫一條細(xì)線,沿著細(xì)線的方向畫出這兩條刻度線。利用5和11的連線與2和8的連線是垂直的,復(fù)制5點(diǎn)鐘和11點(diǎn)鐘這兩條刻度線,旋轉(zhuǎn)90°,分別放置在2點(diǎn)鐘和8點(diǎn)鐘位置,如圖2所示。將多余的輔助線刪除,表盤如圖3所示。這樣畫出的刻度線位置準(zhǔn)確,方向指向圓心。
圖2 刻度線
圖3 表盤
時(shí)鐘指針的設(shè)計(jì)是指用長(zhǎng)度、寬度和顏色不同的3條線段表示時(shí)鐘的3個(gè)指針。時(shí)針最短最寬,秒針最長(zhǎng)最窄;3個(gè)指針的圖素位置,時(shí)針在最前面,秒針在最后面,3個(gè)指針均指向12點(diǎn)鐘。根據(jù)表盤圓心的坐標(biāo)和3個(gè)指針的長(zhǎng)度和寬度,計(jì)算出3個(gè)指針的坐標(biāo),指針的橫坐標(biāo)等于圓心橫坐標(biāo)減去指針寬度的一半,指針的縱坐標(biāo)等于圓心縱坐標(biāo)減去指針長(zhǎng)度。在工具箱下部修改好3個(gè)指針的坐標(biāo),將3個(gè)指針對(duì)齊到表盤的中心。為了美觀,再畫一個(gè)小圓,放置到表盤的中心處。如圖4所示。
圖4 模擬時(shí)鐘
在畫面中繪制啟停開(kāi)關(guān)和復(fù)位開(kāi)關(guān),用來(lái)在運(yùn)行時(shí)控制模擬時(shí)鐘的啟動(dòng)、停止和復(fù)位;添加時(shí)間輸入輸出文本,用來(lái)在運(yùn)行時(shí)調(diào)整時(shí)間。運(yùn)行時(shí),點(diǎn)擊啟停開(kāi)關(guān),模擬鐘表開(kāi)始運(yùn)轉(zhuǎn),再次點(diǎn)擊時(shí)停止運(yùn)轉(zhuǎn);點(diǎn)擊復(fù)位開(kāi)關(guān),時(shí)間全部復(fù)位清零。在畫面上輸入“時(shí)”“分”“秒”3個(gè)文本,中間用冒號(hào)隔開(kāi),文本“時(shí):分:秒”用來(lái)顯示運(yùn)行的時(shí)間,同時(shí),可以輸入數(shù)字,隨意更改時(shí)間;更改時(shí)間時(shí),指針會(huì)隨著做相應(yīng)的轉(zhuǎn)動(dòng)。完整的模擬時(shí)鐘畫面如圖5所示。
圖5 模擬時(shí)鐘畫面
在模擬鐘表的設(shè)計(jì)中,需要定義4個(gè)內(nèi)存整型變量和2個(gè)內(nèi)存離散變量。定義3個(gè)內(nèi)存整型變量“時(shí)針”“分針”“秒針”,分別對(duì)應(yīng)輸出時(shí)間的時(shí)、分、秒。時(shí)針旋轉(zhuǎn)一周是12 h,如果直接把畫面中的時(shí)針動(dòng)畫連接到變量“時(shí)針”,運(yùn)行時(shí)畫面中的時(shí)針,只能指示整點(diǎn)位置,每小時(shí)跳動(dòng)一個(gè)刻度,與實(shí)際情況不符。為了運(yùn)行時(shí)時(shí)針能夠勻速旋轉(zhuǎn),再定義一個(gè)內(nèi)存整型“時(shí)針旋轉(zhuǎn)”中間變量。
定義兩個(gè)內(nèi)存離散變量“啟停開(kāi)關(guān)”和“復(fù)位開(kāi)關(guān)”。
將畫面中的秒針和分針?lè)謩e動(dòng)畫連接變量“秒針”和“分針”,最大順時(shí)針?lè)较驅(qū)?yīng)角度為360°時(shí)的數(shù)值為60。
將畫面中的時(shí)針動(dòng)畫連接變量“時(shí)針旋轉(zhuǎn)”,最大順時(shí)針?lè)较驅(qū)?yīng)角度為360°時(shí)的數(shù)值為43 200,此數(shù)值為12×60×60,時(shí)針每分鐘旋轉(zhuǎn)0.5°。
設(shè)置旋轉(zhuǎn)連接時(shí),旋轉(zhuǎn)圓心偏離圖素中心的大小,水平方向?yàn)?,垂直方向?yàn)橹羔樃叨鹊囊话搿?/p>
將文本“時(shí)∶分∶秒”進(jìn)行動(dòng)畫連接,模擬值輸入和輸出分別連接到變量“時(shí)針”、“分針”、“秒針”;模擬值輸入連接時(shí),秒針和分針的最大值為60,時(shí)針的最大值時(shí)12。這樣在運(yùn)行時(shí),通過(guò)在此輸入數(shù)值,可以改變時(shí)間。
在模擬鐘表的設(shè)計(jì)過(guò)程中,畫面命令語(yǔ)言的設(shè)計(jì)是最重要的一個(gè)環(huán)節(jié),畫面命令語(yǔ)言編寫完成后,要根據(jù)運(yùn)行情況不斷進(jìn)行調(diào)試修改,最終達(dá)到理想的結(jié)果。
根據(jù)畫面和動(dòng)畫連接設(shè)計(jì)情況,按照秒和分60進(jìn)位的規(guī)律編寫命令語(yǔ)言。
if(\本站點(diǎn)啟停開(kāi)關(guān)==1)
{\本站點(diǎn)時(shí)針旋轉(zhuǎn)=3600*\本站點(diǎn)時(shí)針+60*\本站點(diǎn)分針;
\本站點(diǎn)秒針=\本站點(diǎn)秒針+1;}
if(\本站點(diǎn)秒針==60)
{\本站點(diǎn)分針=\本站點(diǎn)分針+1;
\本站點(diǎn)秒針=0;}
if(\本站點(diǎn)分針==60)
{\本站點(diǎn)時(shí)針=\本站點(diǎn)時(shí)針+1;
\本站點(diǎn)分針=0;}
if(\本站點(diǎn)時(shí)針==12)
\本站點(diǎn)時(shí)針=0;
if(\本站點(diǎn)時(shí)針旋轉(zhuǎn)==43200)
\本站點(diǎn)時(shí)針旋轉(zhuǎn)=0;
if(\本站點(diǎn)復(fù)位開(kāi)關(guān)==1)
{\本站點(diǎn)秒針=0;
\本站點(diǎn)分針=0;
\本站點(diǎn)時(shí)針=0;
\本站點(diǎn)時(shí)針旋轉(zhuǎn)=0;}
軟件進(jìn)入運(yùn)行系統(tǒng)后,點(diǎn)擊啟停開(kāi)關(guān),秒針開(kāi)始轉(zhuǎn)動(dòng),秒針轉(zhuǎn)動(dòng)60次(一周)后,分針和時(shí)針轉(zhuǎn)動(dòng)一次。運(yùn)行時(shí),數(shù)字顯示的時(shí)間時(shí)、分、秒,可以手動(dòng)更改,指針和數(shù)字顯示能夠同步變化,在任意時(shí)刻點(diǎn)擊啟停開(kāi)關(guān),指針停止旋轉(zhuǎn)。兩個(gè)不同時(shí)刻的情況如圖6所示。
圖6 模擬鐘表運(yùn)行時(shí)刻
本文所述利用組態(tài)王軟件設(shè)計(jì)的模擬時(shí)鐘,解決了表盤上刻度線位置不準(zhǔn)確、方向不能指向圓心的問(wèn)題,解決了運(yùn)行時(shí)時(shí)針不能勻速旋轉(zhuǎn)的問(wèn)題。經(jīng)過(guò)運(yùn)行測(cè)試,秒針和分針每周轉(zhuǎn)動(dòng)60次,每次旋轉(zhuǎn)6°;時(shí)針每周轉(zhuǎn)動(dòng)720次,每次旋轉(zhuǎn)0.5°。將畫面命令語(yǔ)言對(duì)話框中的程序循環(huán)時(shí)間改為600 ms,模擬時(shí)鐘運(yùn)行的快慢正好能和實(shí)際的時(shí)鐘相吻合。在此設(shè)計(jì)的基礎(chǔ)上,還可以進(jìn)行改進(jìn),添加秒針和分針旋轉(zhuǎn)的中間變量,改變指針動(dòng)畫連接設(shè)計(jì)和畫面命令語(yǔ)言,使秒針和分針每次旋轉(zhuǎn)的角度更小,轉(zhuǎn)動(dòng)更平緩。