新型交互式射击游艺控制系统设计与实现
扫描二维码
随时随地手机看文章
引言
随着人们生活水平的提高,人们愈来愈追求多样化和个性化的休闲娱乐方式,除了“求新、求奇、求特、求异”之外,大家更加注重体验参与式的游艺活动,为了应对这种消费需求偏好的改变,提升企业自身竞争力,本系统将先进的激光多址编码[1]、RF无线射频、CAN总线、动漫与光机电控制等技术相结合,设计一种基于光机电与动漫结合的新型交互式射击游艺系统。
目前,比较好的射击游艺系统有迪斯尼公司的“巴斯光年星际历险”,另一种类似的游乐设施有“Buzz Light year’s Space Ranger Spin”,它们一直以来都是主题乐园内深受欢迎的游乐设施之一。但以上两种系统都缺少游艺过程和调度中心控制协作的功能,没有上位机控制软件,不能存储分析射击数据。本系统在集成上述系统先进技术和创意理念的基础上,克服了上述技术问题,通过有线与无线通信的有机结合,从技术到创意都有较大的提高,使游客可享受到更大的游艺乐趣。
控制系统的设计与实现
系统主要由中心调度分系统、游艺小车通信分系统、区域道具动作机电控制分系统、车载PLC运动控制分系统、动漫效果与光机电控制分系统组成,如图1所示。
图1 系统组成结构示意图
中心调度分系统
通过CAN总线与区域道具动作机电控制分系统进行双向数据通信实现计分与道具机电动作控制;与游艺小车通信分系统采用基于无线射频模块nRF905的主从式双向数据通信实现动漫效果与光机电控制,实现射击过程的实时计分显示、动漫场景与光机电动作协调控制。中心调度分系统接收/处理各区域控制分系统计分和检测开关状态、车载分系统初始化等信号;显示车载系统各车子网络连接状态;通过人工方式向车载分系统发送启动、停车等控制指令;自动向车载分系统发送实时分数信息;控制播放数字化动漫影音信息,并向车载分系统发送控制信号(该信号由各车子行走控制系统解释并执行车子动作);处理分数排行及历史纪录、用户信息管理等;下客区显示屏播放即时分数、候客区显示屏播放历史纪录、预演区显示屏播放游戏短片及解说、区域控制区内投影机播放数字化动漫影片;能控制至少8个区域控制分系统(共110个控制点)。
游艺小车通信分系统
通过人工触发玩具手枪内的红外激光发射模块,向区域道具动作机电控制分系统发射多址编码信息,模拟射击过程,完成游客与现场道具的交互过程。接收/处理中心调度分系统的分数信息并显示;接收中心控制分系统的启动、停止和动作指令,并通过RS232数字接口通道透明地传输给车载PLC控制分系统;接收车载PLC控制分系统信息并发送给中心调度分系统;实时显示对应车号座位打中靶模分数;实现叩动扳机或按钮音效、其它动作音效。
车载PLC运动控制分系统
通过西门子的S7_200 PLC控制伺服电机,控制游艺小车的行走、旋转、定位、防撞等动作,自动探测位置实现防碰撞、自动上报游艺小车当前运行状态等。
动漫效果与光机电控制分系统
由中心调度分系统通过CAN控制总线下发动漫播放控制指令,接收区域控制器输出的道具控制信号控制机电动作效果,执行道具相应特定的声光电效果;实现各场景机电控制动作。
区域道具动作控制分系统
接收/处理车载通信分系统发射的红外激光编码信息;通过CAN总线向中心调度分系统发送计分信息,接收中心调度分系统的控制指令;响应区域控制器输出信号的动作及灯光特效、音响效果;每个区域能容纳至少各20个输入输出I/O口(I口光电隔离,O口继电器)。
通信网络的组成
本系统有机地将CAN总线与RF无线通信有机结合在一起,实现射击过程的有效互动。
基于nRF905主从式无线局域网通信
系统由一个中心控制设备(中心调度分系统主通信模块)及8个节点设备(游艺小车)组成[2],中心设备PC机使用全双工USB-UART串口与主模块通信,主模块与各节点模块传输无线数据。根据网络协议,数据传输采用半双工的点对点方式或广播的方式。节点模块可根据接收的数据进行相应的显示、控制操作,并可通过UART与下位机PLC进行通信,如图2所示。
图2 基于nRF905主从式无线局域网通信结构示意图
为此,定义用户数据内容如下:用户数据包括4位的状态字X和Data数据:状态字X的高两位用于控制数据发送方向,如X高两位为00表示中心控制设备向节点设备发送显示数据,此时低两位为屏幕ID,用于进行分屏显示,显示内容为Data数据;如X高两位为01,低两位备用,表示中心控制设备向节点设备发送控制数据Data,节点设备可通过UART将Data数据送至下位机PLC;如X高两位为10,低两位备用,表示节点设备向中心控制设备发送来自下位机PLC串口的Data数据。
基于CAN总线的道具动作多址通信
如图3所示,CAN总线通信网络中每个道具作为独立的CAN节点,通过PIC18F4580的CAN接口挂在CAN总线上,CAN总线各个节点与主控器连成一体,利用CAN通信协议实现各节点间分区域的数据交换与信息处理[3]。
图3 CAN总线通信结构示意图
中心调度程序的设计与实现
中心调度程序采用面向对象的设计方法,开发语言使用Visual Basic,后台数据库使用SQL-SERVER 2000,如图4所示。
图4 中心调度程序结构示意图
根据系统功能要求不同,分为射击分数显示客户端程序、动漫播放控制客户端程序,中心调度服务器程序和后台数据库。程序之间通过Winsock进行局域网数据通信,CAN总线和nRF905无线射频的主控制器通过UART-USB模块与调度中心程序进行数据通信。
基于Winsock的网络通信程序设计
使用Winsock控件时可以使用两种协议:TCP协议和UDP协议,本系统采用TCP协议,分别建立客户应用程序和服务器应用程序。
在创建客户应用程序时,必须知道服务器计算机名或其IP地址(存于RemoteHost属性)、及服务器计算机进行侦听的端口(存于RemotePort属性),然后调用Connect方法。
创建服务器应用程序时,就应相应设置一个侦听端口(LocalPort属性)并调用Listen方法。当客户机需要连接时(connect),就会发生ConnectionRequest事件。由于系统有多个客户端,因此要动态管理客户端的各个连接请求,参考如下程序设计:
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 '检查是否已经有该地址的记录
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事件中调用Accept方法。建立连接后,任何一方计算机都可以发送、接收对方数据。发送数据时,需调用SendData方法。当接收到数据时,会发生DataArrival事件,调用DataArrival事件中的GetData方法就可以获得对方传送的数据。
基于MSComm的串口通信程序设计
MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备、还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工的、事件驱动的、高效实用的通信程序。
在程序加载过程中,由于可能存在无线和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
在数据接收过程中,MSComm提供了两种处理通信问题的方法,一是事件驱动方法,一是查询法。本系统采用事件驱动方法,当有新字符到达或端口状态改变,或发生错误时,MSComm控件将触发OnComm事件,而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。
当需要发送数据时,通过调用MSComm的Output方法实现。
结论
作为中山市新一轮产业结构重点支持发展产业之一的游戏游艺产业,为适应市场营销需求多元化结构及综合性游玩方式的新需求,本系统由中山市金马游艺机有限公司和电子科技大学中山学院联合开发并于2008年下半年成功交付使用。本系统是集多项先进技术于一体,突破游艺和动漫原有的产业边界,在传统游艺机项目[4]的基础上首创性地将动漫与机电控制、有线与无线组网等技术有机地结合在一起,设计完成一种新型交互式射击游艺控制系统。