引言
隨著人們生活水平的提高,人們愈來愈追求多樣化和個性化的休閑娛樂方式,除了“求新、求奇、求特、求異”之外,大家更加注重體驗參與式的游藝活動,為了應對這種消費需求偏好的改變,提升企業(yè)自身競爭力,本系統(tǒng)將先進的激光多址編碼、RF無線射頻、CAN總線、動漫與光機電控制等技術相結合,設計一種基于光機電與動漫結合的新型交互式射擊游藝系統(tǒng)。
目前,比較好的射擊游藝系統(tǒng)有迪斯尼公司的“巴斯光年星際歷險”,另一種類似的游樂設施有“Buzz Light year’s Space Ranger Spin”,它們一直以來都是主題樂園內(nèi)深受歡迎的游樂設施之一。但以上兩種系統(tǒng)都缺少游藝過程和調(diào)度中心控制協(xié)作的功能,沒有上位機控制軟件,不能存儲分析射擊數(shù)據(jù)。本系統(tǒng)在集成上述系統(tǒng)先進技術和創(chuàng)意理念的基礎上,克服了上述技術問題,通過有線與無線通信的有機結合,從技術到創(chuàng)意都有較大的提高,使游客可享受到更大的游藝樂趣。
控制系統(tǒng)的設計與實現(xiàn)
系統(tǒng)主要由中心調(diào)度分系統(tǒng)、游藝小車通信分系統(tǒng)、區(qū)域道具動作機電控制分系統(tǒng)、車載PLC運動控制分系統(tǒng)、動漫效果與光機電控制分系統(tǒng)組成,如圖1所示。
圖1 系統(tǒng)組成結構示意圖
中心調(diào)度分系統(tǒng)
通過CAN總線與區(qū)域道具動作機電控制分系統(tǒng)進行雙向數(shù)據(jù)通信實現(xiàn)計分與道具機電動作控制;與游藝小車通信分系統(tǒng)采用基于無線射頻模塊nRF905的主從式雙向數(shù)據(jù)通信實現(xiàn)動漫效果與光機電控制,實現(xiàn)射擊過程的實時計分顯示、動漫場景與光機電動作協(xié)調(diào)控制。中心調(diào)度分系統(tǒng)接收/處理各區(qū)域控制分系統(tǒng)計分和檢測開關狀態(tài)、車載分系統(tǒng)初始化等信號;顯示車載系統(tǒng)各車子網(wǎng)絡連接狀態(tài);通過人工方式向車載分系統(tǒng)發(fā)送啟動、停車等控制指令;自動向車載分系統(tǒng)發(fā)送實時分數(shù)信息;控制播放數(shù)字化動漫影音信息,并向車載分系統(tǒng)發(fā)送控制信號(該信號由各車子行走控制系統(tǒng)解釋并執(zhí)行車子動作);處理分數(shù)排行及歷史紀錄、用戶信息管理等;下客區(qū)顯示屏播放即時分數(shù)、候客區(qū)顯示屏播放歷史紀錄、預演區(qū)顯示屏播放游戲短片及解說、區(qū)域控制區(qū)內(nèi)投影機播放數(shù)字化動漫影片;能控制至少8個區(qū)域控制分系統(tǒng)(共110個控制點)。
游藝小車通信分系統(tǒng)
通過人工觸發(fā)玩具手槍內(nèi)的紅外激光發(fā)射模塊,向區(qū)域道具動作機電控制分系統(tǒng)發(fā)射多址編碼信息,模擬射擊過程,完成游客與現(xiàn)場道具的交互過程。接收/處理中心調(diào)度分系統(tǒng)的分數(shù)信息并顯示;接收中心控制分系統(tǒng)的啟動、停止和動作指令,并通過RS232數(shù)字接口通道透明地傳輸給車載PLC控制分系統(tǒng);接收車載PLC控制分系統(tǒng)信息并發(fā)送給中心調(diào)度分系統(tǒng);實時顯示對應車號座位打中靶模分數(shù);實現(xiàn)叩動扳機或按鈕音效、其它動作音效。
車載PLC運動控制分系統(tǒng)
通過西門子的S7_200 PLC控制伺服電機,控制游藝小車的行走、旋轉(zhuǎn)、定位、防撞等動作,自動探測位置實現(xiàn)防碰撞、自動上報游藝小車當前運行狀態(tài)等。
動漫效果與光機電控制分系統(tǒng)
由中心調(diào)度分系統(tǒng)通過CAN控制總線下發(fā)動漫播放控制指令,接收區(qū)域控制器輸出的道具控制信號控制機電動作效果,執(zhí)行道具相應特定的聲光電效果;實現(xiàn)各場景機電控制動作。
區(qū)域道具動作控制分系統(tǒng)
接收/處理車載通信分系統(tǒng)發(fā)射的紅外激光編碼信息;通過CAN總線向中心調(diào)度分系統(tǒng)發(fā)送計分信息,接收中心調(diào)度分系統(tǒng)的控制指令;響應區(qū)域控制器輸出信號的動作及燈光特效、音響效果;每個區(qū)域能容納至少各20個輸入輸出I/O口(I口光電隔離,O口繼電器)。
通信網(wǎng)絡的組成
本系統(tǒng)有機地將CAN總線與RF無線通信有機結合在一起,實現(xiàn)射擊過程的有效互動。
基于nRF905主從式無線局域網(wǎng)通信
系統(tǒng)由一個中心控制設備(中心調(diào)度分系統(tǒng)主通信模塊)及8個節(jié)點設備(游藝小車)組成[2],中心設備PC機使用全雙工USB-UART串口與主模塊通信,主模塊與各節(jié)點模塊傳輸無線數(shù)據(jù)。根據(jù)網(wǎng)絡協(xié)議,數(shù)據(jù)傳輸采用半雙工的點對點方式或廣播的方式。節(jié)點模塊可根據(jù)接收的數(shù)據(jù)進行相應的顯示、控制操作,并可通過UART與下位機PLC進行通信,如圖2所示。
圖2 基于nRF905主從式無線局域網(wǎng)通信結構示意圖
為此,定義用戶數(shù)據(jù)內(nèi)容如下:用戶數(shù)據(jù)包括4位的狀態(tài)字X和Data數(shù)據(jù):狀態(tài)字X的高兩位用于控制數(shù)據(jù)發(fā)送方向,如X高兩位為00表示中心控制設備向節(jié)點設備發(fā)送顯示數(shù)據(jù),此時低兩位為屏幕ID,用于進行分屏顯示,顯示內(nèi)容為Data數(shù)據(jù);如X高兩位為01,低兩位備用,表示中心控制設備向節(jié)點設備發(fā)送控制數(shù)據(jù)Data,節(jié)點設備可通過UART將Data數(shù)據(jù)送至下位機PLC;如X高兩位為10,低兩位備用,表示節(jié)點設備向中心控制設備發(fā)送來自下位機PLC串口的Data數(shù)據(jù)。
基于CAN總線的道具動作多址通信
如圖3所示,CAN總線通信網(wǎng)絡中每個道具作為獨立的CAN節(jié)點,通過PIC18F4580的CAN接口掛在CAN總線上,CAN總線各個節(jié)點與主控器連成一體,利用CAN通信協(xié)議實現(xiàn)各節(jié)點間分區(qū)域的數(shù)據(jù)交換與信息處理[3]。
圖3 CAN總線通信結構示意圖
中心調(diào)度程序的設計與實現(xiàn)
中心調(diào)度程序采用面向?qū)ο蟮脑O計方法,開發(fā)語言使用Visual Basic,后臺數(shù)據(jù)庫使用SQL-SERVER 2000,如圖4所示。
圖4 中心調(diào)度程序結構示意圖
根據(jù)系統(tǒng)功能要求不同,分為射擊分數(shù)顯示客戶端程序、動漫播放控制客戶端程序,中心調(diào)度服務器程序和后臺數(shù)據(jù)庫。程序之間通過Winsock進行局域網(wǎng)數(shù)據(jù)通信,CAN總線和nRF905無線射頻的主控制器通過UART-USB模塊與調(diào)度中心程序進行數(shù)據(jù)通信。
基于Winsock的網(wǎng)絡通信程序設計
使用Winsock控件時可以使用兩種協(xié)議:TCP協(xié)議和UDP協(xié)議,本系統(tǒng)采用TCP協(xié)議,分別建立客戶應用程序和服務器應用程序。
在創(chuàng)建客戶應用程序時,必須知道服務器計算機名或其IP地址(存于RemoteHost屬性)、及服務器計算機進行偵聽的端口(存于RemotePort屬性),然后調(diào)用Connect方法。
創(chuàng)建服務器應用程序時,就應相應設置一個偵聽端口(LocalPort屬性)并調(diào)用Listen方法。當客戶機需要連接時(connect),就會發(fā)生ConnectionRequest事件。由于系統(tǒng)有多個客戶端,因此要動態(tài)管理客戶端的各個連接請求,參考如下程序設計:
Private sub sckserver_connectrequest(Index as Integer,Byval requestid as long)
dim sip as string
dim I as integer
sip=sckserver(0).RemoteHostIP ‘獲得登錄者的IP地址
I=1
Do while I《=sckserver.ubound ’檢查是否已經(jīng)有該地址的記錄
If sckserver(I).RemoteHostIP=sip then ‘如有,不必加載新的控件
Sckserver(I).Accept requestid
Exit sub
End if
I=I+1
Loop
Load sckserver(I) ’否則,加載新的控件
Scksrver(I).accept requestID
End sub
為了完成連接,在ConnectionRequest事件中調(diào)用Accept方法。建立連接后,任何一方計算機都可以發(fā)送、接收對方數(shù)據(jù)。發(fā)送數(shù)據(jù)時,需調(diào)用SendData方法。當接收到數(shù)據(jù)時,會發(fā)生DataArrival事件,調(diào)用DataArrival事件中的GetData方法就可以獲得對方傳送的數(shù)據(jù)。
基于MSComm的串口通信程序設計
MSComm通信控件提供了一系列標準通信命令的接口,它允許建立串口連接,可以連接到其他通信設備、還可以發(fā)送命令、進行數(shù)據(jù)交換以及監(jiān)視和響應在通信過程中可能發(fā)生的各種錯誤和事件,從而可以用它創(chuàng)建全雙工的、事件驅(qū)動的、高效實用的通信程序。
在程序加載過程中,由于可能存在無線和CAN兩種通信方式,所以在Form_Load事件中要進行初始化處理,參考以下程序:
‘CAN總線主控制器初始化程序
For i = 0 To Comm_Port_Num - 1
If CommSetups(i).commType = “CAN” Then
MSComm1.CommPort =CInt(Mid(Trim(CommSetups(i).commID), 4))
If MSComm1.PortOpen Then MSComm1.PortOpen = False
MSComm1.Settings = Trim(CommSetups(i).commSetting)
MSComm1.PortOpen = True ‘打開串行口
Text1.Text = “CAN通信端口初始化成功” & vbCrLf
Exit For
End If
Next i
‘nRF905射頻主控制器初始化程序
For i = 0 To Comm_Port_Num - 1
If CommSetups(i).commType = “COM” Then
MSComm1.CommPort =CInt(Mid(Trim(CommSetups(i).commID), 4))
If MSComm1.PortOpen Then MSComm1.PortOpen = False
MSComm1.Settings = Trim(CommSetups(i).commSetting)
MSComm1.PortOpen = True ’打開串行口
Text1.Text = “nRF905端口初始化成功” & vbCrLf
Exit For
End If
Next i
在數(shù)據(jù)接收過程中,MSComm提供了兩種處理通信問題的方法,一是事件驅(qū)動方法,一是查詢法。本系統(tǒng)采用事件驅(qū)動方法,當有新字符到達或端口狀態(tài)改變,或發(fā)生錯誤時,MSComm控件將觸發(fā)OnComm事件,而應用程序在捕獲該事件后,通過檢查MSComm控件的CommEvent屬性可以獲知所發(fā)生的事件或錯誤,從而采取相應的操作。
當需要發(fā)送數(shù)據(jù)時,通過調(diào)用MSComm的Output方法實現(xiàn)。
結論
作為中山市新一輪產(chǎn)業(yè)結構重點支持發(fā)展產(chǎn)業(yè)之一的游戲游藝產(chǎn)業(yè),為適應市場營銷需求多元化結構及綜合性游玩方式的新需求,本系統(tǒng)由中山市金馬游藝機有限公司和電子科技大學中山學院聯(lián)合開發(fā)并于2008年下半年成功交付使用。本系統(tǒng)是集多項先進技術于一體,突破游藝和動漫原有的產(chǎn)業(yè)邊界,在傳統(tǒng)游藝機項目的基礎上首創(chuàng)性地將動漫與機電控制、有線與無線組網(wǎng)等技術有機地結合在一起,設計完成一種新型交互式射擊游藝控制系統(tǒng)。
責任編輯:gt
評論
查看更多