西门子1200plc轴运动控制程序,此程序是之前给海康威视做的一台装路由器壳子的机器,程序包括有调用轴控制块做的控制3个伺服,1个电缸,还有用PUT GET块与上下游plc通讯,轴控制块和气缸报警块都是自己写的,已经在很多个项目上成熟应用,可以直接调用,对于做西门子1200轴控制等有很好的学习借鉴意义,程序为实际项目

最近在研究西门子1200 PLC的轴运动控制,偶然翻到之前给海康威视做的一台装路由器壳子机器的程序,觉得挺有意思,拿出来和大家分享分享。这个程序在实际项目中应用,包含了不少实用的功能,相信对做西门子1200轴控制的朋友会有很好的学习借鉴意义。

一、硬件配置与整体框架

这个项目里我们要控制3个伺服和1个电缸,还要与上下游的PLC进行通讯。硬件上,西门子1200 PLC作为核心控制器,与各个执行机构以及其他PLC相连。软件层面,主要由轴控制程序和通讯程序构成。

二、轴控制程序

轴控制是这个项目的关键部分。我们调用轴控制块来实现对3个伺服和1个电缸的精确控制。这里我自己写了轴控制块,经过多个项目的考验,已经相当成熟,直接调用就行。

西门子1200plc轴运动控制程序,此程序是之前给海康威视做的一台装路由器壳子的机器,程序包括有调用轴控制块做的控制3个伺服,1个电缸,还有用PUT GET块与上下游plc通讯,轴控制块和气缸报警块都是自己写的,已经在很多个项目上成熟应用,可以直接调用,对于做西门子1200轴控制等有很好的学习借鉴意义,程序为实际项目

先看看轴控制块的代码示例(以其中一个伺服轴为例,简化示意):

// 定义轴控制块的背景数据块
DB100 : "AXIS_CTRL"
{
    // 轴的参数设置
    POS_ACT := 0.0;
    POS_TARGET := 100.0;
    VELOCITY := 50.0;
    ACCEL := 10.0;
    DECEL := 10.0;
    // 控制命令
    ENABLE := TRUE;
    DISABLE := FALSE;
    POS_MODE := 1;
}
// 调用轴控制块
CALL "MC_MoveAbsolute"
    AXIS := DB100;
    POSITION := DB100.POS_TARGET;
    VELOCITY := DB100.VELOCITY;
    OVER_VELOCITY := 100;
    OVER_ACCEL := 100;
    OVER_DECEL := 100;
    DONE => M10.0;
    ERROR => M10.1;

代码分析

  1. 背景数据块DB100:定义了轴的各种参数,像当前实际位置 POSACT 初始设为0,目标位置 POSTARGET 设为100(单位根据实际情况,这里假设为某种长度单位),速度 VELOCITY 设为50,加速度 ACCEL 和减速度 DECEL 都设为10 。同时还有控制命令,比如使能 ENABLE 设为 TRUE,禁用 DISABLE 设为 FALSE,位置模式 POS_MODE 设为1(代表绝对位置模式)。
  2. 调用 “MC_MoveAbsolute” 块:这是西门子提供的标准轴控制指令,用于绝对位置运动控制。将背景数据块 DB100 关联到 AXIS 参数,指定目标位置 POSITION 为数据块中的目标位置,速度等参数同理。DONEERROR 输出用于判断运动是否完成以及是否出错,分别连接到 M10.0M10.1 。这样通过这个块,就能实现伺服轴按照我们设定的参数进行绝对位置运动。

另外对于电缸的控制,原理类似,只是具体的参数和控制逻辑可能稍有不同,根据电缸的特性进行调整。

三、气缸报警块

除了轴控制,气缸报警块也是自己写的,同样在多个项目中成熟应用。代码示例如下(简单示意):

// 气缸状态检测与报警逻辑
A I0.0 // 假设I0.0连接气缸的状态检测传感器
= M11.0 // 将检测状态存到M11.0
A M11.0
AN M11.1 // M11.1为之前的报警状态,用于判断是否是新报警
= M11.2 // 新报警标志
= Q0.0 // 假设Q0.0连接报警指示灯
= M11.1 // 更新报警状态

代码分析

这段代码主要实现对气缸状态的检测和报警功能。首先通过输入点 I0.0 获取气缸状态,并将其存储到中间变量 M11.0 。然后判断当前状态是否为报警状态(这里简单以 I0.0 为1代表报警情况),并且之前没有报警(通过 AN M11.1 判断),如果满足条件,则置位新报警标志 M11.2,点亮报警指示灯 Q0.0,同时更新报警状态 M11.1

四、PUT/GET块通讯

为了实现与上下游PLC通讯,我们使用了PUT/GET块。下面是一个简单的PUT块通讯代码示例:

// PUT块通讯示例
CALL "PUT"
    ID := W#16#100;
    ADDR := P#DB20.DBX0.0 BYTE 20; // 本地数据区
    RADDR := P#DB30.DBX0.0 BYTE 20; // 远程数据区
    RET_VAL := MW10;
    BUSY := M12.0;

代码分析

  1. 参数设置ID 是通讯连接号,这里设为 W#16#100ADDR 指定本地要发送的数据区,这里是DB20从偏移0开始的20个字节数据;RADDR 指定远程接收数据区,即远程PLC的DB30从偏移0开始的20个字节数据。
  2. 返回值与状态RET_VAL 返回错误代码到 MW10,我们可以通过检查这个值来判断通讯是否成功。BUSY 标志位 M12.0 用于指示通讯是否正在进行。这样就可以通过PUT块将本地PLC的数据发送到远程PLC 。GET块的原理类似,只是方向相反,用于从远程PLC读取数据。

通过上述轴控制、报警以及通讯功能的整合,就完成了这台装路由器壳子机器的PLC程序编写。整个程序基于实际项目,在轴控制等方面积累了不少经验,希望能给大家在西门子1200 PLC开发中带来一些启发。大家有什么问题或者想法,欢迎在评论区交流。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