俄罗斯方块应用程序的PLC设计与实现

2022-06-23 04:22:16雷红华杨国富
襄阳职业技术学院学报 2022年3期
关键词:数组方块应用程序

雷红华,杨国富

(襄阳职业技术学院,湖北 襄阳 441050)

随着大规模集成电路的发展,以微处理器为核心的可编程序控制器(PLC)得到了迅猛的发展,它在现代工业的应用也越来越广泛,PLC也成为了各大高职院校制造类相关专业必修的专业核心能力课程。面对高职学生自控性较差、班级学生组成结构复杂、水平层次参差不齐、学习激情不高的特点,利用博途PLC程序、HMI人机界面和一些外部配件设计完成了俄罗斯方块应用程序,通过制作这个游戏项目,让学生较好的掌握PLC工作原理、工作方式、流程控制和应用编程等,将被动学习变为主动学习。

俄罗斯方块最早是由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的一款经典游戏,[1]娱乐性强,规则简单,项目的设计难度适中,既培养学习人员的编程思维,又使自我效能感获得增强。[2]

一、俄罗斯方块应用程序的总控制流程

(一)俄罗斯方块应用程序的设备条件

俄罗斯方块应用程序可一个人独立完成,其所需设备为一台西门子S7-1200系列PLC 1212C DC/DC/DC,及一个配套的HMI KPT 900 Basic,四个外部按钮,一个三色灯。PLC作为一个处理器处理所有的数据,HMI作为一个输入输出设备既可以用来显示画面,也可以采集玩家的操作,并移交于PLC处理。整套设备特别要注意通信类型的匹配。

(二)俄罗斯方块应用程序的基本组成

游戏中所有的俄罗斯方块都是由四个正方形块在一个4*4的矩形中组合而成的,共有七种,加上每个方块都有四个不同的方向(2*2的矩形方块四个不同方向形状一致也算四个)共有28种。游戏操作是在一个10*20的矩形中进行的,至少需要四个功能键:左移、右移、旋转、快速下落,以及一些基础的“开始、结束、暂停键”等,而且游戏界面需显示操作者当前得分。

所有画面和动画的显示都借助HMI完成,添加200个矩形对象排列成10*20的状态,并为其添加相应的动画,将200个矩形动画与显示数组一一关联起来。所有的实体与虚体都被存储在对应的数组里,数组显示为实体与虚体的总合,即显示所有的实体和虚体,虚体中的数据是根据方块的位置和方块的模型生成的。

(三)俄罗斯方块应用程序的操作原理

该游戏的基本规则是通过一定的旋转和移动来放置方块,并根据规则消除满行。[3]在按下开始键后,系统会随机生成一个方块,并随机生成一个位置。每个下落周期游离的方块(以下简称“虚体”)都会下落一次,在下落的过程中,可以进行相应的移动和旋转操作,每个下落周期结束后,系统都会判断虚体是否已经碰触底部,或者是已经固定的方块(以下简称“实体”)。若已触及底部或实体则当前的游离周期(从模型生成至虚体到转化为实体称一个游离周期)结束,接着所有的虚体都转化成实体。若实体超出了上边界,则游戏被结束,所有实体和虚体都会被清空。若游戏未结束,则从下往上判断是否存在一整行的实体,若存在,则消除该行,将该行以上的实体都下移一行,然后从该行继续判断,若不存在,则向上判断,直至判断完所有实体。判断完成后生成下一个随机模型,开始下一次游离周期。在平移或旋转操作后,若虚体超出边界或与实体重合,则该次操作是不被允许的,虚体不会发生任何改变。

(四)俄罗斯方块应用程序的总流程控制框图

玩家通过外部的开始按钮启动游戏,游戏一开始系统就会自动生成一个随机模型和一个随机位置,然后开始一个游离周期,在游离周期过程中,玩家可以左右移动及旋转操作,也可以通过外部按钮暂停游戏。在暂停期间外部的三色灯黄色闪烁,游戏进行时三色灯绿色亮起,当游戏结束时红灯会亮起。若玩家想要终止游戏也可以通过一个外部按钮来结束当前的游戏。俄罗斯方块应用程序总流程控制框图如图1所示。

图1 总控制流程框图

二、俄罗斯方块应用程序的模型生成

(一)方块模型的生成

如图2所示为一个俄罗斯方块,以右下角为低位,左上角为高位,每个方块都表示一个16位二进制数,将图2中16位二进制数转换为一个十进制整数1112,则这个整数就表示当前模型,同理制作另外27个模型,将28个模型存储在一个模型仓库数组中,相同方块不同方向的模型在存储时下标相差7,例如当前模型被存储在了模型仓库数组第一个位置,则其模型的下一个方向应该是由上一个模型顺时针旋转90度后存储到数组第八个,用同样的方法存储到第十五个、第二十二个。

图2 方块模型

(二)随机模型的生成

由于TIA博途中没有自带有关的随机函数,需自行设计一段生成随机数的程序,利用一个函数RD_SYS_T读取系统的时间。再利用当前时间的纳秒数值除1 000后加上秒数并除28求余(除1000是为了防止读取的纳秒数值后3位都为0,加上秒数是为了增加随机性,以达到生成随机数的目的),将求取的余数作为下标。接着建立一个长度为17位模型数组,即在模型数组中前16位数表示模型的形状,最后一位数值则表示模型在模型仓库中的位置既下标,同样也可以表示种类号,即在模型仓库中抽取一个随机模型,将随机模型对应的十进制整数依次除2求余,形成一个16位二进制数,若余数为1,则将模型的种类号存储到模型数组当中。七种方块对应七个种类号,不同的种类号会令方块显示不同的颜色,通过这个方法可以再次将图2的模型表示了出来。同时,在图上显示方块,除了需要一个确定形状的模型,还需要一个位置。再次使用随机抽取模型的方法,在“随机位置”数组中任意取一个位置作为模型位置。以模型左上角与模型位置为较准点等比例将模型映射到虚体(可变化可移动)上作为一个确定的方块,因每个周期模型位置都会下降一行(模型左上角是与模型位置重合的,一行有十个方块,将模型位置+10,正好将模型位置下移一行),所以整个方块也会下降一行。

