您现在的位置是:首页 >技术杂谈 >S7协议调试工具--snap7 demo server_partner_client网站首页技术杂谈

S7协议调试工具--snap7 demo server_partner_client

Lilixxs 2024-06-17 10:13:16
简介S7协议调试工具--snap7 demo server_partner_client


1. 介绍

1.1 S7 协议

S7协议介绍:https://plc4x.apache.org/protocols/s7/index.html

  1. S7 协议是西门子基于修改版的以太网 TCP/IP 协议的数据传输协议
    但这个修改程度不高,因此可以在普通电脑上用普通的网卡设备跑起来
  2. S7 协议是西门子设备间的私有协议(但是现在用的很广泛,因为这个协议比较简单,又有很多开源通讯库)
  3. 可实现基于以太网的、大量高速、非实时、西门子设备间的数据传输
    一般用于上位SCADA与PLC通讯,上位机监控下位 PLC 实时数据
  4. S7 协议分**单边通信**双边通信
    1. 单边通信,以上位 PSCADA 与下位 PLC 通讯为例
      1. 服务端(Server):下位 PLC,响应客户端的请求,向客户端提供数据
      2. 客户端(Client):上位 SCADA,向服务端请求数据、下发指令
      3. 服务端不能主动发送数据,客户端不请求服务端就不响应
        类似 Modbus 中的主-从通信(Master - Slvave)
    2. 双边通信(Partner)
      1. 需要在工程中进行伙伴配置,伙伴间可实现数据的双向传递
        即:两端设备既是服务端、也是客户端
  5. profinet 是西门子的现场总线
    可实现实时传输、魔改了网络协议,因此需要专用的协议芯片,所以不能在电脑上模拟,且成本高
    下面是S7Profinet协议的区别:
    image.png
  6. 网络通信中的同步请求异步请求
    1. 同步请求:客户端发送一个请求之后,等待直到服务器响应后才发送下一个请求
    2. 异步请求:客户端发送一个请求后不等待,直接继续发送其他的请求,服务器根据处理完成的先后,乱序的返回多个响应
      要求:服务端性能足够强,允许发送异步请求

1.2 Snap7

  1. 介绍:目前使用的最多的开源 S7 协议通讯库
  2. 官网:https://snap7.sourceforge.net/
  3. 特点:开源(免费而且可以魔改)、稳定、资料齐全
  4. 其他 S7 协议通讯库:https://zhuanlan.zhihu.com/p/364106300
  5. 从官网可看到,这位大神还有其他不同语言/硬件平台上使用 S7 协议的通讯库
    Sharp 7 – C#原生的 S7 通讯库
    Moka 7 – Java原生的 S7 通讯库
    (不得不感叹:这才是真正的dalao,软件强大且全面、文档清晰、还有开源精神)

1.3 调试工具下载

  1. 进入Snap7官网,进入下载页面
    image.png
  2. 下载完整软件包(示例下载最新版 1.4.2 的)
    注意这里不是点左上角的绿色图标,那个下载的压缩包是不包含调试工具的
    image.png
  3. 解压下载好的压缩包文件,调试软件在rich-demos文件夹下,文件夹对应不同系统操作系统
    image.png
  4. 进入bin文件夹下,是可运行的调试工具
    注意如果要将以下的调试工具复制到其他文件夹下,最下面的snap7.dll是通讯库文件,也要复制放到软件相同目录下
    image.png

2. 服务端调试工具 - serverdemo

服务端 = 响应客户端的请求,向客户端提供数据,一般是下位 PLC 做服务端

2.1 使用步骤

  1. 双击程序serverdemo.exe打开服务端模拟软件
    image.png
  2. 点击start,开始模拟设备,出现“server started”表示模拟成功
    Log Mask 区域:显示报文日志,勾选则下方显示相关报文的日志,取消勾选则不显示相关报文的日志
    Local Address:服务端软件所在的电脑的 IP 地址,保持0.0.0.0即可
    image.png
  3. 分别点击DB1DB2DB3可以看到不同 DB 块当前的值
    1. 此调试工具不能提前设置 DB 中的值,要更改值只能用客户端连接到此服务端后该值
    2. DB 中的显示方式:左侧是十六进制数值,右侧是对应的 ASCII 码显示
      image.png
    3. 下方日志区域,可显示报文的日志
      image.png
  4. 点击Stop可停止服务端,出现“server stopped”表明服务端已经成功停止

3. 客户端调试程序 – clientdemo.exe

客户端 = 向服务端请求数据、下发指令,控制服务端运行 & 监控服务端的数据

3.1 使用步骤

  1. 双击程序clientdemo.exe打开客户端模拟软件
    image.png
  2. 配置服务端 IP 地址(IP)、服务端的连接方式(Rack/Slot & STAP),点击Connect进行连接
    image.png
  3. 连上服务端后,可切换页面,读写数据、控制服务端状态
  4. 点击Disconnect断开连接

3.2 详细配置

a) IP – 服务端的 IP 地址

image.png
注意,如果是连接到本地,只能用 127.0.0.1 不能用 localhost,否则会报错连不上

b) Rack/Slot 和 TSAP – 不同型号设备的连接方式

image.png

b-1) CPU S7 300/400/1200/1500/WinAC - 使用 Rack/Slot 方式

image.png

  1. 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
    image.png
    1. 使用 PG、OP、S7-Basic 都能连上 PLC,都不需要额外组态
    2. 如果在连接资源中,一种连接方式已经占满了,只能用另一种连接方式
    3. 连接资源在博图中可以看到(以 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 / 槽位看具体的组态配置
  1. CPU S7-200/LOGO 7/LOGO 8 - 使用 TSAP TAB 方式
    image.png
LOC TSAP (Hex)REM TSAP (Hex)
S7-2004D.57(或 02.00)4D.57 (或 02.00)
LOGO 7 / LOGO 8取决于 LOGOComfort 的工具->以太网连接取决于 LOGOComfort 的工具->以太网连接

3.3 系统信息说明页面 System info

image.png

3.4 数据读取模块(Data read/write)

image.png

  • 点击 Data read/write,可以直接读取/控制 PLC 指定的数据块内的字节或位偏移。
  • 左侧数据区域,每一格表示一个字节 (1 字节 = 16 位,值范围 = 0-255,十六进制表示 0-0xFF)
    • 以十六进制显示
    • 写的时候如果开头加上$则要写十六进制数
      不加则写十进制数,但确认输入后会自动转换为十六进制的显示
      十进制输入.gif
    • 批量处理(如多个点设置值)可以先在电子表格中编好,然后整体粘贴过来
      批量复制.gif
  • 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

image.png

  • 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

image.png

  • 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的当前状态,系统状态列表的内容只能读取不能修改。
image.png

  • 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/
image.png

3.8 时间功能 Date/Time

image.png

3.9 调试控制功能 Control

image.png

  • 左上角有颜色的英文表示当前 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

此页面大部分内容都是只读的,不能控制
image.png

  • 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 中的点进行读写

  1. 打开 服务端 调试程序serverdemo.exe,点击start启动程序
    image.png
  2. 打开软件,连上本地服务端(地址 = 127.0.0.1,设备类型 S7-300 --> Rack=0,Slot=2)
    在右侧填写控制的DB块信息
    image.png
    • 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,表示字节
  3. 写完数值后,点击右侧的write按钮,进行tag点值的写入
  4. 切换到 snap7 服务端(serverdemo.exe),查看tag点的数据
    image.png
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。