[西门子] SCL编程实例100例-118-抢30游戏

[复制链接]
查看263 | 回复0 | 2024-5-16 07:49:37 | 显示全部楼层 |阅读模式
1 | 题目



编写一个程序实现抢30游戏的功能。游戏规则:两人轮流报数,每人每次至少报1个数,最多报3个数。从1到30按顺序连续报数,谁先报到30,谁就获胜。本例练习中,定义两个角色,分别是PLC和玩家。
bi

2 | 设计分析



按下角色按钮PLC时,PLC会调用随机数生成函数,并生成一个1-3的随机数,如果随机数是1,则PLC自动选择1个数字,如果随机数是2或3,则PLC自动选择连续的2个或3个数字。按下角色按钮玩家时,玩家可以通过触摸屏选择1-3个连续的数字,然后再通过角色按钮把选择权交给PLC。



3 | 创建功能或功能块



创建功能块FB,命名为“GrabThirty”。




4 | 定义接口变量



具体接口变量定义见下图:

定义布尔型输入变量reset:游戏重置;
定义布尔型输入变量selectPlayer:选择玩家角色;
定义布尔型输入变量selectPLC:选择PLC角色;
定义布尔型输出变量winFlag:输赢结果标志;
定义整型静态变量statRandom:存储PLC的随机选择结果;
定义布尔型一维数组静态变量statSelectEnable:可供选择的数字;
定义布尔型一维数组静态变量statNumStatus:数字的选择状态;
定义布尔型多重背景实例一维数组静态变量inst1KeyStSp1:选择和取消选择数字。



5 | 程序代码



编写程序代码。如下图:


算法中要注意每次只能选择少于3个的连续数字的处理方法,特别是第1个和后3个数字的处理方法,另外玩家可以反悔选择某个数字。该程序选择权是通过两个角色按钮来实现的,如果炮友儿有兴趣,可以设计自动角色切换功能。



6 | 代码测试



在循环OB中调用FB-“GrabThirty”,调用时会自动创建背景数据块,命名为“InstGrabThirty”,该背景数据块可以用来监视和修改数据。本例中使用了HMI进行模拟演示。如下图:
通过PLC和玩家两个角色选择按钮来切换游戏的选择权,只能选择连续的1-3个数字,按下重新开始按钮,游戏将复位。本例中,玩家最后选中了数字30,玩家获胜。



7 | 总结



学习上升沿语句的使用;

学习下降沿语句的使用;
学习IF..ELSE语句的使用;
学习FOR循环语句的使用;
学习EXIT指令在FOR循环语句中的作用;
学习FC或FB在功能块FB中的调用方法;
学习功能块FB在循环组织块OB中的调用方法。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则