[西门子] SCL编程实例100例-116-猜数字游戏

[复制链接]
查看96626 | 回复0 | 2024-4-17 20:57:35 | 显示全部楼层 |阅读模式
1 | 题目



编写一个猜数字的游戏,按下开始按钮,PLC生成一个对玩家不可知的0-100之间的随机整数,玩家有6次机会猜测该数字,无论猜大还是猜小,系统均会有提示,如果在6次机会内猜中则成功,否则失败。

2 | 设计分析



程序开始时PLC自动生成一个0-100之间的随机数,将玩家猜测的数字(输入的数字)和该随机数做比较,如果输入数大于该随机数,系统提示猜大了,尝试次数减1,如果输入数小于该随机数,系统提示猜小了,尝试次数减1,如果在6次机会内猜中则成功,否则失败。注意要设计一个检测输入数的变化的功能作为触发数字比较的条件。

3 | 创建功能或功能块



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

4 | 定义接口变量



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


定义布尔型输入变量start:游戏开始;

定义布尔型输入变量reset:游戏重置;

定义布尔型静态变量statRun:运行标志位;

定义整型静态变量statRandomNum:PLC自动生成的随机数;

定义整型静态变量statGuessNum:玩家猜测的数字;

定义整型静态变量statCount:尝试次数;

定义整型静态变量statResult:猜测结果;

定义多重背景变量instDataChange:检测输入值的变化。

5 | 程序代码



编写程序代码。如下图:



猜测结果为1表示猜大了,2表示猜小了,3表示尝试失败,4表示猜对了。需要注意对于0-100范围限制的设计方法,即当输入值超过0-100的范围时,将猜测结果设置为0,表示输入错误,请重新输入,不占用尝试次数。

6 | 代码测试



在循环OB中调用FB-“GuessNumber”,调用时会自动创建背景数据块,命名为“InstGuessNumber”,该背景数据块可以用来监视和修改数据。本例中使用了HMI进行模拟演示。如下图:


点击开始按钮开始游戏,在IO域中输入猜测的数字,一共有6次机会,猜中则笑到最后。

7 | 总结



学习上升沿语句的使用;

学习IF..ELSE语句的使用;

学习FC或FB在功能块FB中的调用方法;
学习功能块FB在循环组织块OB中的调用方法。



分享 | 咨询 | 合作 | 共赢

本帖子中包含更多资源

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

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

本版积分规则