基于C#的VFD闭环位置控制

2015-05-06 01:28:36沈阳延锋江森座椅有限责任公司沈阳110000
山东工业技术 2015年3期
关键词:闭环控制编码器变频器

任 强(沈阳延锋江森座椅有限责任公司,沈阳 110000)

基于C#的VFD闭环位置控制

任强
(沈阳延锋江森座椅有限责任公司,沈阳110000)

在位置控制闭环控制系统中如果采用PLC+VFD的方式,由PLC取得编码器或光栅尺的位置信息并进行处理,处理速度相对较慢,稳定性差。在一些大型的驱动产品设计当中普遍在变频器内部使用位置、速度闭环控制方式,这一方式很好的解决了定位精确与稳定性的问题。本文通过介绍使用C#编写闭环控制程序,使大家了解如何使用这种技术实现精确定位控制。

闭环控制;变频器;精确定位;位置控制

在变频驱动技术中,定位控制是一项比较复杂的技术。简单定位如使用凸轮开关触发,定位精度较差。如果需要精确定位,比较可靠的办法是采用电机旋转编码器、直线光栅尺编码器读取位置信息。编码器通过RS485总线方式与变频器的接口连接。变频器内部拥有中央处理单元(CPU)以及强大的内部程序系统,时刻高速处理接收到的数据,实时进行速度与位置控制。

下面以SEW公司的MOVEDRIVE系列变频器产品为例,介绍如何使用C#编程内部程序以实现驱动器精确定位的。MOVEDRIVE产品支持汇编语言与C#编程,基本指令与语法传统计算机语言基本一致。稍有不同的是,MOVEDRIVE中包含一些特殊指令、函数(如读取编码器指令,位置控制指令等),以及具有固定功能的变量。

在编写闭环程序之前需要了解控制方式。使用外部IO点进行控制时,需要了解相应IO的配置信息。变频器内部程序中某些IO点功能是固定的,比如DI00是设备紧停等。内部变量是以Hxxx的形式定义的,变量范围H000~H1024。每个变量由8个Bit位组成,某些变量的功能也是固定的比如H484.1设备使能。

变频器内部程序可以并行运行两个任务(TASK1、TASK2)。两个任务在编程的时候是写在一个程序当中,需要了解的是这两个任务同时运行,互不干涉。这样可以使用一个任务进行位置控制,另一个任务进行位置监控并控制IO点输出。

本文介绍一台具有正反两个方向,两个停止位设备的闭环程序开发过程。变频器的运行使用IO点控制,包括设备紧停、设备使能、正转、反转、手自动、定位点等。为了便于编程引用,将各个IO点定义为变量名方式。代码如下:

#defineE_ReglersperreDI00//定义变量指向DI00点,紧急停止

#defineE_FreigabeDI03//定义变量指向DI03点,设备使能

#defineE_Positions_BIT_0DI11//位置Bit0

#defineE_AutomatikDI15//手动、自动控制模式

#definePosition_1H1//定义变量Position1为H1,用于设定返回位置

#definePosition_2H2//定义变量Position2为H2,用于设定前进位置

程序中还可以对某些内部标志位的操作定义为子过程,便于编程时随时调用。例如:

#defineSet_Rechtslauf_BitSet(H484,2)//设置内部变量H484的第2个Bit位为1。H484变量为电机顺时针旋转标志位,通过设置该位来使电机正转。

#defineReset_linkslauf_BitClear(H484,2)//将内部变量H484的第2个Bit位清0,使电机正转停止。

对变量声明、定义之后,即可开始主程序编程。主程序开始使用固定的过程名“main()”。

在主程序中首先启动任务2(TASK2),TASK2是实时监控编码器数据,发现当前位置达到设定值即输出IO信号,使设备做出停止动作。TASK1是自动启动的,所以此时两个任务并行运行。接下来对定义的变量赋值。位置、速度设定:

Position_1=1299//对位置1(H1)赋值为位置值1299

Position_2=4322//对位置2(H2)赋值为位置值4322

下面开始编写程序核心部分,位置定位。代码如下:

Positionieren()//定义定位过程

If(PositionAngewaehlt&&E_Positionierfreigebe)//如果位置bit0 至bit中任一位不为0则继续执行。这三个bit位是PLC发过来的位置信息。

Merker_Istposition=Actpos_Abs//将设备当前位置存入变量

Merker_Sollposition=ZielpositionNeu//将目标位置存入变量

Fahrstrecke=(Merker_Sollposition_INKR-Merker_IstPosition)//计算当前位置与目标位置的差值

if(Fahrstrecke>1)//确定电机旋转方向,如果位置差值大于1则赋值给变量正转,否则赋值反转。

Drehrichtung=RECHTS//正转

Else

Drehrichtung=LINKS//反转

if(Drehrichtung==RECHTS)//如果正转则向下执行正转程序。

Reset_Linkslauf//清除H484.3,禁止反转操作

Set_Rechtslauf//设定H484.2,开动电机正转

if(E_Automatik&&(Fahrstrecke>Umschaltpunkt_1))//自动且目标与实际位置差值大于700

_SetSys(SS_N11,Eilgang)//则设定转速为1400转每分钟。

if((!E_Automatik&&(Fahrstrecke>Umschaltpunkt_2))||(E_ Automatik&&((Fahrstrecke<Umschaltpunkt_1)&&(Fahrstrecke>Umschaltpunkt_2))))//手动状态且目标与实际位置大于65,或自动状态目标与实际差值在65至70之间

_SetSys(SS_N11,Speed_Hand)//则转速设定为200转每分钟。

if((Fahrstrecke>Umschaltpunkt_3)&&(Fahrstrecke<Umschaltpunkt_2))//目标与实际差值在1~65之间

SetSys(SS_N11,Schleichgang)//则设定转速为50转每分钟。

上述代码是控制电机正转的过程,反转过程与正转类似。由于在主程序中启动了TASK2,TASK2在实时的监测着设备的位置信息,如果发现实际位置与目标位置在设定误差范围内,则输出相应的IO信息,停止电机运行。

目前在很多高端的变频器产品当中,都具有内部闭环控制功能。通过变频器内部编写的闭环控制程序,很好的解决了PLC+VFD系统的闭环控制定位精度、稳定性问题,同时使PLC控制程序编写更加简单,提高了编程效率。

任强,男,辽宁沈阳人,助理设备工程师,大专,研究方向:电气设备管理方向。

猜你喜欢
闭环控制编码器变频器
基于LMI的过渡态主控回路闭环控制律优化设计
变频器在电机控制系统中的选择与应用
防爆电机(2020年3期)2020-11-06 09:07:42
基于LabVIEW的变频器多段速控制
测控技术(2018年5期)2018-12-09 09:04:50
适用于厚度在线测量的水压闭环控制系统
测控技术(2018年1期)2018-11-25 09:43:30
基于FPGA的同步机轴角编码器
智能车竞赛中的闭环控制算法应用分析
电子制作(2018年11期)2018-08-04 03:25:58
简析变频器应用中的干扰及其抑制
电子制作(2017年7期)2017-06-05 09:36:13
基于PRBS检测的8B/IOB编码器设计
JESD204B接口协议中的8B10B编码器设计
电子器件(2015年5期)2015-12-29 08:42:24
SSSC的双闭环控制策略及仿真分析
电测与仪表(2015年3期)2015-04-09 11:37:38