[西门子] TIA博途SCL编程学习47_狼追兔子

[复制链接]
查看150 | 回复0 | 2024-4-16 09:03:08 | 显示全部楼层 |阅读模式
1 | 题目


一只兔子躲进了10个环形分布的洞中的一个。狼在第1个洞中没有找到兔子,就隔1个洞,到第3个洞去找,也没有找到,就隔2个洞,到第6个洞去找,以后每次多1个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能藏在哪个洞中?编写程序求解。



2 | 设计分析


首先定义一个数组#statCaves[0..9],其数组元素为#statCaves [0]、#statCaves [1]、#statCaves [2]…#statCaves [9],这10个数组元素分别表示10个洞,初值均置为1(TRUE)。接着使用“穷举法”来找兔子,通过循环语句进行穷举,设最大寻找次数为100次。由于洞只有10个,因此第n次查找对应第n%10个洞,如果在第n%10个洞中没有找到兔子,则将数组元素#statCaves[n%10]置0(FALSE)。当循环结束后,再检查#statCaves数组各元素(各个洞)的值,若其值仍为1(TRUE),则兔子可能藏身于该洞中。



3 | 创建功能或功能块


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




4 | 定义接口变量


具体接口变量定义见下图:
定义数据类型为整型数的一维数组变量#resultQs作为兔子可能在哪个洞中的结果输出。



5 | 程序代码


编写程序代码。如下图:


程序中限定了狼找兔子的最大次数,即循环次数为100次,当然现实中狼也不可能永远守在兔子窝旁边。



6 | 代码测试


在循环OB中调用FB-“WolfChaseRabbit”,调用时会自动创建背景数据块,命名为“InstWolfChaseRabbit”,该背景数据块可以用来监视和修改数据。转至在线并监控程序。如下图:


得到结果为:兔子可能藏在2、4、7、9号洞中。



7 | 总结


学习使用FOR循环语句;
学习使用IF条件语句;
学习一维数组的使用方法;
学习组合赋值的使用方法。
- END -






通过S7-1200与第三方设备实现自由口通信

西门子S7-1200紧凑型PLC在当前的市场中广泛使用的,由于其性价比高,所以常被采用小型自动化控制设备的控制器,这也是经常与第三方的设备(扫描枪) ,打印机等设备进行通讯。因为没有第三方的设备,这里就以超级终端引入了自由口通讯。

01
控制系统原理


(图1:控制系统原理)


02
硬件需求

S7-1200 PLC目前共有3种类型的CPU:
1)S7-1211C CPU。
2)S7-1212C CPU。
3)S7-1214C CPU。
这两种类型的CPU都可以连接三个串口通信。模版。
本例中使用的PLC硬件为:
1)PM1207电源(6EP1 332-1SH71)
2)S7-1214C(6ES7 214 -1BE30 -0XB0)
3)CM1241 RS232(6ES7 241 -1AH30 -0XB0)


03
软件需求


1)编程软件Step7 Basic V10.5(6ES7 822-0AA0-0YA0)


04
布局


我们通过按照惯例的实际操作来介绍如何在Step7 Basic V10.5中配置S7-1214C和超级终端通信。
点击桌面上的“ Totalally Integrated Automation Portal V10”图标,如下图:
(图2:新建S7 -1200项目)


首先需要选择“创建新项目”选项,然后在“项目名称:”里输入PTP;在“路径:”中,将项目的存储路径设置为“ C:\”;单击“创建”,这样就创建了一个文件PTP的新项目。创建后的窗口如下图所示:
(图3:新建项目后)


点击门户预览左下角的“ Project View”切换到项目预览下,如下图:
(图4:切换到项目)


切换到项目后,在“设备”标签下,单击“添加新设备”,在弹出的菜单中输入设备名称“ PLC_1”,并在设备列表中选择CPU的类型。选择后如下图:
(图5:PLC硬件配置)


插入CPU后,单击CPU左边的空槽,在右边的“ Catalog”里找到“ Communication”下一个的RS232模块,拖拽或双击此模块,这样就把把串行器插入到硬件配置里,然后就需要配置此后RS232模块硬件接口参数,选择RS232模块,在其下面的会出现该模块的硬件配置窗口,在属性窗口中就有两个选项,一个是“通用”;一个是“ RS232接口”。在“常规”里包括了此模块的“项目信息”和“命令信息”;而在“ RS232接口”里包括“项目信息”,“端口的配置”,“发送信息的配置”,“接收信息的配置”和“在这里我们选择“ RS232 interface”,在“端口”配置的选项里,进行的参数配置,波特率为:9600;校准方式:无;数据位为:8;停止位:1;硬件流控制:无;等待时间:1ms。
设置参数如下图:
(图6:RS232接口配置)


