西门子 S7-200 SMART 系列八:实例讲解如何实现s7-200 smart cpu 与 cpu之间通讯
通过向导实现s7-200 SMART CPU之间S7通信
上期介绍了西门子S7-200 samrt 串口通讯中Modbus的应用,实际上s7-200 smart 串口还支持USS通讯(西门子驱动专用通讯协议)、自由口通讯协议,但由于都不太常用,就不再过多介绍,有需要的朋友可以加小编微信私聊,本期开始分享s7-200 smart 的以太网通讯,感谢大家支持;
003656一 | 西门子S7通信简介 |
S7通信
西门子S7通讯是一种用于自动化控制系统的开放式网络协议。它旨在提供高效、可靠和安全的设备之间通信方式。S7通讯支持各种类型的网络拓扑结构和连接方式,例如以太网、Profibus和Profinet等。此外,它还支持多种通讯协议和数据格式,包括二进制、ASCII和BMP等。通过S7通讯,不同厂商生产的设备可以相互通信,并实现协同工作。这有助于提高生产效率、降低成本,并促进自动化控制系统的智能化发展。
S7连接
S7连接是指建立在西门子S7通讯协议基础上的设备之间的互联。它可以通过各种接口(如以太网、串行口等)实现,使不同类型的设备(例如工控机、PLC、触摸屏等)能够相互通信和交换数据。在S7连接中,使用了特定的网络拓扑结构,例如Master-Slave或Peer-to-Peer等。这些拓扑结构可以根据实际应用需求进行调整,以满足不同场景下对系统效率、可靠性和安全性的要求。
单边通讯
在S7连接中,多使用单边通讯(即PUT/GET)实现CPU与CPU之间数据通讯。单边通讯顾名思义就是指只有一端发起的通讯,其它CPU程序无需做任何处理。这种通讯方式也被称为"主从通讯"或"读写通讯"。在单边通讯中,其中一台设备作为主站(Master),而另一台设备则作为从站(Slave)。主站负责向从站发送指令或数据,而从站则根据主站的要求进行操作或返回数据。单边通讯具有以下优点:
简单易用:结构简单、操作便捷,适合于低功耗和低带宽的场景。 高效稳定:主站控制从站工作,可以避免多台设备之间的干扰和冲突,保证通讯稳定性和效率。 安全可靠:单向数据流使得主站更容易对从站进行控制和管理,有助于减少系统故障和安全风险。
二 | S7-200 SMART CPU之间的以太网通信 |
S7-200 SMART CPU 固件版本 V2.0 及以上版本的 CPU 可实现CPU、编程设备和HMI(触摸屏)之间的多种通信:
CPU与编程设备之间的数据交换。 CPU与HMI之间的数据交换。 CPU与其他S7-200 SMART CPU之间的PUT/GET通信。 CPU与其它S7系列(s7-1200,s7-300,s7-1500)PLC之间的PUT/GET通信。
S7-200 SMART CPU 以太网连接资源如下:
1个连接用于与STEP7 Micro/Win SMART软件的通信。 8个连接用于CPU与HMI之间的通信。 8个连接用于CPU与其他S7-200 SMART CPU之间的PUT/GET主动连接 8个连接用于CPU与其他S7-200 SMART CPU之间的PUT/GET被动连接
注:S7-200 SMART 在 V2.5 版本(硬件和软件)增加标准型 CPU 支持 PROFINET IO 智能设备的功能。后期会为大家分享学习如何使用s7-200 samrt 作为IO设备和智能设备
三 | 通信资源数量 |
PLC的通讯能力与该PLC的通讯链接资源数有关,链接资源越多,通讯能力就越强;
S7-200 SMART CPU 以太网端口含有 8 个PUT/GET 主动连接资源和 8 个PUT/GET 被动连接资源。例如:CPU1 调用 PUT/GET 指令与 CPU2 ~ CPU9 建立8主动连接的同时,可以与 CPU10 ~ CPU17 建立8被动连接(CPU10 ~ CPU17 调用 PUT/GET 指令),这样的话 CPU1 可以同时与16台 CPU(CPU2 ~ CPU17)建立连接。
关于主动连接资源和被动连接资源的详细解释如下:
主动连接资源和被动连接资源 调用 PUT/GET 指令的CPU 占用主动连接资源数;相应的远程 CPU 占用被动连接资源。 8 个PUT/GET 主动连接资源 S7-200 SMART CPU 程序中可以包含远多于 8个PUT/GET 指令的调用,但是在同一时刻多只能激活 8 个 PUT/GET 连接资源。 同一时刻对同一个远程 CPU 的多个 PUT/GET 指令的调用,只会占用本地 CPU的一个主动连接资源和远程 CPU的一个被动连接资源。本地 CPU 与远程 CPU之间只会建立一条连接通道,同一时刻触发的多个 PUT/GET 指令将会在这条连接通道上顺序执行。 同一时刻多能对8个不同 IP 地址的远程 CPU 进行 PUT/GET 指令的调用,第9个 远程CPU的PUT/GET 指令调用将报错,无可用连接资源。已经成功建立的连接将被保持,直到远程 CPU断电或者物理断开。 8 个PUT/GET 被动连接资源 S7-200 SMART CPU 调用 PUT/GET 指令,执行主动连接的同时也可以被动地被其他远程 CPU 进行通信读写。 S7-200 SMART多可以与被8个不同 IP 地址的远程 CPU 进行 建立被动连接。已经成功建立的连接将被保持,直到远程 CPU断电或者物理断开。
四 | 使用向导完成CPU与CPU之间通讯步骤 |
通过S7通信实现CPU与CPU之间通讯,西门子提供了PUT/GET编程指令(通过指令&参数完成,有兴趣朋友可以学习学习,参数理解比较困难,本期不做过多介绍),同时也可以使用 PUT/GET 向导以简化编程步骤。该向导多允许组态 16 项独立 PUT/GET 操作,并生成代码块来协调这些操作。
在下面的例子中,CPU1 为主动端,其 IP 地址为192.168.2.100,调用 PUT/GET 指令;CPU2 为被动端,其 IP 地址为192.168.2.101,不需调用 PUT/GET 指令。通信任务是把 CPU1 的实时时钟信息写入 CPU2 中,把CPU2 中的实时时钟信息读写到 CPU1 中。操作步骤如下:
image-20240320105435615STEP 7 Micro/WIN SMART 在“工具” 菜单的“向导”区域单击“Get/Put”按钮,启动 PUT/GET 向导,在弹出的“Get/Put”向导界面中添加操作步骤名称并添加注释;
MWSmart_O1yHg3YH7r定义PUT操作
MWSmart_sm7zUl3DWd定义PUT操作:
选择操作类型,PUT(将数据写入远端,对应PUT_CPU2) 通信数据长度8(时钟信息占用8个字节) 定义远端CPU的IP地址(192.168.2.101) 本地通讯区域和起始地址(时钟数据存储在VB100开始的8个字节中) 远断通讯区域和起始地址(将数据写入VB0开始的8个字节中) 定义GET操作
image-20240320111444680定义GET操作:
选择操作类型,GET(从远端获取数据,对应GET_CPU2) 通信数据长度8(时钟信息占用8个字节) 定义远端CPU的IP地址(192.168.2.101) 本地通讯区域和起始地址(将读取到的数据存储在VB0开始的8个字节中) 远断通讯区域和起始地址(读取远端从VB100开始的8个字节) 分配存储器地址
image-20240320111829009注:点击“建议”按钮向导会自动分配存储器地址。需要确保程序中已经占用的地址、PUT/GET 向导中使用的通信区域与不能存储器分配的地址重复,否则将导致程序不能正常工作。
点击下一步,显示向导自动生成的组件,可直接下一步或者生成;
image-20240320112024391点击“生成”按钮将自动生成网络读写指令以及符号表。只需用在主程序中调用向导所生成的网络读写指令即可
image-20240320112311078NET_EXE 子程序参数说明:
Timeout 超时输入为整数值,以秒为单位定义定时器值。允许范围为 0(= 无定时器)和 1 - 36767(= 以秒为单位的定时器值)。 Cycle 输出是指在每次所有 NET 操作全部完成后被切换的布尔值。允许值为假值 (0) 和真值 (1)。周期输出在一个周期为假值 (0),下一周期为真值 (1),接下来的第三个周期为假值 (0)。 Error 输出是 NET_EXE 子例程返回的布尔值,用于指示执行结果。0=无错误;1=错误; S7通信本地侧配置完成,远端无需配置,只需要配置需要传输的数据即可。
image-20240320113004146
五 | 补充说明:读取时钟指令 |
说明 READ_RTC、SET_RTC 编程提示
这些指令不接受无效日期。例如,如果输入 2 月 30 日,则会发生非致命性日时钟错误 (0007H)。 不要在主程序和中断例程中使用 READ_RTC/SET_RTC 指令。执行另一个 READ_RTC/SET_RTC 指令时,无法执行中断例程中的 READ_RTC/SET_RTC 指令。在这种情况下,CPU 会置位系统标志位 SM4.3,指示尝试同时对日时钟执行二重访问,导致 T 数据错误(非致命错误 0007H)。 CPU 中的日时钟仅使用年份的后两位数,因此 00 表示为 2000 年。使用年份值的用户程序必须考虑两位数的表示法。 2099 年之前的闰年年份,CPU 都能够正确处理。
8 字节时间缓冲区的格式,从字节地址 T 开始
所有日期和时间值必须采用 BCD 格式分配(例如,16#12 代表 2012 年)。00 至 99 的 BCD 值范围可分配范围为 2000 至 2099 的年份。
T 字节 | 说明 | 数据值 |
---|---|---|
0 | 年 | 00 至 99(BCD 值)20xx 年:其中,xx 是 T 字节 0 中的两位数 BCD 值 |
1 | 月 | 01 至 12(BCD 值) |
2 | 日 | 01 至 31(BCD 值) |
3 | 小时 | 00 至 23(BCD 值) |
4 | 分 | 00 至 59(BCD 值) |
5 | 秒 | 00 至 59(BCD 值) |
6 | 保留 | 始终设置为 00 |
7 | 星期几 | 使用 SET_RTC/TODW 指令写入时会忽略值。 通过 READ_RTC/TODR 指令进行读取时,值会根据当前年/月/日值报告正确的星期几。 1 至 7,1 = 星期日,7 = 星期六(BCD 值) |
注意
紧凑型串行 (CRs) CPU 型号没有 RTC(实时时钟) 可使用 READ_RTC 和 SET_RTC 指令设置紧凑型串行 (CRs) CPU 型号中的年份、日期和时间值,但这些值将在下一次 CPU 断电通电循环时丢失。上电时,日期和时间将初始化为 2000 年 1 月 1 日。