简介:这份《西门子111报文详解.pdf》面向工业自动化领域的电气工程师、PLC编程人员及运动控制调试人员,聚焦西门子驱动系统中111标准报文的通信结构与控制字含义,帮助读者理解报文各数据位在设备通信与控制中的实际作用。资源包共1个文件,为单个PDF文档,压缩包约7KB,篇幅精简、便于随查随用。内容围绕报文结构、报文类型与参数定义展开,并逐条梳理Drive01_STW1、POS_STW1、STW2、POS_STW2等控制字与状态字的位定义,以及Override Word、MDI_TARPOS、MDI_VELOCITY、MDI_ACC、MDI_DEC等运动控制命令,同时给出JOG点动、回零、使能、程序步选择等PLC与驱动参数对应关系的中文注释,便于对照调试。目前已有8950人学习下载,适合需要快速查阅111报文位含义、排查通信与控制逻辑问题的技术人员参考。
1. 111报文不是“协议文档”,是伺服调试的现场地图
第一次拿到这份《西门子111报文详解.pdf》的人,多半会误以为它是一份讲通信协议栈的规范。翻两页就会发现完全不是那回事:满屏都是Drive01_STW1_BIT8、Drive01_OVERRIDE、p2589=r2090.8这类东西,本质是一张把 PLC 侧控制字、状态字、过程数据字和驱动侧参数一一对上的接线表。它解决的是现场最磨人的那类问题——伺服不动、使能不上、回零跑飞、MDI 位置给下去没反应,你盯着博图里的报文配置发呆,却不知道第 8 位到底该给 1 还是 0。
这份资源适合三类人:正在用 111 报文做基本定位或 MDI 运动控制的调试工程师、需要把 PLC 程序里的控制位和驱动参数对应起来的电气人员、以及接手别人项目要快速读懂既有报文映射的维护者。它不教你伺服原理,但能让你在对着报文抓瞎时,知道该去查哪一位、改哪个参数。
2. 拆开111报文的字结构:STW、ZSW与过程数据怎么排
111 报文属于西门子驱动里比较“重”的一种标准报文,它把控制字、状态字、位置相关字、扩展字和自由过程数据打包在一起,一次循环里既下发命令又回读状态。要把它用起来,第一步不是写程序,而是把每个字的位置和含义在纸上排清楚。
2.1 控制字STW1/STW2与状态字ZSW1/ZSW2的分工
从资源正文能直接读出结构:Drive01_STW1_BIT0到BIT15是第一个控制字,Drive01_STW2_BIT0到BIT15是第二个控制字;回读侧对应Drive01_ZSW1、Drive01_ZSW2。另外还有一组Drive01_POS_STW1、Drive01_POS_STW2、Drive01_POS_ZSW1、Drive01_POS_ZSW2,这是位置控制专用的控制/状态字,专门管回零、程序步、MDI、外部块切换这些动作。
现场最容易混的就是这两组字。STW1 管的是驱动的基本使能链路:OFF2、OFF3、使能运行、PLC 控制权。POS_STW1 管的是“让轴往哪走、走哪段、怎么回零”。很多人使能给对了但轴不动,问题就出在 POS_STW 那几位没置对。
资源里给出的使能映射很典型:
// 启动变频器 p0840 = r2090.0 OFF2 p0844 = r2090.1 OFF3 p0848 = r2090.2 enable operation p0852 = r2090.3这里的r2090.x是驱动接收到的第一个控制字(STW1)的位。也就是说 PLC 侧把 STW1 的 bit0 置 1,驱动参数 p0840 就收到 OFF2 的释放信号。这条链路是理解整份资源的关键:PLC 写的是位,驱动读的是参数,中间靠 r2090 这个接收字做桥。
2.2 过程数据字PZD的映射与自由连接
资源后半段有一串p2051[0]=r2089[0]=p2080[0...15]这样的写法,这是把发送过程数据字和驱动内部连接器做自由连接。111 报文里 PZD 区不止标准的那几个字,还留了自由连接位,方便把额外状态(比如实际位置、实际转速)塞进回读区。
p2051[0] = r2089[0] = p2080[0...15] p2051[1] = r2089[3] = p2083[0...15] p2061[5] = r2521 位置实际值 p2061[7] = r0063[0] 转速实际值 p2051[9] = r2131 p2051[10]= r2132p2051[n]是发送过程数据字 n 的连接器输入,p2061[n]是接收过程数据字 n 的连接器输出。资源里把r2521(位置实际值)挂到p2061[5],把r0063[0](转速实际值)挂到p2061[7],这就是为什么 PLC 侧能在报文里读到实际位置和实际转速——不是报文自带,是有人手动连上去的。
提示:自由连接的顺序必须和 PLC 侧组态的报文长度严格一致,多连一个字或少连一个字,整段数据都会错位,现象是“位置值看着像转速值”,这种错位靠猜是猜不出来的。
2.3 用表格把位定义固化成检查清单
资源正文是逐位罗列的,直接读容易看花眼。我一般会先把它整理成一张对照表,调试时逐行打勾。下面这张表是从资源里提炼的核心位,实际项目里建议按自己用到的位补全:
| 信号名 | 位 | 驱动参数 | 作用 |
|---|---|---|---|
| STW1_BIT0 | 0 | p0840 | OFF2 释放 |
| STW1_BIT1 | 1 | p0844 | OFF3 释放 |
| STW1_BIT2 | 2 | p0848 | 使能运行 |
| STW1_BIT3 | 3 | p0852 | 运行使能 |
| STW1_BIT7 | 7 | p2103 | 故障确认 |
| STW1_BIT10 | 10 | p0854 | PLC 控制权 |
| POS_STW1_BIT8 | 8 | p2597 | 回零方式选择 |
| POS_STW1_BIT11 | 11 | p2595 | 启动回零 |
| POS_STW2_BIT15 | 15 | p2647 | 激活 MDI |
这张表的价值在于:现场轴不动时,你不用从头翻 PDF,按表从上往下查使能链,再查 POS 字,基本十分钟内能定位到是哪一位没给。
3. 把报文落到参数:使能链、回零与MDI的配置步骤
理解了字结构,下一步是把 PLC 的位和驱动参数真正接上。资源里给的映射已经比较完整,但直接照抄容易漏掉前置条件,下面按调试顺序拆成可执行的步骤。
3.1 使能链配置:从OFF2到运行使能的顺序
使能链是有先后顺序的,OFF2 没释放就谈使能运行,驱动会直接报故障。资源里的四行映射对应标准使能流程,配置时按这个顺序写进驱动:
p0840 = r2090.0 // OFF2,0=停止,1=释放 p0844 = r2090.1 // OFF3,0=快速停止,1=释放 p0848 = r2090.2 // 使能运行 p0852 = r2090.3 // 运行使能 p0854 = r2090.10 // PLC 控制权,必须给 1参数含义要说清楚:p0840是 OFF2 的信号源,给 0 时驱动按自由停车处理;p0844是 OFF3,给 0 时按快速停车斜坡停;p0848和p0852都置 1 才真正进入运行使能状态。p0854容易被忽略——它是“控制权来自 PLC”的开关,不给 1,前面几位给了也白给,这是新手最常翻车的地方。
配置完不要急着让轴动,先在驱动调试软件里看 r0899 之类的状态字,确认使能链每一位都到位,再往下走。
3.2 回零配置:方式选择、方向与启动位的配合
回零是 111 报文里坑最多的部分。资源里给了三个关键位:
p2597 = r2092.8 // 回零方式:0=主动回零,1=被动回零 p2604 = r2092.9 // 回零起始方向:0=正向,1=反向 p2595 = r2090.11 // 启动回零 p2596 = r2092.1 // 将当前位置直接设为零点主动回零是驱动自己找参考点开关,被动回零是等外部给参考点信号。选错方式的现象很典型:选了主动回零但现场没有参考点开关,轴会一直朝一个方向走直到撞限位;选了被动回零但没人给参考点信号,轴就原地不动等信号。
p2595是启动位,注意它是上升沿触发,PLC 侧如果一直给 1,第二次回零就不会启动。我一般会在 PLC 里做成按钮点动,按下给一个扫描周期的 1,松开回 0。
p2596是“把当前位置设为零点”,这个位在调试阶段特别好用——机械已经在对的位置了,不想再跑一遍回零,直接置 1 把当前坐标清零。但它和回零启动位不要同时给,否则行为取决于驱动内部优先级,容易出玄学问题。
3.3 MDI运动控制:目标位置、速度、加减速的给定
MDI 模式是 111 报文做定位的常用方式,资源里对应的参数是:
p2647 = r2091.15 // 激活 MDI p2653 = r2091.14 // MDI 模式:0=位置模式,1=速度模式 p2642 = r2060[5] // MDI 位置给定,单位 LU p2643 = r2060[7] // MDI 速度给定,单位 1000 LU/min p2644 = r2050[9] // MDI 加速度,4000h 对应 100% p2645 = r2050[10] // MDI 减速度,4000h 对应 100%这里有两个单位陷阱。位置给定p2642的单位是 LU(长度单位),不是毫米,具体换算取决于机械传动比和编码器分辨率,得在驱动里先配好。速度给定p2643的单位是 1000 LU/min,给 1000 表示每分钟 1000 个 LU,不是 1000 转。加减速p2644、p2645用的是十六进制百分比,4000h 对应 100%,给 2000h 就是 50%。
MDI 的触发流程是:先给目标位置和速度,再置p2647激活,驱动按给定走完一段后自动复位激活位。如果位置给了但轴不动,先查p2653是不是选在了速度模式,再查p2647有没有真正上升沿。
注意:MDI 位置给定和速度给定都是过程数据字,PLC 侧每个扫描周期都在刷新,如果 PLC 程序里这两个字没保持住,驱动会收到 0,现象是轴刚动一下就停。
4. 避坑与排查:111报文调试中最容易翻车的五件事
4.1 使能给了但轴不动,状态字全是0
现象:PLC 侧 STW1 的使能位都置 1 了,驱动状态字 ZSW1 却一直是 0,轴纹丝不动。
原因:最常见的是p0854(PLC 控制权)没给 1,或者给了但位地址写错。资源里明确写的是p0854=r2090.10,如果 PLC 程序里把控制权位放到了别的字上,驱动就认为控制权不在 PLC 手里,使能链整体不生效。
解决:在驱动调试软件里直接监视 r2090 这个接收字,逐位对照 PLC 输出,确认 bit10 确实是 1。再看 r0899 状态字,确认驱动内部已经进入“运行使能”状态。
4.2 回零启动后轴朝反方向跑
现象:按下回零按钮,轴往远离参考点开关的方向走,直到撞限位。
原因:p2604(回零起始方向)给反了。资源里写的是 0 从正向开始、1 从反向开始,但“正向”是相对电机旋转方向定义的,如果机械安装方向和电机定义方向相反,就得反过来给。
解决:先手动点动确认电机正方向对应机械哪个方向,再决定p2604给 0 还是 1。不要凭经验默认给 0。
4.3 MDI位置值到了但轴不动
现象:PLC 里 MDI 目标位置写了一个明显不为 0 的值,激活位也给了,轴就是不动。
原因:p2653选在了速度模式(1),此时位置给定被忽略,驱动等的是速度给定。或者p2647激活位给的是电平而不是上升沿,驱动只认一次跳变。
解决:确认p2653给 0 走位置模式;确认 PLC 程序里激活位做的是上升沿触发,给一个扫描周期后复位。
4.4 实际位置读回来是乱码或数量级不对
现象:PLC 侧读到的实际位置值跳变剧烈,或者数值大得离谱。
原因:自由连接的过程数据字顺序和 PLC 组态的报文长度不一致,导致字错位。资源里p2061[5]=r2521、p2061[7]=r0063[0]是手动连的,如果 PLC 侧按标准 111 报文长度组态,多出来的自由字就会挤占后面的位置。
解决:核对 PLC 硬件组态里 111 报文的 PZD 长度,和驱动侧p2051/p2061的连接数量严格对齐。改完重新下载组态,不要只改驱动参数。
4.5 故障复位按了没反应
现象:驱动报故障,PLC 给p2103(故障确认)置 1,故障码不消。
原因:p2103对应的是 STW1 的 bit7,资源里写的是p2103=r2090.7。如果 PLC 程序里故障确认做成了常给 1,驱动会认为一直在请求复位,反而不处理;另外有些故障需要先排除硬件原因(比如过流、编码器断线),复位位给了也没用。
解决:故障确认做成按钮点动,给一个上升沿;同时读r0947故障码,先确认故障类型是不是可复位的。
5. 用状态字反推故障:把ZSW位当成黑匣子来读
调试到后期,真正省时间的不是会配参数,而是会读状态字。111 报文回读的 ZSW1、ZSW2 和 POS_ZSW 里,每一位都对应驱动内部一个确定的状态,资源里虽然只列了位名没展开解释,但结合驱动参数手册能反推出当前卡在哪一环。
我的习惯是做一个简单的位解析脚本,把 PLC 读上来的状态字按位拆开打印,比在博图里一个个看布尔量快得多:
# 把状态字按位拆开,对照 111 报文位定义排查 def decode_status(zsw1, zsw2): bits1 = [(zsw1 >> i) & 1 for i in range(16)] bits2 = [(zsw2 >> i) & 1 for i in range(16)] # ZSW1 bit0/bit1/bit2 对应驱动就绪、运行就绪、运行使能 print("ZSW1:", "".join(map(str, reversed(bits1)))) print("ZSW2:", "".join(map(str, reversed(bits2)))) if bits1[0] == 0: print("驱动未就绪,查主回路和使能链") if bits1[2] == 0: print("运行使能未到位,回查 p0848/p0852") if bits2[7] == 1: print("有故障,读 r0947 故障码") decode_status(0b0000011000000011, 0b0000000000000000)这段代码的逻辑很直白:把两个 16 位状态字按位展开,先看 bit0 和 bit2 判断使能链走到哪一步,再看 ZSW2 的故障位决定要不要去读故障码。参数上唯一要注意的是位序——PLC 里读上来的字和驱动内部位定义是低位在前,打印时反转一下更符合人看二进制习惯。
比脚本更重要的是一个习惯:每次轴不动,先读状态字再动手改参数。状态字是驱动唯一不会骗人的输出,STW 给得对不对、使能链断在哪、有没有隐藏故障,全在这两个 16 位里。从那以后我每次接手一个 111 报文的项目,第一件事就是把 ZSW1、ZSW2 的位定义打印出来贴在工位上,改任何参数之前先看一眼状态字当前是什么,避免在错误的方向上反复试。这份 PDF 的价值也在这里——它把位和参数的对应关系一次给全,省掉了在手册里来回翻的时间。希望帮到你。
本文还有配套的精品资源,点击获取