西门子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;代码分析
- 背景数据块DB100:定义了轴的各种参数,像当前实际位置
POSACT初始设为0,目标位置POSTARGET设为100(单位根据实际情况,这里假设为某种长度单位),速度VELOCITY设为50,加速度ACCEL和减速度DECEL都设为10 。同时还有控制命令,比如使能ENABLE设为TRUE,禁用DISABLE设为FALSE,位置模式POS_MODE设为1(代表绝对位置模式)。 - 调用 “MC_MoveAbsolute” 块:这是西门子提供的标准轴控制指令,用于绝对位置运动控制。将背景数据块
DB100关联到AXIS参数,指定目标位置POSITION为数据块中的目标位置,速度等参数同理。DONE和ERROR输出用于判断运动是否完成以及是否出错,分别连接到M10.0和M10.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;代码分析
- 参数设置:
ID是通讯连接号,这里设为W#16#100。ADDR指定本地要发送的数据区,这里是DB20从偏移0开始的20个字节数据;RADDR指定远程接收数据区,即远程PLC的DB30从偏移0开始的20个字节数据。 - 返回值与状态:
RET_VAL返回错误代码到MW10,我们可以通过检查这个值来判断通讯是否成功。BUSY标志位M12.0用于指示通讯是否正在进行。这样就可以通过PUT块将本地PLC的数据发送到远程PLC 。GET块的原理类似,只是方向相反,用于从远程PLC读取数据。
通过上述轴控制、报警以及通讯功能的整合,就完成了这台装路由器壳子机器的PLC程序编写。整个程序基于实际项目,在轴控制等方面积累了不少经验,希望能给大家在西门子1200 PLC开发中带来一些启发。大家有什么问题或者想法,欢迎在评论区交流。