三、俄罗斯方块应用程序的功能实现

(一)左、右移动功能的实现

因为确定了模型位置,所以在移动过程中只需移动模型位置,整个方块的位置也会随之改变。当HMI收到左移的指令时,PLC会判断虚体是否已经接触左边界或虚体左侧存在实体。若已接触左边界或左侧存在实体那么条件不满足,不执行移动。若模型位置-1则向左移动一格;右移同理。

(二)旋转功能的实现

在制作模型的过程中,已将一种模型的四个不同方向方块存储在了模型仓库数组中,并且各个不同方向模型在数组中下标相差7。按下旋转命令后,则将模型数组的最后一个数值加上7后除28求余(防止下标越界),既可得到新的模型下标,通过新的模型下标即可在模型仓库数组中得到新的模型,用上面相同的方法将模型存储到模型数组的前16位中。这样新的模型数组中的模型就是旋转后的模型了。若旋转后的虚体与实体相重合,或超出边界,则旋转的条件不满足,模型会被还原到旋转之前的样子。

(三)下落及其完成判定

利用一个定时器,每隔一段时间就会触发一次下落的程序。下落前会进行一次判断,判断是否虚体已经接触底部或者下方存在实体。若未接触或下方不存在实体,则会触发一次下落,既将模型位置+10。若已接触底部或下方存在实体,则会将虚体转换为实体,既将虚体中所有不为0的值赋值给实体,然后从下往上判断实体中是否存在一整行的情况,若存在则从该行开始,依次将上一行的值赋值给下一行。然后继续判断该行,若不存在,则向上判断直至判断完全是实体。完成后,再次生成一个随机模型和随机模型位置,继续下一个游离周期。

四、俄罗斯方块应用程序的PLC编程与HMI人机界面

(一)PLC程序的编写

以模型生成的程序为例,首先添加一个FC的函数块,更改名字为“模型生成”,更改编程语言为SCL语言。新建两个DB块,一个命名为“命令”,一个命令为“数据”。在“数据”块中添加变量如图3如示,在“命令”块中添加变量如图4所示。

图3 数据块中的变量

添加完所有程序数据后,便可开始编程了,生成模型程序如图5所示。如图6所示完成的PLC主控程序,按下按钮1开始键后,“开始”、“生成模型”变量会被置位。当“生成模型”变量被置位后,生成模型函数中对应的程序会被触发,首先通过读取时间,再将读取到的时间做一个运算获得一个随机数,求余数后保存至模型数组最后一个值。再通过这个值在模型仓库中获取相应的模型,并存储到一个临时变量#m中,再将#m依次除二求取余数,若求取的余数为1则将种类号存储到模型数组相应的位置。并把“下一个”置位以启动其他的程序,然后将“生成模型”复位。

图4 命令块中的变量

参照上述的各个功能的描述和解释,依次编写所有的函数块,并将所有函数块在主程序中调用。并在主程序中编写外部按钮和三色灯的程序。实现按下按钮1后置位“生成模型”和“开始”,按下按钮2后暂停游戏,第二次按下后继续游戏,既按下时将“暂停”取反,按下按钮3后结束游戏,既置位“停止”。当“暂停”为1时,三色灯黄灯闪烁,当“开始”为1并且“暂停”不为1时绿灯常亮,当“开始”“暂停”都不为1时红灯常亮。

(二)HMI人机界面的设计

完成PLC的程序编写后,需布局HMI中的画面及一些事件。设计一个如图7所示的画面。

图7 HMI人机界面图

图8 方块颜色设定

并为每个方块都添加图8所示多种不同颜色的动画,关联对应变量,即可让不同的方块显示不同的颜色。添加“GAME OVER”的字样,设置其可见性,仅在游戏结束时出现。添加四个操作按键并关联对应的事件,以及四个流程的控制键及其变量关联。添加两个“I/O域”用于显示难度和得分。在完成PLC程序和HMI的动画和事件后,可将其下载至PLC和HMI中查看效果,点击开始键后,整个游戏便可开始运行了。

五、结论

职业技术教育是通过教学使学生具有扎实的理论知识和熟练的动手操作能力,为企业培养生产一线上的复合型技能人才。[4]针对于制造类应用性、实践性较强的PLC课程教学,既以企业典型工作任务或者项目为载体,开展“教学做一体化”课堂教学,让课程理论与企业实践达到无缝对接。同时,又利用现有基础开发些益智类、趣味性强的小游戏或创客项目,调动学生积极性,培养学生的开发能力,达到以能力为本位,创客教育活动为载体,培养创新型机器人人才的目的,[5]整体提升工业机器人技术专业人才培养的质量。

猜你喜欢
数组方块应用程序
有多少个方块
JAVA稀疏矩阵算法
电脑报(2022年13期)2022-04-12 00:32:38
不一样的方块桥
JAVA玩转数学之二维数组排序
电脑报(2020年24期)2020-07-15 06:12:41
谜题方块
删除Win10中自带的应用程序
电脑报(2019年12期)2019-09-10 05:08:20
寻找勾股数组的历程
关闭应用程序更新提醒
电脑迷(2012年15期)2012-04-29 17:09:47
VB数组在for循环中的应用
考试周刊(2012年88期)2012-04-29 04:36:47
三星电子将开设应用程序下载商店