简介:面向工业自动化工程师与运动控制调试人员,汇川PROFINET总线驱动应用指南(V1.08)系统梳理变频器、伺服在PN总线上的选型、组态与调试案例。内容覆盖MD290、MD500、MD800等变频器及IS620F、SV660F、IS810F伺服,涉及1、3、111、102、105号报文与750附加报文,可与S7-200 SMART、S7-1200、S7-1500等上位机配合实现运动控制。压缩包为1个PDF,约20MB,按产品简介、版本记录、应用案例与常见问题组织;已有1923人学习。读者可获取报文配置、转矩限幅、MC_Home回原、WRREC/RDREC非周期读写、Trace与同步、PN小工具及Stune调试、SIL3 STO安全功能等案例与排错思路,适合入门查阅和项目调试对照。
1. 从一份 100 多页的 PN 通讯说明书说起:它能替你在现场省下哪几个小时
上周有个做包装机的朋友发来截图,一条产线上四台变频器加两台伺服挂在 S7-1200 下面,伺服一使能就报故障,状态字停在 16#0F31 不动。他手上只有设备自带的快速手册,翻遍也找不到“使能序列到底该先给哪个位”。这类问题的答案往往不在快速手册里,而在那份动辄上百页、带版本号的应用指南里——比如这份《汇川 PROFINET 总线驱动应用指南》V1.08,它把变频器 MD500-PN2、MD800 SI-PN 扩展卡和 IS620F、SV660F、IS810F 伺服挂到 PN 总线上的报文选型、组态步骤、回原与限位、非周期读写、现场故障排查全串成了一条线。它不是原理书,是照着做能跑起来的操作底稿。
这份指南覆盖的机型很杂:变频器一侧有 MD290、MD380、MD480、MD500、MD500-PLUS、MD520、CS290、CS710、MD800,伺服一侧有 IS620F、SV660F、IS810F,上位机从 S7-200 SMART 一路到 S7-1500T。适合两类人——第一次把这些驱动挂到 PROFINET 上的调试人员,以及写运动控制程序、需要确认报文里每个字含义的电气工程师。下面按选型、组态、定位、排查、验证的顺序拆。
2. 报文选型:先把 PZD 长度和地址排干净,再谈组态
组态里最常见的返工不是接线错,是报文选错。报文一改,IO 地址整体平移,程序里所有%QW都得跟着挪,改一次半小时。所以动手前先把报文号、PZD 长度、地址分配三件事定死。
2.1 六类报文的 PZD 结构对照
表里列出的是这批驱动支持的报文,PLC 侧发送区(Q 区)和接收区(I 区)按 PROFIdrive 标准的字排列。实际字节数以 GSDML 文件中设备视图里显示的条目为准,不同固件版本可能追加附件字。
| 报文号 | 典型用途 | PLC→驱动(PZD) | 驱动→PLC(PZD) |
|---|---|---|---|
| 1 | 速度控制,最常用 | STW1、NSOLL_B | ZSW1、NIST_B |
| 2 | 速度控制 + 附加设定 | STW1、NSOLL_B、附加字 | ZSW1、NIST_B、附加字 |
| 3 | 位置控制,带编码器反馈 | STW1、NSOLL_B、STW2、G1_STW | ZSW1、NIST_B、ZSW2、G1_ZSW、G1_XIST1、G1_XIST2 |
| 102 | 位置控制,行规变体 | 长度接近报文 3,反馈字定义不同 | 同上,编码器值量纲按驱动侧参数 |
| 105 | 带 DSC 的位置/速度控制 | 在位置报文基础上追加转矩前馈相关字 | 长度比报文 3 长,需按 GSDML 核对 |
| 111 | 定位报文,带模式字 | STW1、STW2、位置/速度给定、模式选择 | ZSW1、ZSW2、实际位置、状态字 |
| 750 | 附加报文,转矩限幅 | 转矩降低(MOMRED)、附加转矩 | 转矩实际值、状态字 |
报文 1 只有四个字,是排查链路是否打通的最短路径;报文 3 和 102 是位置环闭环,适合 1500T 做同步、凸轮;105 在位置基础上加入 DSC,跟随误差能压得更小,但对扫描周期和参数整定更敏感;111 是自定义定位报文,把回原、绝对定位、点动、程序段都塞进同一个报文,靠模式字切换,省去反复改组态的麻烦。750 单独存在没有意义,它必须寄在 1、3、102 后面当“附件”。
2.2 附加报文 750 为什么总跟着 1、3、102 走
速度模式下要限制输出转矩,标准做法就是在原报文后面追加 750。它给两个量:一个是从 PLC 下发的转矩限幅百分比,一个是回读的实际转矩。按 PROFIdrive 的标定惯例,转矩类数值 4000 hex 对应 100% 参考转矩,2000 hex 对应 50%,写 0 就是完全封锁输出。
这个功能在收放卷、张力控制里几乎是标配。举个场景:一台 MD500-PN2 拖动放卷轴,主机速度由报文 1 给定,但薄膜张力要求转矩不能超过 40%,否则拉断。组态时选“报文 1 + 750”,PLC 侧在附加字写16#1999(约 40%),驱动侧把转矩限幅源指向通讯给定,速度环照常跑,输出却被压住。
要注意 750 的限幅是“降低”而不是“给定”。它只做减法:实际输出转矩 = 速度环计算值 与 限幅值 取小。想让电机输出恒定转矩,得用 105 报文里的转矩给定通道,两者不能混。
2.3 按工艺反选报文:三个判断问句
不要从报文列表往里挑,从工艺往外问。
第一句:这个轴要不要知道“到没到位置”?只要求转速跟随——风机、水泵、普通输送——报文 1 足够,加 750 做限幅。第二句:位置反馈给谁用?如果 PLC 只做启停和给定,位置环在驱动内部闭,选 111;如果 PLC 侧要做插补、凸轮、电子齿轮,位置环必须在 PLC 的运动控制内核里,选 3 或 102,让 1500T 拿到编码器实际值。第三句:跟随误差卡不卡?印刷、贴标这类动态跟随,误差要求进 0.1 mm 以内,报文 105 加 DSC 才有意义,代价是必须把 PLC 循环时间和驱动侧采样对齐,参数整定不到位反而抖得更厉害。
选型确定后立刻画地址表。我一般会按下面的规则排:每台设备的 Q 区从整字节边界起,报文 1 占 4 字节,报文 1+750 占 8 字节,报文 3 占 8 字节发、12 字节收,报文 111 按实际长度预留 16 字节余量。这样后面加轴、换报文,地址段之间还留得下空档。
| 设备 | 报文 | Q 区起址 | I 区起址 | 占用(发/收) |
|---|---|---|---|---|
| 1# 变频器 | 1+750 | QB256 | IB256 | 8 / 8 字节 |
| 2# 变频器 | 1 | QB264 | IB264 | 4 / 4 字节 |
| 3# 伺服 | 111 | QB272 | IB272 | 16 / 16 字节(按实际) |
| 4# 伺服 | 3 | QB288 | IB288 | 8 / 12 字节 |
地址表一旦定稿就写进项目注释,后面所有人按这张表写程序,谁也不去猜。
2.4 数值标定:4000 hex 这条线要记牢
上位机给的都是整数,驱动认的是标定值。速度给定 NSOLL_B 按 4000 hex 对应参考转速,参考转速由驱动侧参数决定,常见设成电机额定转速;位置给定 G1_STW 配套的位置字按编码器分辨率折算,23 位绝对值编码器一圈 8388608 个脉冲,减速比和丝杠导程要一起算进去。
举个例子:丝杠导程 10 mm,减速比 1:5,电机侧一圈对应 2 mm 行程,那么 1 个脉冲 = 2 / 8388608 mm ≈ 0.00000024 mm。想让滑台走 100 mm,给定值约 419430400。这类数字一定要在 PLC 侧写成常量并注明推导过程,别在程序里手算,调机时改一次导程就全乱。
转矩同理,4000 hex = 100% 参考转矩,参考转矩取电机额定转矩。加速度前馈、附加转矩都用同一套标定,混用会导致输出只有预期的几十分之一,现场很容易误判成“驱动没响应”。
3. 组态落地:从 GSDML 到第一次使能,顺序不能颠倒
这一章是全篇最像“抄作业”的部分。顺序错了,后面每一步都在补窟窿:先装 GSDML,再组态设备,再分配设备名和 IP,最后才是写程序。设备名必须在 PLC 侧和驱动侧完全一致,包括大小写和连字符。
3.1 GSDML 导入与设备名分配的先后
GSDML 文件从驱动厂商的选型样本或随设备提供的介质里拿,版本要和固件匹配。TIA 里走“选项 → 管理通用站描述文件”,装完在硬件目录的“其他现场设备 → PROFINET IO”下面能翻到对应条目。
拖进网络视图之后,第一件事是点开设备属性分配设备名。PROFINET 靠设备名寻址,不靠 IP,IP 只是给诊断和跨网段用的。设备名建议按“产线号-设备类型-序号”命名,例如LINE1-VFD-01,全厂唯一。分配完成后用在线诊断里的“分配设备名”功能写进驱动,写入时驱动必须处于可访问状态。
提示:驱动侧的设备名存在通讯卡或主控板的非易失区,换板子之后名字会丢,表现为 PLC 报站不可用。备件更换后第一件事就是重新分配设备名,别先去查网线。
现场排查时有个土办法:在工程师站的命令行里直接 ping 设备名,能解析出 IP 就说明名称服务正常,解析不出来就是名字没写进去或者被覆盖了。
# 名称解析正常会返回驱动被分配的 IP,超时说明名字没落到设备里 ping LINE1-VFD-01这条命令只能验证名称到 IP 的解析链路,不能验证 IO 数据是否在刷新。数据刷新要看 TIA 在线诊断里的“IO 设备诊断”,或者直接看接收区的状态字是不是从 0 变成有效值。
3.2 报文 1 的最小使能回路:控制字与状态字
所有调试都从报文 1 开始,因为它的字最少,出错点最少。控制字 STW1 的关键位:bit0 是 ON,bit1 是运行使能(有上升沿要求),bit2 是快速停止(OFF3,低有效),bit3 是使能运行,bit4 是斜坡函数发生器使能,bit5 是斜坡函数发生器继续,bit6 是设定值使能。
常用的三个停止命令对应三个控制字值:16#047E是 OFF1 斜坡停车,16#047D是 OFF2 自由停车,16#047B是 OFF3 快速停车。三个值的差别只在 bit1 和 bit2,但现场表现天差地别——自由停车是直接断输出,负载靠惯性滑停,重载设备上会听到明显的机械冲击;快速停车走急停减速时间,用于安全回路。
// 报文1 最小使能序列,S7-1200/1500 通用 // 假定组态地址:QW256 = STW1,QW258 = NSOLL_B,IW256 = ZSW1,IW258 = NIST_B // 第一步:上电先给 0x047E,ON 位置 0,等驱动自检完成 "DB_Axis1".STW1 := 16#047E; "DB_Axis1".NSOLL_B := 0; // 第二步:状态字 bit0~bit2 有效,且 bit8~bit11 无故障,才允许使能 IF ("DB_Axis1".ZSW1 AND 16#0F07) = 16#0F07 THEN "DB_Axis1".STW1 := 16#047F; // bit0 置 1,产生 ON 上升沿 END_IF; // 第三步:使能后给速度,4000hex = 参考转速 IF ("DB_Axis1".ZSW1 AND 16#0004) = 16#0004 THEN "DB_Axis1".NSOLL_B := "HMI".SpeedPercent * 40; // 百分比换算成 4000hex 标定 END_IF;逻辑说明:16#047F和16#047E的差别只在 bit0,必须由 0 变 1 形成上升沿,驱动才认这个使能命令。如果程序里直接写死16#047F上电就给,部分固件会报“缺少 ON 命令”。中间那个16#0F07的与运算是筛状态字的关键位——bit0 就绪、bit1 运行准备、bit2 运行使能、bit8 到 bit11 无故障,这几个位同时为 1 才说明驱动真的可以接命令。
参数说明:NSOLL_B的换算系数 40 来自 4000 hex 对应 100%,所以 1% 就是 40。参考转速在驱动侧参数里设置,建议设成电机铭牌额定转速,这样 HMI 上的百分比和实际转速能对上。状态字回读建议放进 DB 里做趋势记录,出问题时看历史曲线比看诊断缓冲区快。
3.3 不挂功能块,用 IO 地址直接控制
TIA 里有两个现成的东西可以省事:SINA_SPEED 和 FB284。前者管报文 1,后者管报文 111,封装了状态机。但它们也有代价——出问题时中间变量被封装在黑匣子里,得开背景 DB 一层层看。很多现场工程师的做法是干脆不用,直接读写过程映像。
// 直接操作过程映像,逻辑全在自己手里 %QW256 := 16#047F; // STW1 使能 %QW258 := "DB_Set".SpeedRef; // NSOLL_B 速度给定 "DB_Read".ZSW1 := %IW256; // 状态字 "DB_Read".NIST_B := %IW258; // 实际转速 "DB_Read".SpeedRPM := "DB_Read".NIST_B * 0.025; // 4000hex 折算成百分比这种写法在报文 1 上完全够用,程序段短、扫描快、看得见每个字。风险在于同一个%QW地址如果被多处赋值,最后执行的那处生效,前面全白写。所以我习惯在 OB1 里单独开一个网络做过程映像搬运,所有业务逻辑只操作 DB,最后统一写一次%QW。地址表里那几台设备的起址,就是按这个规矩留的。
报文 111 和报文 3 就不建议裸写 IO 了。位置给定、模式字、触发位的时序牵扯太多,手动维护状态机容易漏边沿。这类报文用 FB284 或者自己封一个 FB,把“模式切换 → 等待状态字确认 → 产生触发上升沿 → 等目标到达”做成固定流程,复用性更好。
3.4 参数读写:FB287 和 WRREC/RDREC 怎么分工
周期报文传的是过程数据,参数在非周期通道里走。TIA 下有两种写法:FB287(SINA_PARA_S)是给西门子驱动定制的封装,支持一次读写多个参数;WRREC/RDREC 是标准记录读写,通用性强,但要自己拼数据结构。
// WRREC 写一个驱动参数:REQ 只给一个扫描周期,等 BUSY 落下再发下一次 #edge(CLK := #startWrite); IF #edge.Q THEN #rec[1] := 16#0001; // 参数号高字节 #rec[2] := 16#0000; // 参数号低字节 #rec[3] := 16#0000; // 子索引 #rec[4] := 16#0001; // 写入值高字节 #rec[5] := 16#0000; // 写入值低字节 END_IF; "WRREC_DB"(REQ := #edge.Q, ID := #hwID, // 硬件标识符,设备视图里可查 INDEX := 47, // PROFIdrive 参数通道记录索引 LEN := 10, // 记录长度,按实际结构给 RECORD := #rec, DONE => #done, BUSY => #busy, ERROR => #err, STATUS => #status);逻辑说明:INDEX := 47是 PROFIdrive 定义的参数通道记录索引,驱动侧靠它识别这是参数读写请求而不是别的记录。REQ必须是上升沿,且必须等BUSY落回 0 才能发下一条,否则会返回16#DF80之类的状态码,表示上一次请求还没处理完。
参数说明:ID是硬件标识符,在设备视图里点开驱动就能看到,别用设备名去猜。LEN必须和RECORD的实际长度一致,多给一个字节就会整条记录被拒。读写失败时先看STATUS,常见的是16#80A7(参数不存在)、16#DF80(通道忙)、16#DE87(访问权限不够)。写入之前确认驱动侧没有在本地面板上锁参数,锁了就是权限问题。
FB287 的好处是封装了多参数和重试,适合配方下载这类批量场景。我一般调试阶段用 WRREC,看得清每一步;确认稳定后再换成 FB287 做批量。
3.5 S7-200 SMART 的差异点
200 SMART 也支持 PROFINET 主站,但资源和 1200/1500 不一样。它没有运动控制内核,报文 3、102、105 用不上,只能用到报文 1 和 111,做简单的速度控制和定位。组态入口在“PROFINET”向导里,GSDML 通过向导导入,设备名分配也在向导里做。
// 200 SMART 侧用 SINA_SPEED 功能块控制报文 1 // 库指令:SINA_SPEED,输入输出按向导生成的符号表填 CALL SINA_SPEED, "SINA_SPEED_DB" ( Run := "Start_Btn", Speed := "HMI".SpeedSet, Off2 := "Stop_Free", Off3 := "Stop_Fast", Fault => "Axis1_Fault", Status => "Axis1_Status);差异点有三个:一是库指令的背景 DB 一次只能挂一台设备,多轴要多次调用不同实例;二是没有 Trace,抓问题只能靠状态字的趋势记录或者驱动侧自己的调试软件;三是通讯循环时间比 1200 长,位置类报文 111 的触发间隔别给太短,给到 20 ms 以上更稳。用 200 SMART 做定位,本质是让它发命令、驱动自己闭环,别指望它在 PLC 侧做插补。
4. 报文 111:回原、限位、点动增量,配置顺序一步都不能反
报文 111 是这批伺服在定位场景里用得最多的一种,把回原、绝对定位、相对定位、点动、程序段都收在一个报文里,靠模式字切换。好处是组态不用改,坏处是模式字、触发位、状态字确认三者的先后顺序错一步,驱动就停在原地不响应命令。
4.1 控制字、状态字与模式字的配合
报文 111 的 STW1 沿用 PROFIdrive 的标准位,STW2 和额外的模式字用来指定动作类型。可用的模式包括回原位、绝对定位、连续速度运行(模式 3)、程序段功能(模式 6)、点动增量(模式 8),具体编号以驱动侧固件版本对应的参数表为准。
切换模式的安全做法是先撤触发位、再改模式、最后给触发上升沿,中间留一个扫描周期的间隔。如果程序在一个周期里同时改模式和置触发,驱动可能认到的是上一个模式,表现就是“命令发出去了但动作不对”。
// 报文111 模式切换的固定顺序:撤触发 -> 改模式 -> 等一拍 -> 给触发 "DB_Axis".Trigger := FALSE; "DB_Axis".Mode := 1; // 回原位模式 "DB_Axis".PosSet := 0; IF "DB_Axis".ModeAck = 1 THEN // 驱动侧回的模式确认字 "DB_Axis".Trigger := TRUE; // 上升沿触发动作 END_IF; // 动作结束判断:状态字 bit10(目标到达)或 bit12(设定值确认) "DB_Axis".InPos := ("DB_Axis".ZSW1 AND 16#0400) = 16#0400;逻辑说明:ModeAck是驱动回的模式确认,确认值到了才允许置触发位,这一条能挡掉大部分“命令丢帧”。InPos用状态字 bit10 判断,定位类动作到位后该位会置 1;回原动作看的是另外一位,具体位定义要对着手册的表查,不同固件版本的位定义有调整。
参数说明:位置给定PosSet的绝对值由编码器分辨率和机械减速比决定,先算清 1 个脉冲对应多少毫米,再写换算系数。触发位必须保证有“0→1”的跳变,程序里如果一直给 TRUE,驱动只认第一次。
4.2 回原:先定回原方式,再谈速度和偏移
回原方式不是一个参数,是一组参数的组合:原点开关接在哪个 DI、找不找 Z 相、碰到硬限位后怎么反向、回原完成后的偏移量。常见做法有四种——只找 Z 相;找原点开关上升沿再找 Z 相;找硬限位后反向找原点;直接把当前位置设成原点。
包装机、机械手这类有固定原点的设备,我一般用“原点开关 + Z 相”的方式,重复精度最好。原点开关安装位置要保证能覆盖整个行程但不会被机械撞到,Z 相脉冲一个电机圈只有一个,两者配合能消掉一线误差。回原速度分两段:快速接近用较高速度,碰到开关后切成低速爬行,爬行速度太快会直接冲过 Z 相。
回原失败最常见的表现是驱动一直停在“正在回原”状态不结束。原因通常有两个:原点开关的 DI 逻辑反了,驱动一直认为开关没触发;或者 Z 相信号没进来,编码器线接错或者屏蔽没做好。排查时先把回原方式改成“只找原点开关”,能结束就说明问题在 Z 相这一侧。
4.3 限位:硬限位接 DI,软限位改完要实时生效
硬限位走 DI 端子,接到正向和反向限位开关上,驱动收到信号后立即封锁对应方向输出。软限位是参数里设的位置上下限,一旦实际位置越界就报错停机。两者的配置顺序是:先配 DI 功能映射(把 DI 端子定义成正/反向限位),再配软限位的数值和使能位。
一个容易踩的细节是软限位修改的生效时机。老固件里改完软限位要重新使能才生效,新固件支持修改后立即生效。组态完成后,用报文里的限位激活位把功能打开,然后手动点动到接近限位的位置验证一次——不要等实际运行到边界才发现限位没生效。
提示:调试阶段可以先关掉软限位,但硬限位的 DI 线必须接好再上电。空载点动的时候,一个方向失误就足以撞坏丝杠。
4.4 点动增量与程序段:把“走一段”做成可复用块
点动增量模式(模式 8)适合手动对刀、分度盘分度这类动作:每触发一次,走一个设定好的增量和方向。程序段功能(模式 6)把多段位置、速度、停留时间打包,驱动内部按顺序执行,PLC 只负责启动和监控,省掉每段之间的握手。
程序段的关键在段号和切换条件。段与段之间靠“段号加 1”或“外部信号切换”,前者按固定顺序执行,后者由 PLC 在指定时刻给切换位。用外部切换时要注意,切换信号必须在当前段执行完之前到达,晚了会多停一次。
// 点动增量:每来一个上升沿,按当前方向走一个增量 #jogEdge(CLK := "HMI".JogBtn); IF #jogEdge.Q THEN "DB_Axis".Mode := 8; "DB_Axis".JogStep := "HMI".JogStepMM; // 增量值,按脉冲当量换算 "DB_Axis".JogDir := "HMI".JogDir; // 0 = 正,1 = 负 "DB_Axis".Trigger := TRUE; ELSE "DB_Axis".Trigger := FALSE; END_IF;逻辑说明:点动增量靠脉冲触发,一按一走,长按不连续走。程序里必须每个扫描周期都把Trigger复位,否则下一次按下的上升沿根本不存在。JogStep的单位换算要用同一套脉冲当量,正负方向用独立的位控制,别用负数给定,部分固件不接受负增量。
4.5 转矩限幅与位置偏差清除:两个“附加功能”的用法
位置模式下也需要限制转矩——机械卡住时如果不限幅,电机要么堵转发热,要么把工件顶坏。做法是报文 111 后面追加 750,或者用驱动侧自带的附加报文做转矩限幅。追加之后,PLC 侧多写一个字,写 4000 hex 就是 100%,写 0 完全封锁。
位置偏差清除是另一个容易被忽略的功能:位置模式下,如果实际位置被外力推走,偏差会一直累积,后续报错或者突然弹回去。带清除功能的报文(111 加附加功能字)可以在不停机的情况下把当前偏差清零,让驱动以当前位置为新起点继续执行。触发条件一般是“偏差超过阈值且设备处于安全状态”,做完之后要把累计偏差记录清掉,否则下一次判断会立刻再次触发。
5. 排查:五个在现场反复出现的坑
下面这五条是按“症状 → 原因 → 处理”整理的,都是调试期容易撞上的,记下来能少走不少弯路。
第一条:PLC 报“IO 设备不可用”,驱动面板正常。
现象是 TIA 在线诊断里设备变红,驱动面板显示正常没报警。原因几乎都是设备名不匹配——驱动里存的还是出厂名或上一次的名字,PLC 侧组态的是新名字。处理办法是在 TIA 的设备视图里重新分配设备名并写进驱动,写完再看诊断。如果换过通讯卡或主控板,第一件事就该检查设备名,别从网线查起。
第二条:控制字给了 16#047F,电机就是不转。
现象是状态字有效值一直在,控制字也写了使能,速度给定也有值,但电机静止。原因通常是三处之一:速度给定被斜坡函数发生器压住(bit4、bit5 没置位)、控制字没有产生上升沿(一直写死 16#047F)、驱动侧的命令源还停在本地面板上没切到通讯。处理办法是把控制字从 047E 切到 047F 的跳变过程写进程序,并且确认驱动参数里命令源选的是 PROFINET。
第三条:位置跑偏,每次都差一个固定值。
现象是定位精度稳定但不能接受,误差每次一样。原因是脉冲当量算错,或者减速比的方向反了。常见错误是把丝杠导程除以减速比写成乘,或者把编码器分辨率按 20 位算成 23 位。处理办法是让轴走一个已知距离,实测值和指令值相除,得到真实当量再反算系数,别拿设计图纸上的数据硬套。
第四条:非周期读写一直 BUSY,或者报 16#DF80。
现象是 WRREC 调用后 DONE 始终不来,ERROR 报通道忙。原因是 REQ 给的是常 TRUE,或者上一笔请求还没完成就发了下一笔。处理办法是把 REQ 改成上升沿触发,并且用 BUSY 的常闭点做互锁,一次只发一笔。如果一笔都发不出去,先查ID硬件标识符有没有填错,这个值必须从设备视图里拷,不能靠设备名猜。
第五条:回原动作走一半停住,或者回原完成但位置不准。
现象是回原过程中轴停在中途,状态一直是“执行中”。原因是原点开关的 DI 逻辑配反,或者回原速度太快冲过了 Z 相。处理办法是先把回原方式临时改成“只找开关”,验证 DI 逻辑正常,再切回“开关 + Z 相”;爬行速度降到原值的 1/3 再试。回原完成后位置不准,一般是原点偏移量没设或者设成了相反方向。
6. 用 Trace 和循环时间把跟随误差收住:一个可复现的验证流程
跟随误差这种量,光看状态字是看不出来的。报文 105 加 DSC 之后,位置环的响应好坏取决于两件事:PLC 侧的循环时间稳不稳,驱动侧的参数整定对不对。验证的办法是记录一段真实波形,而不是凭手感调。
第一步,在 TIA 里对位置给定和实际位置这两个字开 Trace,采样周期设成 1 ms 或者 2 ms,跑一段典型的往复运动,至少覆盖一个加速、一个匀速、一个减速。第二步,把两条曲线对齐看差值峰值出现的位置——峰值出现在加速段,是前馈不够;出现在匀速段,是位置环增益偏低;出现在停止瞬间,是过冲,增益高了或者减速时间设短了。第三步,用驱动侧的调试软件看速度环的实际值和给定值,两者如果长期存在大偏差,说明转矩限幅已经被压住,位置环再好也追不上。
一个容易忽略的点是循环时间不是常数。PROFINET 的 RT 通讯在每个总线周期刷新一次,PLC 侧程序扫描时间如果超过总线周期,IO 数据就会出现“跳帧”,位置给定不连续,跟随误差里会出现周期性的锯齿。用 1500T 做同步运动时,我一般会把运动控制任务的循环时间固定下来,和总线周期成整数倍关系,比如总线 2 ms、任务 4 ms,避免两者互相踩。
| 观察点 | 峰值现象 | 首要怀疑 | 调整方向 |
|---|---|---|---|
| 加速段 | 误差突然拉大 | 速度前馈不足 | 加前馈系数 |
| 匀速段 | 误差恒定存在 | 位置环增益低 | 适当提高增益 |
| 停止瞬间 | 过冲后回弹 | 增益高或减速太急 | 降增益、延长减速 |
| 全程周期抖动 | 锯齿状误差 | 扫描周期与总线不同步 | 固定任务循环时间 |
最后说个习惯。早些年调一台贴标机的跟随轴,我凭经验把增益一路往上加,结果静态精度很漂亮,一上高速就抖,停机检查了两天才发现问题根本不在增益上,而是 PLC 任务的循环时间和总线周期不对齐,位置给定每隔几个周期就丢一拍。从那以后,我每次调同步轴都强制走一遍“先看循环时间,再看波形,最后才动参数”的流程,参数一个都不许在没抓到波形的情况下改。希望帮到你。
本文还有配套的精品资源,点击获取