【PLC学习笔记】S7-1200 直流电机控制

一、使用模拟量控制电机速度

      首先我们使用PLC模拟给定电机一个电压值来控制电机的速度 电机运行电压在0~10V之间,而PLC自带的模拟量输出参数如下表所示,它的可输出电流为0~20mA。根据欧姆定律,我们可以计算得到电压全速运行需要加10V电压时,电流满量程为20mA,R=U/I=500Ω,也就是说我们需要在电流输出端并联500Ω电阻,输出到电机的电压为全压,电机才全速运行。

b213c3e7624e4b6bb3cebd30e14d03cd.jpeg

 由于电阻的价格问题,这里我们使用另外一种方法输出0~10V电压,使用信号版输出驱动电机运行。

信号板

 

1d04e22b65a04f89ba89928431bb6218.jpeg

 图1  SB 1232信号板

       信号版型号为 6ES7232-4HA30-0XB0SIMATIC 模拟输出AQ,SB 1232,1 个模拟输出, +/-10V DC(12 位分辨率)或 0~20mA(11 位分辨率),CPU内部对应值为0-27648,电压与此处的对应值就是模拟量与数字量的关系。电压是我们想输出的0~10V的连续量,而CPU中0对应工程量最小的值(即这里与0V对应),27648对应工程量最大值(即这里与10V对应)。

 

标准化指令和缩放指令

  • 标准化指令 NORM_X

368fecec3cfe47fd87535200980cbe01.png

        我们现在是通过给定一个电压来控制电机的速度。所以这里的VALUE上是设定电压,那MIN最小值是0,MAX最大值是10V,OUT端输出值为VALUE/(MAX-MIN)且0≤OUT≤1。这里相当于将设定值转换成了一个百分数,假设设定值VALUE=5,那么OUT=50%。

 

  • 缩放指令 SCALE_X

c218a26ca40d4a5995daf801f459c000.png

我们最终的目标是输出设定的电压值,使电机以设定电压值运行。我们这里使用信号版的一个模拟量输出(AQ)输出电压,而0~10V的电压PLC内部的对应值为0-27648,所以这里缩放指令最大值为27648,最小值为0而VALUE是上一步标准化后的输出值,而缩放后的输出我们直接使用信号板的模拟量输出QW80输出给电机,从而完成了对电机的控制。

 

小结

     控制电机转动,首先设定一个0~10V的电压值,而PLC内部对于0~10V的电压对应值为0-27648。我们先使用标准化指令将设定值转换成了一个百分数,再使用缩放指令将设定值转换成PLC内部对应的值,然后将其输出。

 

 

 

二、高数计数器的使用

前文中我们使用PLC输出一个模拟量电压控制电机运行速度,我们希望给定一个电压后可以实时显示出电机的转速r/min。这里使用高速计数器去测编码器的脉冲数通过一定的计算就可以显示出电机的转速。

硬件的组态

1.启用高速计数器

0421bc567709496bb102a1402b2eb7ff.png

 2.测量值修改为 频率

5169570bbb7c49368b8d8e2a93f68c4d.png

3.在硬件输入中修改高速计数器采集回脉冲的输入端,这里使用I0.2因此硬件接线采集回来的脉冲连接I0.2输入端。

ece3f4b3ef0040ee92a286da7bcca61b.png

4.这里的输出ID1000

81c6cda8da6b42448892f45bfda148b9.png

5.数字输入口I0.2启用了高速脉冲计数器,我们需要在数字量通2中将其输入滤波器改小,这样高频的信号才不会被滤除,可以正常的采集回PLC内部。

7c59f6dd66384077a225be5b9d4722f4.png

 

程序介绍

24646ddff86b45098f0d78c0730645f0.png

 

万能转换将采集回来的脉冲ID1000转换成实数

776046a58b1540c2b790f624924289f6.png

乘以60得到每分钟的脉冲数

 97bc6b4e3329454aaf9438af5717036e.png

 12是编码器的分辨率  电机转一圈产生12个脉冲 这里除以12得到了每分钟的转速。

 

小结:我们使用PLC高速计数器去测编码器的脉冲数,并通过一定的计算得到了电机的实时转速。

 

 

 

 

三、直流电机的PID控制

       开环和闭环控制的区别就是闭环控制是根据转速的反馈信号来控制转速,闭环控制则没有反馈信号,直接控制设定的转速。

直流电机转速开环控制:直流电机在给定一个速度信号后就不受控制了,随着负载的变动,电机的速度也将有所变动,这个变动是由电机的特性决定的。

闭环控制:直流电机在给定一个速度后不断的将输出端的信息(转速)反馈到输入端,与输入端的给定信号作比较,当发现电机速度发生变化而使输出端反馈信号不满足原来输入信号的要求时,将会改变输入信号,使电机速度回到给定值为止(不可能完全回到给定值)。

