• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      俄羅斯方塊應(yīng)用程序的PLC設(shè)計(jì)與實(shí)現(xiàn)

      2022-06-23 04:22:16雷紅華楊國(guó)富
      關(guān)鍵詞:數(shù)組方塊應(yīng)用程序

      雷紅華,楊國(guó)富

      (襄陽(yáng)職業(yè)技術(shù)學(xué)院,湖北 襄陽(yáng) 441050)

      隨著大規(guī)模集成電路的發(fā)展,以微處理器為核心的可編程序控制器(PLC)得到了迅猛的發(fā)展,它在現(xiàn)代工業(yè)的應(yīng)用也越來(lái)越廣泛,PLC也成為了各大高職院校制造類(lèi)相關(guān)專(zhuān)業(yè)必修的專(zhuān)業(yè)核心能力課程。面對(duì)高職學(xué)生自控性較差、班級(jí)學(xué)生組成結(jié)構(gòu)復(fù)雜、水平層次參差不齊、學(xué)習(xí)激情不高的特點(diǎn),利用博途PLC程序、HMI人機(jī)界面和一些外部配件設(shè)計(jì)完成了俄羅斯方塊應(yīng)用程序,通過(guò)制作這個(gè)游戲項(xiàng)目,讓學(xué)生較好的掌握PLC工作原理、工作方式、流程控制和應(yīng)用編程等,將被動(dòng)學(xué)習(xí)變?yōu)橹鲃?dòng)學(xué)習(xí)。

      俄羅斯方塊最早是由俄羅斯人阿列克謝·帕基特諾夫于1984年6月發(fā)明的一款經(jīng)典游戲,[1]娛樂(lè)性強(qiáng),規(guī)則簡(jiǎn)單,項(xiàng)目的設(shè)計(jì)難度適中,既培養(yǎng)學(xué)習(xí)人員的編程思維,又使自我效能感獲得增強(qiáng)。[2]

      一、俄羅斯方塊應(yīng)用程序的總控制流程

      (一)俄羅斯方塊應(yīng)用程序的設(shè)備條件

      俄羅斯方塊應(yīng)用程序可一個(gè)人獨(dú)立完成,其所需設(shè)備為一臺(tái)西門(mén)子S7-1200系列PLC 1212C DC/DC/DC,及一個(gè)配套的HMI KPT 900 Basic,四個(gè)外部按鈕,一個(gè)三色燈。PLC作為一個(gè)處理器處理所有的數(shù)據(jù),HMI作為一個(gè)輸入輸出設(shè)備既可以用來(lái)顯示畫(huà)面,也可以采集玩家的操作,并移交于PLC處理。整套設(shè)備特別要注意通信類(lèi)型的匹配。

      (二)俄羅斯方塊應(yīng)用程序的基本組成

      游戲中所有的俄羅斯方塊都是由四個(gè)正方形塊在一個(gè)4*4的矩形中組合而成的,共有七種,加上每個(gè)方塊都有四個(gè)不同的方向(2*2的矩形方塊四個(gè)不同方向形狀一致也算四個(gè))共有28種。游戲操作是在一個(gè)10*20的矩形中進(jìn)行的,至少需要四個(gè)功能鍵:左移、右移、旋轉(zhuǎn)、快速下落,以及一些基礎(chǔ)的“開(kāi)始、結(jié)束、暫停鍵”等,而且游戲界面需顯示操作者當(dāng)前得分。

      所有畫(huà)面和動(dòng)畫(huà)的顯示都借助HMI完成,添加200個(gè)矩形對(duì)象排列成10*20的狀態(tài),并為其添加相應(yīng)的動(dòng)畫(huà),將200個(gè)矩形動(dòng)畫(huà)與顯示數(shù)組一一關(guān)聯(lián)起來(lái)。所有的實(shí)體與虛體都被存儲(chǔ)在對(duì)應(yīng)的數(shù)組里,數(shù)組顯示為實(shí)體與虛體的總合,即顯示所有的實(shí)體和虛體,虛體中的數(shù)據(jù)是根據(jù)方塊的位置和方塊的模型生成的。

      (三)俄羅斯方塊應(yīng)用程序的操作原理

      該游戲的基本規(guī)則是通過(guò)一定的旋轉(zhuǎn)和移動(dòng)來(lái)放置方塊,并根據(jù)規(guī)則消除滿行。[3]在按下開(kāi)始鍵后,系統(tǒng)會(huì)隨機(jī)生成一個(gè)方塊,并隨機(jī)生成一個(gè)位置。每個(gè)下落周期游離的方塊(以下簡(jiǎn)稱“虛體”)都會(huì)下落一次,在下落的過(guò)程中,可以進(jìn)行相應(yīng)的移動(dòng)和旋轉(zhuǎn)操作,每個(gè)下落周期結(jié)束后,系統(tǒng)都會(huì)判斷虛體是否已經(jīng)碰觸底部,或者是已經(jīng)固定的方塊(以下簡(jiǎn)稱“實(shí)體”)。若已觸及底部或?qū)嶓w則當(dāng)前的游離周期(從模型生成至虛體到轉(zhuǎn)化為實(shí)體稱一個(gè)游離周期)結(jié)束,接著所有的虛體都轉(zhuǎn)化成實(shí)體。若實(shí)體超出了上邊界,則游戲被結(jié)束,所有實(shí)體和虛體都會(huì)被清空。若游戲未結(jié)束,則從下往上判斷是否存在一整行的實(shí)體,若存在,則消除該行,將該行以上的實(shí)體都下移一行,然后從該行繼續(xù)判斷,若不存在,則向上判斷,直至判斷完所有實(shí)體。判斷完成后生成下一個(gè)隨機(jī)模型,開(kāi)始下一次游離周期。在平移或旋轉(zhuǎn)操作后,若虛體超出邊界或與實(shí)體重合,則該次操作是不被允許的,虛體不會(huì)發(fā)生任何改變。

      (四)俄羅斯方塊應(yīng)用程序的總流程控制框圖

      玩家通過(guò)外部的開(kāi)始按鈕啟動(dòng)游戲,游戲一開(kāi)始系統(tǒng)就會(huì)自動(dòng)生成一個(gè)隨機(jī)模型和一個(gè)隨機(jī)位置,然后開(kāi)始一個(gè)游離周期,在游離周期過(guò)程中,玩家可以左右移動(dòng)及旋轉(zhuǎn)操作,也可以通過(guò)外部按鈕暫停游戲。在暫停期間外部的三色燈黃色閃爍,游戲進(jìn)行時(shí)三色燈綠色亮起,當(dāng)游戲結(jié)束時(shí)紅燈會(huì)亮起。若玩家想要終止游戲也可以通過(guò)一個(gè)外部按鈕來(lái)結(jié)束當(dāng)前的游戲。俄羅斯方塊應(yīng)用程序總流程控制框圖如圖1所示。

      圖1 總控制流程框圖

      二、俄羅斯方塊應(yīng)用程序的模型生成

      (一)方塊模型的生成

      如圖2所示為一個(gè)俄羅斯方塊,以右下角為低位,左上角為高位,每個(gè)方塊都表示一個(gè)16位二進(jìn)制數(shù),將圖2中16位二進(jìn)制數(shù)轉(zhuǎn)換為一個(gè)十進(jìn)制整數(shù)1112,則這個(gè)整數(shù)就表示當(dāng)前模型,同理制作另外27個(gè)模型,將28個(gè)模型存儲(chǔ)在一個(gè)模型倉(cāng)庫(kù)數(shù)組中,相同方塊不同方向的模型在存儲(chǔ)時(shí)下標(biāo)相差7,例如當(dāng)前模型被存儲(chǔ)在了模型倉(cāng)庫(kù)數(shù)組第一個(gè)位置,則其模型的下一個(gè)方向應(yīng)該是由上一個(gè)模型順時(shí)針旋轉(zhuǎn)90度后存儲(chǔ)到數(shù)組第八個(gè),用同樣的方法存儲(chǔ)到第十五個(gè)、第二十二個(gè)。

      圖2 方塊模型

      (二)隨機(jī)模型的生成

      由于TIA博途中沒(méi)有自帶有關(guān)的隨機(jī)函數(shù),需自行設(shè)計(jì)一段生成隨機(jī)數(shù)的程序,利用一個(gè)函數(shù)RD_SYS_T讀取系統(tǒng)的時(shí)間。再利用當(dāng)前時(shí)間的納秒數(shù)值除1 000后加上秒數(shù)并除28求余(除1000是為了防止讀取的納秒數(shù)值后3位都為0,加上秒數(shù)是為了增加隨機(jī)性,以達(dá)到生成隨機(jī)數(shù)的目的),將求取的余數(shù)作為下標(biāo)。接著建立一個(gè)長(zhǎng)度為17位模型數(shù)組,即在模型數(shù)組中前16位數(shù)表示模型的形狀,最后一位數(shù)值則表示模型在模型倉(cāng)庫(kù)中的位置既下標(biāo),同樣也可以表示種類(lèi)號(hào),即在模型倉(cāng)庫(kù)中抽取一個(gè)隨機(jī)模型,將隨機(jī)模型對(duì)應(yīng)的十進(jìn)制整數(shù)依次除2求余,形成一個(gè)16位二進(jìn)制數(shù),若余數(shù)為1,則將模型的種類(lèi)號(hào)存儲(chǔ)到模型數(shù)組當(dāng)中。七種方塊對(duì)應(yīng)七個(gè)種類(lèi)號(hào),不同的種類(lèi)號(hào)會(huì)令方塊顯示不同的顏色,通過(guò)這個(gè)方法可以再次將圖2的模型表示了出來(lái)。同時(shí),在圖上顯示方塊,除了需要一個(gè)確定形狀的模型,還需要一個(gè)位置。再次使用隨機(jī)抽取模型的方法,在“隨機(jī)位置”數(shù)組中任意取一個(gè)位置作為模型位置。以模型左上角與模型位置為較準(zhǔn)點(diǎn)等比例將模型映射到虛體(可變化可移動(dòng))上作為一個(gè)確定的方塊,因每個(gè)周期模型位置都會(huì)下降一行(模型左上角是與模型位置重合的,一行有十個(gè)方塊,將模型位置+10,正好將模型位置下移一行),所以整個(gè)方塊也會(huì)下降一行。

      三、俄羅斯方塊應(yīng)用程序的功能實(shí)現(xiàn)

      (一)左、右移動(dòng)功能的實(shí)現(xiàn)

      因?yàn)榇_定了模型位置,所以在移動(dòng)過(guò)程中只需移動(dòng)模型位置,整個(gè)方塊的位置也會(huì)隨之改變。當(dāng)HMI收到左移的指令時(shí),PLC會(huì)判斷虛體是否已經(jīng)接觸左邊界或虛體左側(cè)存在實(shí)體。若已接觸左邊界或左側(cè)存在實(shí)體那么條件不滿足,不執(zhí)行移動(dòng)。若模型位置-1則向左移動(dòng)一格;右移同理。

      (二)旋轉(zhuǎn)功能的實(shí)現(xiàn)

      在制作模型的過(guò)程中,已將一種模型的四個(gè)不同方向方塊存儲(chǔ)在了模型倉(cāng)庫(kù)數(shù)組中,并且各個(gè)不同方向模型在數(shù)組中下標(biāo)相差7。按下旋轉(zhuǎn)命令后,則將模型數(shù)組的最后一個(gè)數(shù)值加上7后除28求余(防止下標(biāo)越界),既可得到新的模型下標(biāo),通過(guò)新的模型下標(biāo)即可在模型倉(cāng)庫(kù)數(shù)組中得到新的模型,用上面相同的方法將模型存儲(chǔ)到模型數(shù)組的前16位中。這樣新的模型數(shù)組中的模型就是旋轉(zhuǎn)后的模型了。若旋轉(zhuǎn)后的虛體與實(shí)體相重合,或超出邊界,則旋轉(zhuǎn)的條件不滿足,模型會(huì)被還原到旋轉(zhuǎn)之前的樣子。

      (三)下落及其完成判定

      利用一個(gè)定時(shí)器,每隔一段時(shí)間就會(huì)觸發(fā)一次下落的程序。下落前會(huì)進(jìn)行一次判斷,判斷是否虛體已經(jīng)接觸底部或者下方存在實(shí)體。若未接觸或下方不存在實(shí)體,則會(huì)觸發(fā)一次下落,既將模型位置+10。若已接觸底部或下方存在實(shí)體,則會(huì)將虛體轉(zhuǎn)換為實(shí)體,既將虛體中所有不為0的值賦值給實(shí)體,然后從下往上判斷實(shí)體中是否存在一整行的情況,若存在則從該行開(kāi)始,依次將上一行的值賦值給下一行。然后繼續(xù)判斷該行,若不存在,則向上判斷直至判斷完全是實(shí)體。完成后,再次生成一個(gè)隨機(jī)模型和隨機(jī)模型位置,繼續(xù)下一個(gè)游離周期。

      四、俄羅斯方塊應(yīng)用程序的PLC編程與HMI人機(jī)界面

      (一)PLC程序的編寫(xiě)

      以模型生成的程序?yàn)槔?首先添加一個(gè)FC的函數(shù)塊,更改名字為“模型生成”,更改編程語(yǔ)言為SCL語(yǔ)言。新建兩個(gè)DB塊,一個(gè)命名為“命令”,一個(gè)命令為“數(shù)據(jù)”。在“數(shù)據(jù)”塊中添加變量如圖3如示,在“命令”塊中添加變量如圖4所示。

      圖3 數(shù)據(jù)塊中的變量

      添加完所有程序數(shù)據(jù)后,便可開(kāi)始編程了,生成模型程序如圖5所示。如圖6所示完成的PLC主控程序,按下按鈕1開(kāi)始鍵后,“開(kāi)始”、“生成模型”變量會(huì)被置位。當(dāng)“生成模型”變量被置位后,生成模型函數(shù)中對(duì)應(yīng)的程序會(huì)被觸發(fā),首先通過(guò)讀取時(shí)間,再將讀取到的時(shí)間做一個(gè)運(yùn)算獲得一個(gè)隨機(jī)數(shù),求余數(shù)后保存至模型數(shù)組最后一個(gè)值。再通過(guò)這個(gè)值在模型倉(cāng)庫(kù)中獲取相應(yīng)的模型,并存儲(chǔ)到一個(gè)臨時(shí)變量#m中,再將#m依次除二求取余數(shù),若求取的余數(shù)為1則將種類(lèi)號(hào)存儲(chǔ)到模型數(shù)組相應(yīng)的位置。并把“下一個(gè)”置位以啟動(dòng)其他的程序,然后將“生成模型”復(fù)位。

      圖4 命令塊中的變量

      參照上述的各個(gè)功能的描述和解釋,依次編寫(xiě)所有的函數(shù)塊,并將所有函數(shù)塊在主程序中調(diào)用。并在主程序中編寫(xiě)外部按鈕和三色燈的程序。實(shí)現(xiàn)按下按鈕1后置位“生成模型”和“開(kāi)始”,按下按鈕2后暫停游戲,第二次按下后繼續(xù)游戲,既按下時(shí)將“暫?!比》?按下按鈕3后結(jié)束游戲,既置位“停止”。當(dāng)“暫?!睘?時(shí),三色燈黃燈閃爍,當(dāng)“開(kāi)始”為1并且“暫停”不為1時(shí)綠燈常亮,當(dāng)“開(kāi)始”“暫?!倍疾粸?時(shí)紅燈常亮。

      (二)HMI人機(jī)界面的設(shè)計(jì)

      完成PLC的程序編寫(xiě)后,需布局HMI中的畫(huà)面及一些事件。設(shè)計(jì)一個(gè)如圖7所示的畫(huà)面。

      圖7 HMI人機(jī)界面圖

      圖8 方塊顏色設(shè)定

      并為每個(gè)方塊都添加圖8所示多種不同顏色的動(dòng)畫(huà),關(guān)聯(lián)對(duì)應(yīng)變量,即可讓不同的方塊顯示不同的顏色。添加“GAME OVER”的字樣,設(shè)置其可見(jiàn)性,僅在游戲結(jié)束時(shí)出現(xiàn)。添加四個(gè)操作按鍵并關(guān)聯(lián)對(duì)應(yīng)的事件,以及四個(gè)流程的控制鍵及其變量關(guān)聯(lián)。添加兩個(gè)“I/O域”用于顯示難度和得分。在完成PLC程序和HMI的動(dòng)畫(huà)和事件后,可將其下載至PLC和HMI中查看效果,點(diǎn)擊開(kāi)始鍵后,整個(gè)游戲便可開(kāi)始運(yùn)行了。

      五、結(jié)論

      職業(yè)技術(shù)教育是通過(guò)教學(xué)使學(xué)生具有扎實(shí)的理論知識(shí)和熟練的動(dòng)手操作能力,為企業(yè)培養(yǎng)生產(chǎn)一線上的復(fù)合型技能人才。[4]針對(duì)于制造類(lèi)應(yīng)用性、實(shí)踐性較強(qiáng)的PLC課程教學(xué),既以企業(yè)典型工作任務(wù)或者項(xiàng)目為載體,開(kāi)展“教學(xué)做一體化”課堂教學(xué),讓課程理論與企業(yè)實(shí)踐達(dá)到無(wú)縫對(duì)接。同時(shí),又利用現(xiàn)有基礎(chǔ)開(kāi)發(fā)些益智類(lèi)、趣味性強(qiáng)的小游戲或創(chuàng)客項(xiàng)目,調(diào)動(dòng)學(xué)生積極性,培養(yǎng)學(xué)生的開(kāi)發(fā)能力,達(dá)到以能力為本位,創(chuàng)客教育活動(dòng)為載體,培養(yǎng)創(chuàng)新型機(jī)器人人才的目的,[5]整體提升工業(yè)機(jī)器人技術(shù)專(zhuān)業(yè)人才培養(yǎng)的質(zhì)量。

      猜你喜歡
      數(shù)組方塊應(yīng)用程序
      有多少個(gè)方塊
      JAVA稀疏矩陣算法
      不一樣的方塊橋
      JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
      謎題方塊
      刪除Win10中自帶的應(yīng)用程序
      尋找勾股數(shù)組的歷程
      關(guān)閉應(yīng)用程序更新提醒
      電腦迷(2012年15期)2012-04-29 17:09:47
      VB數(shù)組在for循環(huán)中的應(yīng)用
      考試周刊(2012年88期)2012-04-29 04:36:47
      三星電子將開(kāi)設(shè)應(yīng)用程序下載商店
      阿克苏市| 明星| 海兴县| 临潭县| 金沙县| 宿州市| 石家庄市| 咸阳市| 灌云县| 镇坪县| 定州市| 白银市| 海口市| 镇宁| 三门县| 洞口县| 城固县| 吕梁市| 登封市| 岳池县| 武山县| 九寨沟县| 轮台县| 屏东县| 弋阳县| 湘阴县| 林芝县| 外汇| 维西| 刚察县| 安西县| 平原县| 内乡县| 仪征市| 九台市| 青冈县| 武川县| 维西| 东阿县| 馆陶县| 阿坝县|