西门子PLC单边通信核心指南

在工业自动化领域,特别是西门子PLC之间或与其他设备通信时,S7协议是最核心的协议之一。"单边通信" 是其最常用、最经典的通信方式。

核心概念:什么是单边通信?

单边通信 指的是在通信连接中,只有一方(通常是客户机/主站)主动发起数据读写请求,而另一方(服务器/从站)只是被动地响应。

简单来说,就像是**"客户端-服务器"模式**:

  • 客户机 (Client): "主动方"。它知道服务器的地址和数据布局,主动去"拿"数据或"放"数据。它负责建立连接、组态和发起所有通信请求。

  • 服务器 (Server): "被动方"。它只是提供数据区域(如DB块、M区、I/O区),等待客户机的访问。它不需要为这个连接做任何编程。

配置步骤(以两台CPU 1217C DC/DC/DC为例)

1.使用 TIA Portal 创建一个新项目,组态第一台 1217 CPU,并设置 IP 地址,如图所示。

2.点击PLC在"连接机制"中勾选上"允许来自远程对象的PUT/GET通信访问"

3.组态第二台 1217 CPU,并设置IP地址与勾选"允许来自远程对象的PUT/GET通信访问",确保它们在同一网段,并且可以互相访问。

4.在"组态和网络"中将两个PLC连接起来

5.点击PLC1的"设备组态"在"系统和时钟储存器"中勾选"启用时钟存储字节"

6.创建数据块,在DB1中定义变量 (必须取消勾选"优化的块访问")

重要提示:

  • 地址列显示的是绝对地址,这正是客户机需要知道的地址信息

  • 因为是"非优化访问",这些地址在编译后是固定的

编译后就可以看见变量的偏移量

7.打开主程序,从指令列表中,找到"通信" → "S7通信" → **GET和PUT,**把这两个块托进程序段

8.点击右上角的"组态"按钮,选择对方PLC(两个程序块都需要改)

9.下面详细说明每个用到的引脚:

REQ(请求/触发)

  • 数据类型:BOOL(布尔型,只有0或1)

  • 作用:启动读取操作的触发信号

ID(连接标识符)

  • 数据类型:WORD 或 INT(通常用十六进制表示)

  • 作用:指定使用哪个S7连接

**ADDR_1 (**远程地址引脚)

  • 数据类型:Pointer(指针)

  • 作用:指定远程服务器(从站)的数据地址

  • 语法格式:P#数据块.起始地址数据类型数量

P#DB1.DBX0.0 INT 10

│ │ │ │ │ │ │

│ │ │ │ │ │ └── 数量:10个元素

│ │ │ │ │ └─── 数据类型:INT(16位整数)

│ │ │ │ └───── 起始位:第0个字节的第0位

│ │ │ └─────── 数据块内的地址:DBX表示数据块内的位/字节访问

│ │ └───────── 数据块编号:1

│ └─────────── 固定前缀:表示数据块

└───────────── 指针标识符

RD_1(接收数据区)

  • 数据类型:Pointer 或 变量引用

  • 作用:指定本地存放数据的位置

重要规则:地址必须连续:不能跨区域读取

  1. 最大长度:通常每个ADDR_x最大可以读取约200字节(具体看CPU型号)

  2. 数据类型匹配:必须与RD_x的类型匹配

  3. 服务器数据块:必须是非优化访问

定义两个块的引脚就可以下载两给个CPU,我这里使用仿真进行演示

当我在 PLC_1 的 Write0 中输入数值"1"时,PLC_2 的 Read0 成功接收到了该值

相关推荐
镜子AI5 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
tianyuanwo6 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
HideF6 小时前
Linux sudo
linux
FlightYe7 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎7 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
知已难寻8 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
huainingning9 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器
牛马鸡niumasi9 小时前
【Linux】C语言文件操作
linux
say_fall9 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii9 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器