可以看出,速度的开环控制比较简单,但速度变化大;而速度的闭环控制较复杂,而系统的速度变化要小得多。

闭环控制的基本原理是把控制系统输出量的一部分或全部,通过一定方法和装置反送回系统的输入端,然后将反馈信息与原输入信息进行比较,再将比较的结果施加于系统进行控制,避免系统偏离预定目标。


     之前是给一个固定的电压去控制电机的转速,这里我们希望给一个转速电机可以稳定输出这个速度。这里我们将实现直流电机的闭环PID控制,由于1200中已经做好了PID相关的模块,我们只需要组态设定参数就可以完成对电机的PID控制。

 

S7-1200中PID的调试步骤

1.首先我们需要新建一个OB块,选择Cyclic interrupt循环中断

04d3ce9ad5f94b4985066df5bc94e976.png

2.在右侧工艺-PID控制-Compact PID  -  PID Compact

a9e62b8de3634977bd31badb425ab662.png

 3.将PID Compact插入OB30程序段

4a8ad02b190c4aa68d1f9b18eb85e8c4.png

 4.参数设置

4597dabfe2e949378005c7e42a0856ff.png

Setpoint为设定转数 0~4000r/min

Input 处为换算后的转速  MD208  ( 图片错误❌)这里用到前文主函数中的一段程序,我们使用高速计数器将编码器脉冲采集回PLC,乘以60转为分钟,除以12(编码器上有12个孔,转一圈产生12个脉冲)转换为r/min

Output_PER QW80这里使用信号版输出0~10V

5.点击标记处进去组态

4f00ad34d5fa4eca978c3f20db9e4298.png

 6.将控制类型改为速度

将Mode设置为:自动模式

667a8bd1a1d74333a944ee1a31e0d1fc.png

 

7.将改为Input

06e53fb595be4c639c9a42a0029e5878.png

 8.过程值限制修改为0~4000r/min

f163049989134fd8bf180bcd4bc85411.png

 

9.PID参数可以将其改为PI

18e2f366c3ed4a1f8c61a202dcba7bed.png

 

10.点击调试进去PID调试界面

粗调

 

细调

4a39950023054575927611a21fa2e6eb.png

 

就此PID调试结束。

20a506e3f6574731a5b78aa13f56fa1f.png

 2946819f80634108bf0d815ce4fe193c.png 

 

 

 

小结:这里我们将上文中通过高速计数器测得转换后得到的电机实时转速反馈到给定值输入端形成了闭环控制,可以实现电机速度稳定输出给定转速。

 

 

 

 

 

 

 

 

 

参考文献:

具体模拟量转换及标准化指令缩放指令的理论知识

 

 

 

 

 

 

 

 

 

 

 

 

  • 43
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的示例,展示如何使用西门子S7-1200 PLC控制伺服电机。 首先,需要连接伺服电机PLC。确保伺服电机PLC之间的通信接口正确配置,并且电机的供电和控制线接线正确。接下来,需要使用西门子TIA Portal软件创建一个新的PLC项目。 在TIA Portal中,需要创建一个新的硬件配置并配置PLC。然后,需要添加伺服电机模块并将其配置为所需的参数。 接下来,需要编写PLC程序以控制伺服电机。这可以通过使用ST(结构化文本)编程语言来完成。以下是一个简单的例子: ``` // 定义输入输出 VAR_INPUT start: BOOL; // 启动信号 stop: BOOL; // 停止信号 END_VAR VAR_OUTPUT running: BOOL; // 运行状态 END_VAR // 程序主体 VAR position: REAL; // 当前位置 target: REAL; // 目标位置 error: REAL; // 误差值 output: REAL; // 输出值 END_VAR // 主程序 IF start THEN // 初始化位置和目标位置 position := 0; target := 100; // 设置伺服电机参数 // ... // 启动伺服电机 // ... // 设置运行状态 running := TRUE; END_IF IF running THEN // 读取当前位置 // ... // 计算误差值 error := target - position; // 计算输出值 output := error * Kp; // 将输出值发送给伺服电机 // ... // 判断是否到达目标位置 IF ABS(error) < tolerance THEN // 停止伺服电机 // ... // 设置运行状态 running := FALSE; END_IF END_IF IF stop THEN // 停止伺服电机 // ... // 设置运行状态 running := FALSE; END_IF ``` 在这个例子中,PLC程序会等待启动信号,并在接收到启动信号后初始化位置和目标位置,并将伺服电机设置为运行状态。程序将读取当前位置并计算误差值和输出值,然后将输出值发送给伺服电机。当误差值小于某个容差范围时,程序将停止伺服电机并将其设置为非运行状态。如果接收到停止信号,则程序将立即停止伺服电机并将其设置为非运行状态。 以上是一个简单的示例,具体实现需要根据具体的硬件和应用场景进行适当的调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值