您现在的位置是:首页 >技术杂谈 >S7协议调试工具--snap7 demo server_partner_client网站首页技术杂谈
S7协议调试工具--snap7 demo server_partner_client
简介S7协议调试工具--snap7 demo server_partner_client
目录
- 1. 介绍
- 2. 服务端调试工具 - serverdemo
- 3. 客户端调试程序 -- clientdemo.exe
- 4. 示例:单边通讯,客户端 对 服务端 DB1 中的点进行读写
1. 介绍
1.1 S7 协议
S7协议介绍:https://plc4x.apache.org/protocols/s7/index.html
- S7 协议是西门子基于修改版的以太网 TCP/IP 协议的数据传输协议
但这个修改程度不高,因此可以在普通电脑上用普通的网卡设备跑起来 - S7 协议是西门子设备间的私有协议(但是现在用的很广泛,因为这个协议比较简单,又有很多开源通讯库)
- 可实现基于以太网的、大量高速、非实时、西门子设备间的数据传输
一般用于上位SCADA与PLC
通讯,上位机监控下位 PLC 实时数据 - S7 协议分
**单边通信**
和双边通信
- 单边通信,以
上位 PSCADA 与下位 PLC 通讯
为例- 服务端(Server):下位 PLC,响应客户端的请求,向客户端提供数据
- 客户端(Client):上位 SCADA,向服务端请求数据、下发指令
- 服务端不能主动发送数据,客户端不请求服务端就不响应
类似 Modbus 中的主-从
通信(Master - Slvave)
双边通信
(Partner)- 需要在工程中进行伙伴配置,伙伴间可实现数据的双向传递
即:两端设备既是服务端、也是客户端
- 需要在工程中进行伙伴配置,伙伴间可实现数据的双向传递
- 单边通信,以
- profinet 是西门子的现场总线
可实现实时传输、魔改了网络协议,因此需要专用的协议芯片,所以不能在电脑上模拟,且成本高
下面是S7
与Profinet
协议的区别: - 网络通信中的同步请求与异步请求
- 同步请求:客户端发送一个请求之后,等待直到服务器响应后才发送下一个请求
- 异步请求:客户端发送一个请求后不等待,直接继续发送其他的请求,服务器根据处理完成的先后,乱序的返回多个响应
要求:服务端性能足够强,允许发送异步请求
1.2 Snap7
- 介绍:目前使用的最多的开源 S7 协议通讯库
- 官网:https://snap7.sourceforge.net/
- 特点:开源(免费而且可以魔改)、稳定、资料齐全
- 其他 S7 协议通讯库:https://zhuanlan.zhihu.com/p/364106300
- 从官网可看到,这位大神还有其他不同语言/硬件平台上使用 S7 协议的通讯库
Sharp 7 –C#
原生的 S7 通讯库
Moka 7 –Java
原生的 S7 通讯库
(不得不感叹:这才是真正的dalao,软件强大且全面、文档清晰、还有开源精神)
1.3 调试工具下载
- 进入
Snap7
官网,进入下载页面 - 下载完整软件包(示例下载最新版 1.4.2 的)
注意这里不是点左上角的绿色图标,那个下载的压缩包是不包含调试工具的 - 解压下载好的压缩包文件,调试软件在
rich-demos
文件夹下,文件夹对应不同系统操作系统 - 进入
bin
文件夹下,是可运行的调试工具
注意如果要将以下的调试工具复制到其他文件夹下,最下面的snap7.dll
是通讯库文件,也要复制放到软件相同目录下
2. 服务端调试工具 - serverdemo
服务端 = 响应客户端的请求,向客户端提供数据,一般是下位 PLC 做服务端
2.1 使用步骤
- 双击程序
serverdemo.exe
打开服务端模拟软件 - 点击
start
,开始模拟设备,出现“server started”表示模拟成功
Log Mask 区域:显示报文日志,勾选则下方显示相关报文的日志,取消勾选则不显示相关报文的日志
Local Address:服务端软件所在的电脑的 IP 地址,保持0.0.0.0
即可 - 分别点击
DB1
、DB2
、DB3
可以看到不同 DB 块当前的值- 此调试工具不能提前设置 DB 中的值,要更改值只能用客户端连接到此服务端后该值
- DB 中的显示方式:左侧是十六进制数值,右侧是对应的 ASCII 码显示
- 下方日志区域,可显示报文的日志
- 点击
Stop
可停止服务端,出现“server stopped”表明服务端已经成功停止
3. 客户端调试程序 – clientdemo.exe
客户端 = 向服务端请求数据、下发指令,控制服务端运行 & 监控服务端的数据
3.1 使用步骤
- 双击程序
clientdemo.exe
打开客户端模拟软件 - 配置服务端 IP 地址(IP)、服务端的连接方式(Rack/Slot & STAP),点击
Connect
进行连接 - 连上服务端后,可切换页面,读写数据、控制服务端状态
- 点击
Disconnect
断开连接
3.2 详细配置
a) IP – 服务端的 IP 地址
注意,如果是连接到本地,只能用 127.0.0.1 不能用 localhost,否则会报错连不上
b) Rack/Slot 和 TSAP – 不同型号设备的连接方式
b-1) CPU S7 300/400/1200/1500/WinAC - 使用 Rack/Slot 方式
Connect as
连接方式,可选:PG/OP/S7 Basic (编程器/触摸屏/基本连接)
相关介绍参考 PLC 的“连接资源”相关介绍:https://www.ad.siemens.com.cn/productportal/Prods/S7-1200_PLC_EASY_PLUS/11-Comm/01-Ethernet/01-Intro/01-Intro.htm
- 使用 PG、OP、S7-Basic 都能连上 PLC,都不需要额外组态
- 如果在连接资源中,一种连接方式已经占满了,只能用另一种连接方式
- 连接资源在博图中可以看到(以 S7-1200 为例)
项目上使用的连接资源:
实际对应 CPU 使用的连接资源:博图进入在线模式,诊断 --> 连接信息 --> 连接资源
b-2) Rack / Slot
机架号 / 槽位号 – 配置取决于设备型号
- S7-300:机架 0 / 槽位 2
- S7-400:取决于硬件配置(机架 0 / 槽位 3 应该能用)
- S7-1200:机架 0 / 槽位 0
- S7-1500:机架 0 / 槽位 0
- WinAC:机架 0 / 槽位看具体的组态配置
- CPU S7-200/LOGO 7/LOGO 8 - 使用 TSAP TAB 方式
LOC TSAP (Hex) | REM TSAP (Hex) | |
---|---|---|
S7-200 | 4D.57(或 02.00) | 4D.57 (或 02.00) |
LOGO 7 / LOGO 8 | 取决于 LOGOComfort 的工具->以太网连接 | 取决于 LOGOComfort 的工具->以太网连接 |
3.3 系统信息说明页面 System info
3.4 数据读取模块(Data read/write)
- 点击 Data read/write,可以直接读取/控制 PLC 指定的数据块内的字节或位偏移。
- 左侧数据区域,每一格表示一个字节 (1 字节 = 16 位,值范围 = 0-255,十六进制表示 0-0xFF)
- 以十六进制显示
- 写的时候如果开头加上
$
则要写十六进制数
不加则写十进制数,但确认输入后会自动转换为十六进制的显示 - 批量处理(如多个点设置值)可以先在电子表格中编好,然后整体粘贴过来
- Area:读取数据的位置在(可选读取 DB、专用寄存器中的数据)
- 专用寄存器 = 计数器(Counter)、定时器(Timer)、输入/输出映像寄存器(Input/Output)、状态字(Markers)。注意选择特殊寄存器需要保证类型正确,否则有可能会出错
- DB Number:要读取的 DB 块编号,只有 Area = DB 时才需要设置
若连接的是调试工具serverdemo
,则只能读取 DB,DB Number 与 server 中的DB 1,DB 2,DB3对应 - Start:起始地址
- Amount:数量
- Wordlen:传输的数据类型。
- Read:同步读取数据
Async Read:异步读取 - Write:同步写入
Async Write:异步写入
3.5 块数据功能 Block-UP/DownLoad
- Block type:模块名称
- Block Number:模块编号
- Delete from AG:删除数据从网关。AG (Access Gateway接入网关)
- Full Upload:全部上传
Upload:同步上传
Async Upload:异步上传 - DownLoad:同步下载
Async Download:异步下载 - Save to file: 保存到文件
- Load from file:加载文件
3.6 GET/FILL 方式获取/填充数据 Block-DB get/fill
- DB Number:要获取/填充的数据块的编号。
- DB Dump:获取的数据块的大小
- DB Get:同步获取数据
- Async DB Get:异步获取数据
- Fill Char:要填充的数据
- Fill:同步对server端数据进行填充。
- Async Fill:异步对server端数据进行填充。
3.7 读取系统状态列表 Read SZL
SZL:系统状态列表(德语:System-ZustandsListen,英语:System Status Lists)
用于描述PLC的当前状态,系统状态列表的内容只能读取不能修改。
- Refresh List:刷新SZL ID的列表。
- List Of All SZL ID:表示 SZL 列表的长度(SZL 包含的内容数量)
- SZL Dump:双击左侧某个 SZL ID,dump 区域显示当前 SZL ID 中读取到的内容
- Read SZL:同步从读取 SZL 中的值。
Async Read SZL:异步读取 SZL 中的值。
SZL 部分参数详情(PLC 型号不同 SZL 不同):http://blog.nsfocus.net/s7comm-readszl-0427/
3.8 时间功能 Date/Time
3.9 调试控制功能 Control
- 左上角有颜色的英文表示当前 CPU 模块的运行状态
- RUN(运行):CPU 执行用户程序、更新输入和输出、并处理中断和错误消息。
- HOLD(暂停):CPU 暂停执行用户程序,适用于程序调试时。
- STOP(停止): CPU 处于“STOP”操作模式,不执行用户程序。
- STARTUP(启动中):接通 CPU 后,先执行启动程序再执行用户程序。
有“暖启动”、“暖启动”和“冷启动”三种启动模式。用户可指定 S7-CPU 上电时的启动类型。
- Get status:获取 CPU 模块当前的运行状态
- Cyclic refresh:持续刷新获取 CPU 状态。
- Stop:给server端发送停止CPU运行的指令。
- Hot Restart:暖启动
- Cold Restart:冷启动
- Copy Ram to Rom:使用同步的方式,把闪存的数据拷贝到只读存储器中。
Async Copy Ram to Rom:使用异步的方式,把闪存的数据拷贝到只读存储器中。 - Timeout:超时时间。
- Compress:同步方式,进行 CPU 内存压缩。
Async Compress:异步方式,进行 CPU 的内存压缩。
3.10 安全功能 Security
此页面大部分内容都是只读的,不能控制
- Selector Protestion level:模式选择开关的状态的保护级别,只读。
状态:未知 / 可读写 / 只读 - Params protection level:参数保护级别,只读
状态:读写都无需密码 / 模式选择开关控制 / 可读但写需要密码 / 读写都需要密码 - CPU Protection level:CPU防护级别,只读
状态:unknown未知 / Access grant可自由访问 / Read only只读 / read/write password读写需要密码 - Selector position:模式选择开关当前位置
状态:RUN 运行但不允许修改 / RUN-P 运行且允许修改 / STOP 停机 / MRES 重置CPU数据
4. 示例:单边通讯,客户端 对 服务端 DB1 中的点进行读写
- 打开 服务端 调试程序
serverdemo.exe
,点击start
启动程序 - 打开软件,连上本地服务端(地址 = 127.0.0.1,设备类型 S7-300 --> Rack=0,Slot=2)
在右侧填写控制的DB块信息
- Area:表示类型,由于我们要修改的是 DB 块的点,因此选择DB
- DB Number:表示 DB 的模块号,填写 1,2,3 分别对应 DB1,DB2,DB3,这里我们填 **1 **对应 DB1
- start:开始地址,默认为 0,十进制数。这里填 0 表示从 DB1 的 0000 寄存器地址开始操作
- Amount:表示要读写的的数量,默认为 1,十进制数
需要修改数量:例如控制了第 20 个点,则需要将Amount改为20以上,如此才能对第20的点进行控制。
这里填 100 保证数据全部写入 - WordLen:数据类型,结合 Start 和 Amount 确定具体读写的数据范围,这里选
S7WLByte
,表示字节
- 写完数值后,点击右侧的write按钮,进行tag点值的写入
- 切换到 snap7 服务端(
serverdemo.exe
),查看tag点的数据
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。