此时确认一下“硬件识别号”为11。然后,完成了硬件的配置,接下来需要编写串行通讯程序,在这里我们实现两个功能:一,S7-1200发送数据给超级终端;二,超级终端发送数据给S7-1200对于第一个功能:S7-1200发送数据给超级终端,则是S7-1200是数据的发送方,超级终端是数据的接收方,对于S7-1200需要编写发送程序;而对于超级终端则意味着,只要:超级终端程序,配置硬件接口参数与前面S7-1200的扩展参数即可。下面的步骤将具体介绍此功能实现的步骤:①,在PLC中编写程序,然后在主菜单(OB1)上,在OB1,在主程序中调用SEND_PTP功能块,如图所示:(SEND_PTP)在指令库下一个的扩展指令中通讯指令下一个)
(图7:调用发送功能块)


要对SEND_PTP赋值参数,首先需要创建SEND_PTP的背景数据块和发送缓冲数据块,双击“设备”->“ PLC_1” ————>“程序块” ————“添加新块”, DB_Send_PTP,选择DB块,在类型后选择“ SEND_PTP(SFB113)”
(图8:创建发送功能块的背景数据块)


插入背景DB后,再重新插入发送缓冲DB块,重复上面的步骤,只是在选择DB类型为“ Global DB”,并去掉“ Symbolic access only”选项勾(这样就可以将该DB块进行直接访问)建好这两个DB块后,,双击:DB_SEND_BUFF预先定义好要发送的数据,如下图所示:
(图9:在接收范围内中接收到的数据)


定义完发送上下文之后,接下来就可以对SEND_PTP赋值参数,赋值参数后如下图:
(图10:发送编程)


字符的开始地址是从第二个字节,而不是零字节开始,即是P#DB2.DBX2.0 Byte10而不是P#DB2.DBX0.0 Byte10,原因是由于S7-1200对串行的放置的格式造成的,S7-1200对串行的前两个字节的定义的第一字节是最大的字符长度,第二个字节是实际的字符长度接下来才是存放实际字符如下图:
(图11:字符串存储格式)


上面就完成了一个程序的编写,对项目进行编译;右击PLC_1项目在放置的菜单项中选择“ Complies ALL”选项,这样就对硬件与软件进行了编译,如下图:
(图12:编译项目)


编译且没有错误后就可以下载程序到PLC中,同样右击PLC_1项目,在弹出的菜单选择“下载到设备”。
②,用串口交叉线连接S7-1200的串口与计算机的串口,打开计算机的超级终端程序,并设置硬件扩展参数如下图:
(图13:超级终端的扩展设置)


③:OB1功能块在线监控程序,在变量监控表里强制M0.0为1,触发数据的发送,此时在超级终端就会接收到发送到该数据的数据,如下图:
(图14:在超级终端监控发送来的数据)


对于第二个功能:超级终端发送数据给S7-1200,即是S7-1200是数据的接收方,超级终端是数据的发送方,对于S7-1200需要编写接收程序;而对于超级终端则意味着,,只要:超级终端程序,配置硬件接口参数与前面S7-1200的扩展参数一致,在界面上输入发送内容即可。下面的步骤将具体介绍此功能实现的步骤:①,在PLC中编写程序,然后在主菜单(OB1)上,在OB1,在主程序中称其为RCV_PTP功能块,如下图所示:(注:RCV_PTP在指令库下一个的扩展指令中通讯指令下一个)
(图15:调用发送功能块)


要对RCV_PTP赋值参数,首先需要创建RCV_PTP的背景数据块和发送缓冲数据块,双击“设备”->“ PLC_1” ————>“程序块”-“添加新块”, DB_RCV_PTP,选择DB块,在类型后选择“ RCV_PTP(SFB114)”
(图16:创建接收功能块的背景数据块)


插入背景DB后,再插入接收缓冲DB块,重复上面的步骤,只是在选择DB类型为“ Global DB”,并去掉“ Symbolic access only”(选择符号访问)选项勾(这样可以将该DB块进行直接访问),建好这两个DB块后,,双击:DB_RCV_BUFF定义为接收数据的数据类型,如下图所示:
(图17:定义接收范围)


定义完接收机后端后,接下来就可以对RCV_PTP赋值参数,赋值参数后如下图:
(图18:接收编程)


在上面的编程的程序块里需要注意的是,在指定的接收字节时。字符的开始地址是从第二个字节,而不是零字节开始,即即是P#DB2.DBX2.0 Byte10而不是P#DB2.DBX0.0 Byte10,原因是由于S7-1200对串行的放置的格式造成的,S7-1200对串行的前两个字节的定义的第一字节是最大的字符长度,第二个字节是实际的字符长度接下来才是存放实际字符如下图:


(图19:字符串存储格式)


上面就完成了一个程序的编写,对项目进行编译;右击PLC_1项目在放置的菜单项中选择“ Complies ALL”选项,这样就对硬件与软件进行了编译,如下图:
(图20:编译项目)


