【导读】西门子S7-1200运动控制常见问题集锦。
目录【01】绝对定位和相对定位区别?
【02】如何设置MC_MoveRelative方向运行?
【03】为什么有时用户在监控程序的时候看不到指令的完成位Done的为1?
【04】开环运动控制怎样计算运动任务?
【05】为何通过S7-1200 PTO方式控制V90 PTI定位换向时有时会有丢失脉冲的情况?
【06】如何通过数据块实现驱动装置/编码器的数据连接?
【07】S7-1200 工艺对象能否控制由硬件支持包(HSP)方式组态的V90PN?
【08】如何在轴运动过程中修改目标速度与目标位置?
【09】在运行期间如何对工艺对象的变量进行读写访问
【10】运动控制轴变量访问举例
【11】运动控制轴变量更改性举例
【12】什么时候需要执行回原点命令?
【13】回原点已完成信号什么时候会丢失?
【14】如果实际没有原点开关和限位开关,可以使用绝对定位指令MC_MoveAbsolute吗?
【15】闭环控制带有绝对值编码器的驱动器(例如:V90 PN)时,通过“MC_Home”指令是否可以执行Mode=2或3的回原点操作?
【16】为什么用户在实际执行回原点指令时,轴遇到原点开关没有变化,直到运行到硬件限位开关停止报错?
【17】为什么轴在执行主动回原点命令时,初始方向没有找到原点,当需要碰到限位开关掉头继续寻找原点开关时并没有掉头,而是直接报错停止轴,报错原因是由于轴碰到了限位开关?
【18】S7-1200 CPU上电后轴的位置是多少?
【19】如何保持断电前的绝对位置?
【20】如何修改轴当前的位置?
01:绝对定位和相对定位的区别?相对定位是指在轴当前位置的基础上正方向或负方向移动一段距离;绝对定位指的是当轴建立了绝对坐标系后,轴的每个位置都有固定的坐标,无论轴的当前位置值是多少,当轴指令了绝对运行指令后相同的坐标值,轴最终都定位到同一个位置。
02:如何设置MC_MoveRelative方向运行?将MC_MoveRelative指令中的“Distance”设置成负值就可以让轴向负方向运行了。如图 1 所示。
图 1 相对运动
03:为什么有时用户在监控程序的时候看不到指令的完成位Done为1?带有Execute管脚的指令,例如MC_MoveRelative等指令的Done和Execute之间有如下图 2 所示描述的关系:
图 2 引脚说明
如果"Execute"在命令执行完成之前设置为 FALSE,则"Done"的值仅在一个执行周期内为 TRUE。因此,如果用户用|P|指令触发带有“Execute”管脚的指令,则该指令的“Done”只在一个扫描周期内为1,因此在监控程序时看不到Done位为1。用户可以通过在程序中添加指令用Done置位一个位来判断,如图 3 所示,用MC_MoveRelative为例进行说明。
图 3 例程
04:开环运动控制怎样计算运动任务?S7-1200默认以10ms为“时间片”计算运动任务,如图 4 所示,执行一个时间片时,下一时间片会在队列中等待执行。如果执行轴的新运动任务(例如通过MC_MoveVelocity”实现速度控制时,更新速度值),新运动任务可能最多等待20ms(当前时间片的剩余时间加上排队的时间片)后才执行生效。使用“MC_Halt”运动控制指令停止轴以及利用“ MC_Power”指令的“Enable”输入引脚停止轴时,也要遵循时间片机制,轴停止也会延时1-2时间片(10-20ms)才生效。
图 4 时间片
从V4.4固件版本以后,工艺对象V7.0开始,如图 5 所示,可以在工艺对象对应的DB中修改时间片时间"Static->Actor->PTOSliceTime",修改范围为2-20ms。在一些需要快速响应的应用可以考虑减小时间片,例如:贴标机。如果希望降低CPU的运算负荷,可以考虑增大时间片时间。
图 5 参数
05:为何通过S7-1200方式控制V90 PTI定位换向时有时会丢失脉冲的情况?S7-1200 PTO方式控制V90 PTI定位换向时,换向信号由高电平转换为低电平状态的时间取决于外围电路的输入电阻和电容,如果方向输出点的负载电流过小(应不小于10%),在高速时输出信号波形会发生畸变,换向切换时间过长,导致换向过程中的脉冲丢失。为确保换向时不丢失脉冲,同时保证脉冲输出信号波形不发生畸变,建议在SINAMICS V90 PTI的方向控制信号38、39和脉冲信号36、37的端子间连接阻值为200 Ohm至500 Ohm,最小功率为5W的下拉电阻,接线如图 6 所示。
图 6 接线图
06:如何通过数据块实现驱动装置/编码器的数据连接?【一】PROFIdrive驱动装置和PROFIdrive编码器可通过PROFIdrive报文或数据块建立数据连接。出于控制过程特定的原因(例如非线性的液压轴的控制),如果要修改或评估用户程序中的报文内容时,则需通过数据块建立连接。组态如图 7 、图 8 所示:
图 7 驱动器数据块连接
图 8 编码器数据块连接
【二】通过数据块建立数据连接的操作原理如下:通常,轴闭环位置控制开始时,将通过MC-Servo[OB91]读取驱动装置或编码器的输入报文。闭环位置控制结束时,将输出报文写入驱动装置或编码器中。由于过程特定的原因要修改或评估报文内容时,必须在闭环位置控制前后通过数据块在驱动装置和编码器之间连接数据接口。
(1)通过MC-PreServo[OB67]组织块,可编辑报文的输入区域。在MC-Servo前调用MC-PreServo;
(2)通过MC-PostServo[OB95]组织块,可编辑报文的输出区域,在MC-Servo后调用MC-PostServo。
【三】用户可对MC-PreServo和MC-PostServo组织块进行编程,通过PROFIdrive报文以及数据块建立数据连接的操作原理如图 9 所示。
图 9 操作原理
【四】数据块由用户创建,其中需包含数据类型为"PD_TELx"的数据结构,以进行数据连接,"x"表示在设备组态中组态的驱动装置或编码器的报文编号。如图 10 所示。
图 10 数据块
【五】在数据块"属性"选项中,需禁用以下属性,如图 11 所示:
(1)"仅存储在装载存储器中"(Only store in load memory)
(2)"设备中的写保护数据块"(Data block write-protected in the device)
(3)"优化块访问"(Optimized block access)*
注意:从V4.4固件版本以后,工艺对象V7.0开始,可以使用优化块
图 11 块设置
【六】具体应用请参考以下链接:使用MC-PreServo和MC-PostServo组织块
https://support.industry.siemens.com/cs/cn/zh/view/109741575
07:S7-1200工艺对象能否控制由硬件支持包(HSP)方式组态的V90N?从博途 V16 开始 S7-1200 工艺对象可以控制由硬件支持包(HSP)方式组态的驱动器,以前版本只能控制由 GSD 文件组态的驱动器。使用硬件支持包组态的 SINAMICS V90PN 驱动装置,可实现下述功能:
【1】驱动器诊断、参数保存/复位相关功能
【2】电机和编码器配置、极限值、抱闸等基本配置
【3】驱动器控制面板测试运行、驱动器优化
08:如何在轴运动过程中修改目标速度与目标位置?可以利用轴控制指令的超驰功能实现,用新的指令覆盖正在执行的命令以中止当前动作切换到新的命令。
09:在运行期间如何对工艺对象的变量进行读写访问?【一】在程序中对工艺对象的变量进行读写访问的方法见表 1:
访问 |
R |
在用户程序和 HMI 中,可读取该变量 |
RCCP |
该变量可在用户程序和 HMI 中读取,并在每个周期控制点处进行更新 | |
RP |
该变量可通过运动控制指令“MC_ReadParam”进行读取,相应变量的当前值将在命令启动时确定 | |
RW |
在用户程序和 HMI 中,可读写该变量,该变量可通过运动控制指令 “MC_WriteParam”进行写入 | |
WP |
与驱动装置连接无关:如果该轴已禁用 (MC_Power.Status = FALSE),则可使用运动控制指令“MC_WriteParam”对该变量进行写入操作 | |
WP_PD |
通过 PROFIdrive/模拟量输出进行驱动装置连接:如果该轴已禁用 (MC_Power.Status = FALSE),则可使用运动控制指令“MC_WriteParam”对该变量进行写入操作 | |
WP_PTO |
通过 PTO 进行驱动装置连接:如果该轴已禁用 (MC_Power.Status = FALSE),则可使用运动控制指令“MC_WriteParam”对该变量进行写入操作 | |
- |
变量不能在程序中使用 |
表 1 访问缩写
【二】工艺对象更改后的生效方式见表 2:
W |
工艺数据块中更改的有效性 | |
1 |
通过 PTO 进行驱动装置连接:在轴激活、禁用或已启用时 | |
2 |
通过 PTO 进行驱动装置连接:轴启用时 | |
5 |
通过 PTO 进行驱动装置连接:下一次启动 MC_MoveAbsolute、 MC_MoveRelative、MC_MoveVelocity、MC_MoveJog、MC_Halt、 MC_CommandTable 或激活的 MC_Home 命令时 (Mode = 3) | |
6 |
通过 PTO 进行驱动装置连接:MC_MoveJog 命令停止时 | |
7 |
通过 PTO 进行驱动装置连接:启动被动回原地命令时 | |
8 |
通过 PTO 进行驱动装置连接:启动主动回原地命令时 | |
9 |
重新启动工艺对象时 | |
10 |
通过 PROFIdrive/模拟量输出进行驱动装置连接:下一次调用 MC-Interpolator [OB92] 时 |
表 2 更改有效性
【三】变量支持的访问及更改后的生效方式详见“S7-1200运动控制使用手册”附录中“定位轴工艺对象的变量”章节的描述,手册下载链接如下:“SIMATIC STEP 7 TIA Portal 中 S7-1200 Motion Control”
https://support.industry.siemens.com/cs/cn/zh/view/109773400
注意:如果想要在 CPU 掉电、STOP到RUN或者工艺对象重启之后,对工艺数据块所做的更改仍然保留,则必须使用扩展指令“WRIT_DBL”将这些更改写入装载存储器的起始值中。
10:轴变量访问举例(1)<轴名称>.Positon
(2)<轴名称>.Velocity
(3)<轴名称>.ActualPosition
(4)<轴名称>.ActualVelocity
以上变量支持的访问方式见表3,有两种访问方式:RCCP、RP。
变量 |
数据类型 |
访问 |
说明 |
Position |
REAL |
RCCP、 PR |
轴的位置设定值 |
Velocity |
REAL |
RCCP、 PR |
轴的速度设定值 |
ActualPosition |
REAL |
RCCP、 PR |
轴的实际位置 |
ActualVelocity |
REAL |
RCCP、 PR |
轴的实际速度 |
表 3 位置速度说明
如果应用中需要更实时的变量值,可以使用“MC_ReadParam”读取变量(RP方式),此时获得的变量数值为“MC_ReadParam”命令启动时的数值。直接读取变量时(RCCP方式),变量的值在每个周期控制更新点更新,值在控制更新点更新前不会变化,数据实时性较RP方式差。
11:轴变量更改有效性举例<轴名称>.DynamicDefaults.<变量名称> 中包含有动态默认值的组态,更改变量时的具体信息见表 4 :
变量 |
数据类型 |
访问 |
W |
说明 | |
DynamicDefaults. |
STRUCT |
TO_Struct_DynamicDefaults | |||
Acceleration |
REAL |
RW、 WP |
5、6、10 |
轴的加速度 | |
Deceleration |
REAL |
RW、 WP |
5、6、10 |
轴的减速度 | |
Jerk |
REAL |
RW、 WP |
5、10 |
轴斜坡加速和减速过程中的加加速度 | |
EmergencyDeceleration |
REAL |
RW、 WP |
1、5、6、10 |
轴的急停减速度 |
表 4 动态默认值
【一】通过“访问”信息可知 Acceleration、Deceleration、Jerk、EmergencyDeceleration 变量可以在用户程序和HMI中直接修改,如轴已禁用,还可通过运动控制命令“MC_WriteParam”修改。
【二】通过“W”信息可知:
(1)开环 PTO 控制时
Jerk 变量在下一次启动(W=5时) MC_MoveAbsolute、 MC_MoveRelative、MC_MoveVelocity、MC_MoveJog、MC_Halt、 MC_CommandTable 或激活的 MC_Home 命令时 (Mode = 3)生效。
Acceleration、Deceleration 变量除了在上述命令启动后生效(W=5),MC_MoveJog 命令停止时也会生效(W=6时)。
EmergencyDeceleration 变量除了在 W=5 或 6 外,在轴激活、禁用或已启用时生效(W=1时)。
(2)通过 PROFIdrive/模拟量输出闭环控制时
下一次调用 MC-Interpolator [OB92] 时(W=10时),以上变量生效、捕捉。
12:什么时候需要执行回原点命令?用户需要使用MC_MoveAbsolute指令之前执行回原点指令。
13:回原点已完成信号什么时候会丢失?请参见表 1 。
PTO轴 |
闭环轴使用增量编码器 |
闭环轴使用绝对值编码器 | |
启动MC_Home命令进行主动回原点* |
√ |
√ |
- |
通过"MC_Power"运动控制指令,禁用轴 |
√ | ||
通过调试面板回原点后取消调试功能 |
√ | ||
CPU 断电 -> 上电后 |
√ |
√ | |
CPU 重新启动后 (RUN -> STOP -> RUN) |
√ | ||
编码器系统出错或编码器故障 |
- |
√ |
√ |
重新启动工艺对象 |
√ |
√ | |
存储器复位 |
√ |
√ | |
修改编码器组态 |
- |
√ |
√ |
更换 CPU |
√ |
√ |
√ |
将 CPU 恢复为出厂设置 |
√ |
√ |
√ |
将其它项目传送到控制器 |
√ |
√ |
√ |
表 1 回原点比较
注意:成功完成回原点操作之后,"已回原点"状态将再次置位。
14:如果实际没有原点开关和限位开关,可以使用绝对定位指令吗?可以。对于PTO轴或使用增量编码器的闭环轴,使用MC_Home指令的Mode=0和Mode=1方式,让轴完成绝对坐标定位。然后就可以调用MC_MoveAbsolute指令进行绝对运动了。对于使用绝对值编码器的闭环轴,使用MC_Home指令的Mode=6和Mode=7方式,让轴完成绝对坐标定位。然后就可以调用MC_MoveAbsolute指令进行绝对运动了。 回原点模式值意义如下:
Mode = 0:绝对式直接回零点,轴的位置值为参数“Position”的值
Mode = 1:相对式直接回零点,轴的位置值等于当前轴位置 参数“Position”的值
Mode = 2:被动回零点,轴的位置值为参数“Position”的值
Mode = 3:主动回零点,轴的位置值为参数“Position”的值
Mode = 6:绝对编码器相对调节,将当前的轴位置设定为当前位置 参数“Position”的值
Mode = 7:绝对编码器绝对调节 ,将当前的轴位置设置为参数“Position”的值
15:闭环控制带有绝对值编码器的驱动器(例如:V90PN)时,通过“MC_Home”指令是否可以执行Mode=2或3的回原点操作?不可以,“MC_Home”指令会报错:ErrorID=“16#8404”,ErrorInfo=“16#0055”(增量编码器的模式无效)。可通过“MC_Home”指令Mode=6或7进行绝对值编码器的调节。
16:为什么用户在实际执行回原点指令时,轴遇到原点开关没有变化,直到运行到硬件限位开关停止报错?首先要测试原点开关是否起作用,也就是说当轴碰到原点开关时,原点开关的DI点的指示灯是否点亮。可能的原因如下:
(1)寻找原点开关的速度过快,可以减小“逼近速度”和“参考速度”,如图 1 所示:
图 1 速度设置
(2)原点开关有效时间过短,可以设置DI点滤波时间,例如图 1 原点开关是I0.4,则在“设备视图”中减小I0.4的滤波时间,默认情况下DI的滤波时间是6.4millisec,用户根据DI点有效时间选择合适的滤波时间。如图 2 所示:
图 2 滤波时间
17:为什么轴在执行主动回原点命令时,初始方向没有找到原点,当需要碰到限位开关掉头继续寻找原点开关时并没有掉头,而是直接报错停止轴,报错原因是由于轴碰到了限位开关?有几种可能:
(1)用户没有使能“允许硬件限位开关处自动反转”的选项。如图 3 所示:
图 3 允许反转
(2)工艺对象组态的硬件开关上/下限位输入点与实际的输入点不符。例:上限位组态为I0.0,下限位组态为I0.1,但实际I0.1为上限位,I0.0为下限位。
(3)轴在主动回原点期间到达硬件限位开关,轴将以组态的减速度减速,减速到启动/停止速度后反向运行寻找原点开关。如果限位开关行程过短,减速到启动/停止速度时轴运行超出了限位行程,在反向过程中会再次碰到限位开关,如下图所示,轴此时直接停止。如图 4 所示:
这种情况可以通过增加限位开关行程、增大组态的加速度/减速度或降低寻找原点时的逼近速度解决。
图 4 流程
18:S7-1200 CPU上电后轴的位置是多少?对于PTO轴或使用增量编码器的闭环轴,S7-1200 CPU每次上电后轴的位置都是0,不会保留断电前的位置值。如何保持断电前的位置,请参考常见问题 8。对于使用绝对值编码器的闭环轴,如果使用 Mode 6 或 7 进行了设置原点操作,那么 CPU 上电后将保持断电前的位置。回原点模式值意义如上介绍。
19:如何保持断电前的绝对位置?使用绝对位置编码器的闭环轴使用MC_HOME指令的模式6,7可以实现位置的断电保持;对于PTO或者使用增量型编码器的闭环轴是不能断电保持的,CPU断电重新上电后,轴的绝对位置会重新变成0,要实现位置保持,可按照下面的步骤操作。
(1)在全局DB块里分别建立一个Bool和Real类型变量,勾选Real变量的保持性,如图5 所示:
图 5 设置变量
(2)进入设备组态界面,在"系统和时钟存储器"页面启用系统存储器字节,分配系统存储器参数时,需要指定用作系统存储器字节的 CPU 存储器字节。首次循环对应的位启动后的第一个程序循环中为 1 ,否则为 0。如图 6 所示
图 6 激活系统和时钟存储器
(3)在 Main [OB1]中,先使用M1.0置位标志位,然后使用“MC_Power”指令启动轴后调用“MC_Home”指令的 Mode 0 ,重新装载断电前绝对位置,然后复位标志位,最后当前位置“ActualPosition”传送到第一步建立的变量中。如图 7、 图 8 所示。
注:如果存在多个运动控制指令,如“MC_Home”指令,每个指令的背景 DB 块需要单独创建,以免产生冲突。可以根据实际工艺情况,在合适的时间点执行“MC_Power”指令和“MC_Home”指令装载新的断电前的绝对位置。
图 7 程序 1
图 8 程序 2
20:如何修改轴当前的位置?对于 PTO 轴或使用增量编码器的闭环轴,使用 MC_Home 指令的 Mode=0 方式,修改当前轴的位置。对于使用绝对值编码器的闭环轴,使用 MC_Home 指令的 Mode=7 方式,修改当前轴的位置。回原点模式值意义如上介绍。
关注我,工控PLC布道师
工控路上,与你一路前行!
,