贪吃蛇小程序源代码
软件:西门子 TIA.V15
编程语言:SCL
作者:狂奔的蜗牛
时间:2020-8-20
功能:贪吃蛇小游戏
介绍:由本人亲自编写的使用西门子 S7-1500 PLC 的贪吃蛇小游戏,可以
模拟仿真,非常适用初学者学习 SCL 语言,欢迎大家下载学习。
一、逻辑控制程序
//=================================================================
============
// 作者: 狂奔的蜗牛
// (c)Copyright 2020-8
// 软件版本: TIA Portal V51 Update 1
// PLC: PLC (S7-1200 / S7-1500)
// 功能: 逻辑控制程序
//
==================================================================
===========
REGION 启动
IF "Logic_D".Start THEN
"Logic_D".GameOver := false;
"Logic_D".Grade := 0;
"Logic_D".Start := false;
#Start_OK1 := TRUE;
"Logic_D".Pause := FALSE;
"Data_B".reference := "Data_B".reference_r;
#i_reference := 2;
#Q_reference := 2;
"Logic_D".b1 := TRUE;
"Data_B".reference[#i_reference].X_begin := 1;
"Data_B".reference[#i_reference].X_Over := 3;
"Data_B".reference[#i_reference].Y_begin := 5;
"Data_B".reference[#i_reference].Y_Over := 5;
"Data_B".reference[#i_reference].state := 4;
#state := 4;
END_IF;
IF "Logic_D".Pause THEN
#Start_OK := FALSE;
ELSIF NOT "Logic_D".Pause AND #Start_OK1 THEN
#Start_OK := TRUE;
END_IF;
END_REGION
REGION 按键触发
///////////////////////////////上//////////////////////////////////
IF "Logic_D".Up_Bt AND #state <> 1 AND #state <> 2 AND NOT #UpData_Reference THEN//上
#state := 1;
#UpData_Reference := TRUE;
END_IF;
///////////////////////////////下//////////////////////////////////
IF "Logic_D".Down_Bt AND #state <> 2 AND #state <> 1 AND NOT #UpData_Reference THEN//
下
#state := 2;
#UpData_Reference := TRUE;
END_IF;
///////////////////////////////左//////////////////////////////////
IF "Logic_D".Left_Bt AND #state <> 3 AND #state <> 4 AND NOT #UpData_Reference THEN//左
#state := 3;
#UpData_Reference := TRUE;
END_IF;
///////////////////////////////右//////////////////////////////////
IF "Logic_D".Right_Bt AND #state <> 4 AND #state <> 3 AND NOT #UpData_Reference THEN//
右
#state := 4;
#UpData_Reference := TRUE;
END_IF;
IF #UpData_Reference AND #R1.Q THEN
#UpData_Reference := FALSE;
#i_reference := #i_reference + 1;
#i_number := #i_number + 1;
IF #i_reference >= 41 THEN
#i_reference := 2;
END_IF;
IF #i_reference = 2 THEN
#i_reference_1 := 40;
ELSE
#i_reference_1 := #i_reference - 1;
END_IF;
///////////////////////////////////上//////////////////////////////////////////////
IF #state = 1 THEN
"Data_B".reference[#i_reference].state := 1;
//更新 X 坐标
IF "Data_B".reference[#i_reference_1].state = 3 THEN
"Data_B".reference[#i_reference].X_begin :=
"Data_B".reference[#i_reference_1].X_begin;
"Data_B".reference[#i_reference].X_Over :=
"Data_B".reference[#i_reference_1].X_begin;
ELSIF "Data_B".reference[#i_reference_1].state = 4 THEN
"Data_B".reference[#i_reference].X_begin :=
"Data_B".reference[#i_reference_1].X_Over;
"Data_B".reference[#i_reference].X_Over :=