编译且没有错误后就可以下载程序到PLC中,同样右击PLC_1项目,在弹出的菜单选择“下载到设备”。
②,用串口交叉线连接S7-1200的串口与计算机的串口,打开计算机的超级终端程序,并设置硬件扩展参数如下图:

(图21:超级终端的扩展设置)



在桌面上新建的文本文件,此文本文件在里面输入“ gfdcba”,如下图:
(图22:在文本文件下输入要发送的字符串)


③:变量监控表,强制M0.0,使能接收。然后,在超级终端里,选择菜单“传输”下一个的“发送文本文件”,在桌面上找到一个文本文件。
(图23:通过超级终端发送数据)


DB_RCV_BUFF数据块,在线查看接收到的数据,如下图:
(图24:接收接收机中接收到的数据)
通过上面的示例实现一个简单的应用,在实际的应用过程中,需要按第三方设备的协议进行编写S7-1200的程序。公众号:  巨控电子( 扫码关注 )      

   微信群:PLC工业自动化社区 (加好友标注:姓名-城市)

西门子WINCC


  • 博途WinCC专业版C/S架构入门指南
  • 咔!咔!咔!自动/停止/手动 - WinCC中的三档转换
  • 按图索数-WinCC中的“地图+数据”
  • WinCC与S7-1500 R/H系统通信
  • 通过Web Service与WinCC交互数据
  • 可缩放矢量图形(SVG)在WinCC中的应用
  • WinCC V7.5典型架构及选型指南
  • 自动语音播报WinCC报警消息
西门子TIA博途
1.S7-PLCSIM Advanced使用入门
2.使用PLCSIM Advanced仿真博途PID
3.使用PLCSIM Advanced仿真博途Modbus_TCP
4.使用PLCSIM Advanced仿真博途S7-1500 OPC UA
西门子TIA博途SCL学习
1.西门子PLC用TIA博途SCL语言写的一个产生随机实数的指令块(学习1)
2.TIA博途SCL编程学习2_sin(x)
3.TIA博途SCL编程学习3_两个数的计算器
4.TIA博途SCL编程学习4_选择法排序
5.TIA博途SCL编程学习5_一串数字的加法
6.TIA博途SCL编程学习6_数组逆序
7.西门子TIA博途S7-1200/1500学习7间接寻址指令PEEK的使用
8.TIA博途SCL编程学习8_计算N天后的日期
9.TIA博途SCL编程学习9_百鸡百钱
10.TIA博途SCL编程学习10_字符串日期转换成DATE数据类型
11.TIA博途SCL编程学习11_多条件与运算
12.TIA博途SCL编程学习12_数组求和两种算法比较
13.TIA博途SCL编程学习13_电机正反转加点动
14.TIA博途SCL编程学习14_填表格
15.TIA博途SCL编程学习15_素数判断

16.TIA博途SCL编程学习16_歌德巴赫猜想验证

17.TIA博途SCL编程学习17_选择法排序

18.TIA博途SCL编程学习19_分数段人数统计

19.TIA博途SCL编程学习19_分数段人数统计

20.TIA博途SCL编程学习20_换钱

21.TIA博途SCL编程学习21_4个数字中的3个数字的排列组合

22.TIA博途SCL编程学习22_奖金计算

23.TIA博途SCL编程学习23_求最大公约数和最小公倍数

24.TIA博途SCL编程学习24_一串数字的加法

25.TIA博途SCL编程学习25_找出1-1000之间的完数

26.TIA博途SCL编程学习26_小球反弹高度

27.TIA博途SCL编程学习27_猴子吃桃

28.TIA博途SCL编程学习28_一个分数序列加法

29.TIA博途SCL编程学习29_五位数分解

30.TIA博途SCL编程学习30_捡鸡蛋

31.TIA博途SCL编程学习31_HelloWorld

32.TIA博途SCL编程学习32_幂
33.TIA博途SCL编程学习33_水仙花数

34.TIA博途SCL编程学习34_完数
35.TIA博途SCL编程学习35_另类比大小
36.TIA博途SCL编程学习36_自然数反转
37.TIA博途SCL编程学习37_数字加密

38.TIA博途SCL编程学习38_三种方法求最大公约数

39.TIA博途SCL编程学习39_友好数
40.TIA博途SCL编程学习40_平方回文数
41.TIA博途SCL编程学习40_斐波那契数列
42.TIA博途SCL编程学习41_大数乘法
43.TIA博途SCL编程学习42_三位数的组合
44.TIA博途SCL编程学习43_新娘和新郎
45.TIA博途SCL编程学习44_韩信点兵
46.TIA博途SCL编程学习45_过桥问题
47.TIA博途SCL编程学习46_分鱼问题
48.TIA博途SCL编程学习47_跳跃游戏



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

本帖子中包含更多资源

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

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

本版积分规则