方案 | PLC侧实现 | 报文类型 | 位置计算位置 | 复杂度 |
| 方案一 | 工艺对象 + MC指令(PLC Open) | 标准报文3 | PLC端(中央控制) | 推荐入门 |
| 方案二 | FB284(SINA POS) | 西门子报文111 | 驱动端(EPOS模式) | 功能最全 |
| 方案三 | FB38002(Easy SINA POS) | 西门子报文111 | 驱动端(EPOS模式) | FB284简化版 |
这是最"西门子正统"的方式——在PLC里建轴、配参数、用PLC Open标准指令编程。
博途配置六步走:
创建项目 → 添加 S7-1200 CPU
在网络视图中添加 V90 PN(需先安装GSD文件)
建立网络连接,分别设置IP和设备名称(两边名称必须一致!)
在设备视图中为 V90 配置标准报文3(速度设定值+实际位置反馈)
项目树 → 右键PLC → 添加新对象 → 工艺对象 → 定位轴
驱动器选择 PROFIdrive
选择连接到PROFINET总线上的V90 PN
配置编码器数据交换
电机每转脉冲数(如10000 pulses/rev)
电机每转行程(如丝杆导程5mm,就填5.0)
最大速度、加速度、减速度、加加速度(Jerk)
推荐"参考点+零标记"模式
关联原点开关输入
先在轴的工艺对象控制面板里手动测试
确认方向、速度、位置反馈正确后,再写程序
用 V-Assistant 调试软件配置:
步骤 | 操作 | 注意事项 |
1 | 选择控制模式为"速度控制模式" | 方案一时选速度模式,位置计算在PLC |
2 | 选择标准报文3 | PZD自动分配 |
3 | 设置PROFINET → 配置网络 | IP和设备名称必须与博途项目一致 |
4 | 保存参数 → 重启驱动器 | 参数保存后必须重启才生效 |
踩坑提醒:设备名称不一致是新手最常犯的错误。PLC搜不到V90,先查设备名称,再查IP,90%的问题在这两步解决。
S7-1200的运动控制指令遵循 PLC Open 标准,所有指令在博途右侧"指令 → 工艺 → 运动控制"文件夹中。
指令 | 功能 | 触发方式 | 典型用途 |
| MC_Power | 使能/禁用轴 | 持续调用 | 第一步,必须放在所有MC指令前面 |
| MC_Reset | 确认错误 | 上升沿 | 报警复位 |
| MC_Home | 回原点/设参考点 | 上升沿 | 建立坐标系 |
| MC_Halt | 减速停止(可恢复) | 上升沿 | 暂停,停了还能继续 |
| MC_Stop | 停止并阻止新命令 | 上升沿 | 急停类操作 |
| MC_MoveAbsolute | 绝对定位 | 上升沿 | 移动到指定坐标 |
| MC_MoveRelative | 相对定位 | 上升沿 | 移动指定距离 |
| MC_MoveVelocity | 速度模式运行 | 上升沿 | 匀速运行,不限位置 |
| MC_MoveJog | 点动 | 电平保持 | 手动调位 |
| MC_ChangeDynamic | 更改动态参数 | 上升沿 | 运行中切换速度/加速度 |
关键规则:MC_Power 必须在 OB1 中持续调用,不能只用上升沿触发必须放在所有其他 MC 指令之前Enable=FALSE 时,StopMode 决定停车方式建议将驱动器"就绪"和"无报警"信号作为 Enable 的联锁条件
Mode | 名称 | 说明 | 适用场景 |
| 0 | 绝对式直接回原点 | 直接设置轴位置=Position参数值 | 绝对值编码器,断电不丢位置 |
| 1 | 相对式直接回原点 | 新位置=当前位置+Position值 | 不需要找机械参考点 |
| 2 | 被动回原点 | 不主动找参考点,等外部触发 | 外部机械已经到位 |
| 3 | 主动回原点 | 自动寻找参考点开关+零标记 | 增量编码器,每次上电必须回零 |
回零顺序口诀:增量轴先回零,绝对轴直接设;Mode 3最常用,Mode 0最省事。
三个必知要点:Execute 必须用上升沿触发——用常开触点时,要确保信号是一个脉冲,不是一直保持TRUE背景数据块不能共用——每条MC指令必须有独立的背景DB,否则数据冲突Done 只保持一个扫描周期——看不到Done=TRUE是正常的,用触发器捕获或忽略
MC_Halt vs MC_Stop:两种停止的区别
对比项 | MC_Halt | MC_Stop |
停止后轴状态 | 保持使能,可继续运动 | 保持使能,但阻止新命令 |
恢复方式 | 直接发新运动指令即可 | 需先处理Stop状态才能接受新命令 |
动态参数 | 可用组态值或自定义 | 三种模式:急停/最大/自定义 |
典型用途 | 正常暂停 | 急停、安全停止 |
每个轴的工艺对象都是一个DB块,可以直接读取内部变量:
在 MOVE 指令中用 MOVE IN := "轴_1".Position 传给HMI变量,即可在触摸屏上实时显示轴位置。
现象 | 可能原因 | 解决方法 |
电机不动 | 轴未使能 / 限位触发 / 未回零 | 检查MC_Power的Status;检查限位DI;先执行MC_Home |
定位偏差大 | 每转行程参数填错 / 电子齿轮比不对 | 重新核算机械参数:丝杆导程×减速比 |
运动抖动 | Jerk(加加速度)太小 / 增益不合适 | 增大Jerk值;调整伺服驱动器增益 |
Done信号看不到 | 扫描周期太快,Done只保持一个周期 | 正常现象,用触发器捕获或忽略 |
PLC搜不到V90 | 设备名称不一致 / IP不在同网段 | 核对两边设备名称(大小写敏感);检查IP和子网掩码 |
MC指令不响应 | 背景DB重复使用 / Execute不是上升沿 | 每条指令用独立DB;Execute用上升沿触发 |
断电丢位置 | 用的是增量编码器 | 改用绝对值编码器,或在断电前备份位置数据 |
报错0x8081 | 指令参数超范围(如位置超限) | 检查Position是否在软件限位范围内 |
S7-1200运动控制的核心就三步:建轴(工艺对象)→ 使能(MC_Power)→ 定位(MC_MoveAbsolute/Relative/Velocity)。PTO用脉冲,PROFINET用报文,背景DB不能共用,Execute必须上升沿,回零是定位的前提。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!