APP下载

基于EPICS的伺服平台驱动开发

2017-05-18朱泽玮沈奶连

电子科技 2017年5期
关键词:伺服电机控制器驱动

朱泽玮,沈奶连

(上海理工大学 光电信息与计算机工程学院,上海 200093)

基于EPICS的伺服平台驱动开发

朱泽玮,沈奶连

(上海理工大学 光电信息与计算机工程学院,上海 200093)

针对实验物理与工业控制系统软件环境中缺乏伺服电机驱动支持,不能直接使用伺服电机搭建实验平台进行实验的问题。文中设计采用StreamDevice软件模块,配置IOC调用StreamDevices实现控制功能。建立伺服电机在EPICS环境下的输入输出控制器, IOC采用串口通信的方式,发送控制指令至伺服电机控制器,并由控制器和驱动器完成伺服电机的运动控制。制作了图形控制软件界面,方便操作员直观地对伺服电机操作控制。设计实现了伺服电机在EPICS环境下的精确运动控制和实时通信响应。

EPICS;StreamDevice;伺服电机驱动;IOC;运动控制

实验物理与工业控制系统(Experimental Physics and Industrial Control System, EPICS)是由美国洛斯阿拉莫斯国家实验室和阿贡国家实验室联合开发的分布式控制系统开发软件,主要用于开发基于网络的分布式控制系统[1-2]。EPICS系统具有运行稳定、结构灵活、开放性好等优点,支持多种操作系统和硬件平台,是目前大型科学实验装置及工业现场中,主流的分布式控制系统开发工具[3-9]。电机是工业现场中的常用设备,在多种类型的电机中,伺服电机平台以其高精度、高转速、负载能力强、适用范围广、响应速度快和运行稳定等优点,被广泛应用于工业控制和科学研究领域[10-11]。

EPICS系统对伺服电机的驱动支持较少,并且需要配合专有硬件使用[12-13]。为在EPICS系统中稳定使用通用伺服电机,设计采用StreamDevice模块,开发伺服平台在EPICS下的驱动,实现电机控制功能。本文研究结果主要用于上海同步辐射光源高精度光谱采集系统中。

1 StreamDevice

StreamDevice是由瑞士保罗谢尔研究所(Paul Scherrer Institute,PSI)开发并维护的开源软件模块,主要用于EPICS系统中,开发基于数据流通信的设备驱动和控制程序,即通过收发字符实现仪器或设备的控制。StreamDevice通过调用通讯模块asyn,实现多种通讯接口和协议的使用,常用的通讯接口有:串口通信(RS-232与RS-485等)、IEEE-488总线(即GPIB或HP-IB)和网络协议TCP/IP等[14]。

StreamDevice是EPICS环境中独立的软件模块,使用时由输入输出控制器(Input Output Controller,IOC)直接调用,作为设备支持,协助IOC实现控制功能,IOC软件结构如图1所示[15]。StreamDevice采用“数据库(Database file)+协议文件(Protocol file)”的形式完成设备驱动。其中,数据库面向操作员,操作员通过数据库完成系统控制功能;协议文件面向硬件设备,协议文件接收来自数据库的指令,并将其转译为设备控制指令发送至设备。

图1 IOC结构图

StreamDevice模块具有结构简单、稳定性高、实用性强和操作简单等优点,作为EPICS软件系统认可的驱动开发模块,由EPICS官方直接提供给用户使用,相关研究表明,StreamDevice可以用于大型工业控制系统的驱动开发[16]。

2 基于StreamDevice的伺服驱动开发

开发过程使用的伺服平台选用北京卓立汉光公司生产的PSA600-11AS-X型滑台,电机采用ASP-2000驱动,运动控制由MC600运动控制器完成,系统硬件实物如图2所示[17]。电机驱动和控制软件的开发,在CentOS 6.4操作系统下进行,开发过程中使用的软件模块如表1所示。

图2 伺服平台及其驱动控制器

表1 软件及其功能

软件模块名称软件版本软件模块功能EPICSbase3.14.12.3EPICS系统的base软件,是所有使用EPICS软件的基础synApps5-7EPICS控制系统开发常用工具集合包asyn4-21通用设备接口软件,用于底层硬件设备驱动与通信stream2-6基于字符串控制设备的开发软件模块CSS3.2.11控制图形界面开发软件

2.1 建立IOC应用

EPICS软件为控制系统开发者提供了标准的IOC应用,控制系统开发者可以在标准应用基础上,根据系统的控制功能,自行添加或者删减功能模块。使用StreamDevice开发设备驱动程序时,需要向IOC中添加StreamDevice模块和asyn模块的调用。具体方法是,在生成IOC的configure路径下,编辑Release文件,向文件中写入StreamDevice和asyn模块的安装路径,并在IOC根目录的App/src路径下,编辑Makefile文件,在文件中添加StreamDevice和asyn模块的依赖库并保存。返回IOC根目录后编译IOC,完成电机驱动IOC的建立。

2.2 数据库编写

根据EPICS的软件设计,系统控制功能是通过IOC实时数据库中的记录(record)实现,操作员通过对数据库中的记录进行操作,可以实现控制指令的发送和控制数据的读取。使用StreamDevice开发设备驱动时,数据库应为被控设备所有控制功能的集合,即将被控设备的实现的功能,转换为EPICS中数据库中的记录,运行在IOC中。

数据库中记录的编写遵循如下标准格式。记录一般以record起始,在record后的小括号中,指定记录的类型和记录在控制网络中的唯一名称。记录通过配置域(field)实现具体功能,对记录域的设置,在大括号中以field关键字完成。

record(record_type, record_name)

{

field (field_name, “valve1”)

field (field_name, “valve2”)

……

}

以下以伺服电机的绝对位移为例,简述记录的编写。操作员通过对该记录赋值,可以实现在伺服电机内部坐标系中,控制电机移动到指定的位置。根据记录的主要功能,选用ao(Analog Output,模拟输出)的记录类型,编写电动平台的控制指令。该记录名为MoveAbs,在记录编写中,采用宏变量“$()”化简编写过程,同时也便于管理和功能扩展。

record(ao, "$(P)$(R)MoveAbs")

{

field(DESC, "Move absolutely float x")

field(DTYP, "stream")

field(OUT, "@devDevSERM.proto moveA($(P)$(R)Axis) $(PORT) $(A)")

field(VAL, "0")

field(EGU, "um")

field(DRVL, "0")

field(DRVH, "600000")

}

确定记录类型和记录名称后,需根据记录的功能,对记录进行配置和初始化。其中,记录的主要功能通过VAL域、DTYP域和OUT域实现,DRVL域和DRVH域是对记录功能的增强,EGU域和DESC是对记录的完善。在记录功能方面,VAL域接收来自操作员的位置数据,并将该数据通过协议文件传递到电机控制器。操作员在IOC运行过程中,只需要在该记录的VAL域中写入数据,便可实现记录功能。VAL域的数据在传递过程中,通过DYPE和OUT两个域确定数据的流向。配置DYPE域为“stream”,表示VAL域值输出需要通过StreamDevice模块实现,而OUT域是用于指定使用StreamDevice时,具体的输出途径,即协议文件和其中需要执行的函数。在IOC运行过程中,为保障电机和其他设备安全,在记录中添加了DRVH和DRVL两个域,用于电机运动的软件限位。其中,DRVH用于限制电机行程的高位,DRVL限制电机行程的低位。只有当操作员输入的VAL数据在高低限位之间时,记录才会被触发。最后,记录使用DESC域对记录进行描述和注释,便于在IOC运行过程中查看记录功能,使用EGU域设置记录中数据的单位。

依照以上方法,依次将电机的全部功能及配置参数信息,改写为数据库中的记录,即可完成数据库的编写,即完成操作员与系统控制程序的交互接口设计,实现了控制数据从操作员到IOC软件的传递。而要实现控制数据由IOC软件传递到电机运动控制器,则需要IOC软件调用StreamDevice,通过StreamDevice软件中协议文件,将系统控制数据发送至被控电机设备。

2.3 协议文件编写

协议文件连接数据库与伺服电机控制器,其接收来自数据库的指令,并按照协议文件内容,将数据库指令转译为设备指令,发送至电机控制器。编写协议文件需要了解伺服电机控制器的控制指令,伺服平台的位移命令如表2所示。

表2 伺服电机控制指令

根据电机的控制指令,若要滑台X轴正向运动到a位置,操作员需要通过串口发送“GoPosition X,O,A,P,a”至电机运动控制器。由于功能设计需要,指令中的参数不需要全部开放,只保留轴标及位移量。协议文件中位移函数编写如下:

moveA

{

out "GoPosition %($1){X|Y|Z|T},O,A,P,%f";

}

在以上函数中,函数名为moveA。当电机位移记录被触发,记录将依次向下触发执行该函数,函数中“out”字符后引号内的全部内容,将被发送至电机控制器。在函数中,为增强函数的通用性,采用参数变量“($1)”,用于选择伺服电机驱动的坐标轴。参数变量的具体内容,在数据库中调用该函数时设置。同时,为保证参数变量传递的正确性,避免误操作,在协议文件的函数中加入了内容判别,只有当通过数据库传递的参数在X、Y、Z和T4个轴之中时,参数才会被接受。电机运动的绝对坐标位置,则通过记录中的VAL域,直接赋值在函数的“%f”处。当参数由数据库传递到协议文件的函数中后,函数便将控制指令通过串口发送至电机的控制器,有控制器实现滑台的运动控制。

按照以上的方法,将伺服电机全部控制指令,转化为数据库中的记录和协议文件中的函数,即可通过IOC应用,实现在EPICS环境中实现伺服电机的运动控制。

2.4 配置启动脚本

启动脚本st.cmd文件是IOC启动前最后需要编写的文件。该文件负责IOC最高层级的配置,包括运行环境配置、通信方式选择、实时数据库加载、IOC功能模块使能及IOC初始化等。编译完成的IOC通过执行启动脚本开始运行。

使用st.cmd文件启动IOC时,首先需要导入envPaths文件配置IOC的运行环境,同时需要在启动脚本中,指定IOC使用的协议文件的路径。协议文件的路径通过epicsEnvSet指令,设置环境变量STREAM_PROTOCOL_PATH完成。启动脚本中相关配置命令如下:

###### Set up environment

< envPaths

epicsEnvSet "STREAM_PROTOCOL_PATH" "$(DevSERM)/db"

此外,IOC中的宏变量及通信接口,也需要在启动脚本中利用epicsEnvSet指令完成设置和初始化。设置时采用“$(变量名=变量内容)”的格式,直接将变量的内容赋值给所用的变量。伺服电机的控制器采用USB转串口的通信方式,因此在指定通信端口时采用了ttyUSB的USB口,若硬件中采用串口,则需要将ttyUSB改为ttyS。

######Allow PV name prefixes and serial port name to be set from the environment

epicsEnvSet "P" "$(P=X14W1:EH:RIXS:)"

epicsEnvSet "R" "$(R=Zd:)"

epicsEnvSet "TTY" "$(TTY=/dev/ttyUSB1)"

配置启动脚本的最后一步,就是设置软件通信采用的通信协议。StreamDevice调用asyn模块作为通信模块,在配置通信方式上,也使用asyn模块的配置函数进行设置。

###### Set up ASYN ports

drvAsynSerialPortConfigure("L0","$(TTY)",0,0,0)#定义设备名称

asynSetOption("L0",-1,"baud","19200")#串口波特率19200

asynSetOption("L0",-1,"bits","8")#8位数据位

asynSetOption("L0", -1, "parity", "none")#无校验位

asynSetOption("L0", -1, "stop", "1")#1位停止位

asynSetOption("L0", -1, "clocal", "Y")#本地连接,无调制解调器控制

asynSetOption("L0", -1, "crtscts", "N")#无输出硬件流控制

drvAsynSerialPortConfigure()函数用于配置通信接口的基本信息,函数有如下的调用形式:drvAsynSerialPortConfigure("portName","ttyName",priority,noAutoConnect,noProcessEosIn)。其中,portName为应用中通讯端口的名称,ttyName为硬件端口,priority用于配置当前端口的优先级,noAutoConnect用于配置端口是否自动连接,noProcessEosIn配置字符串的结束符处理方式。

通信方式的配置使用asynSetOption("portName",addr,"key","value")函数。其中,portName为配置的通讯口的名称,addr是当一个通讯端口对应多个硬件时,需要指定的硬件地址,key为可以配置的参数,value是key参数的数值。key与val的内容如表3所示,方括号中的数据为软件默认参数[18]。

表3 asynSetOption函数参数

在启动文件中完成以上配置,便可选择加载数据库,并通过iocInit函数初始化并启动IOC程序。

###### Load record instances

cd $(DevSERM)

dbLoadRecords("db/devDevSERM.db","P=$(P),R=$(R),PORT=L0,A=0")

cd $(ASYN)

dbLoadRecords("db/asynRecord.db","P=$(P)$(R),R=asyn,PORT=L0,ADDR=-1,OMAX=0, IMAX=0")

###### Start EPICS

cd ${TOP}/iocBoot/${IOC}

iocInit2.5 测试

测试采用CSS(Control System Studio)软件制作图形化控制界面,完成伺服电机的可视化控制,控制界面如图3所示。Drive部分主要用于电机的运动控制,Base部分用于配置平台的详细参数,Dynamics是用于配置电机运行时如速度、加速度等运行参数。

图3 电机控制界面

在测试条件下,在控制界面的MoveAbs一栏中输入电机的坐标位置,并点击回车键确认,IOC便会将操作员输入的位置坐标传递至伺服电机的控制器,并由控制器驱动平台运动到指定位置。

3 结束语

本文使用StreamDevice开发了伺服电机驱动程序及控制IOC,实现了伺服平台在EPICS软件环境下的驱动及控制。实验结果表明,采用StreamDevice开发的伺服电机驱动,实现伺服电机多种方式运动控制、运动参数调节、返回值读取等常用功能,具有较高的稳定性,可以用于实验系统的搭建中。同时,相较于EPICS系统中其他方式的驱动开发,使用StreamDevice模块开发流程较为简单,节约了开发时间,提高了开发效率。

[1] Martin R Kraimer, Janet Anderson, Andrew Johnson, et al. EPICS:input / output controller application developer’s guide[EB/OL].(2003-11-03)[2016-03-28]http://www.aps.anl.gov/epics/base/R3-14/3-docs/AppDe-vGuide.pdf.

[2] 丁建国,刘松强.EPICS系统中的网络技术[J].核技术,2006,29(5):380-383.

[3] Joshi R,Singh M,Trivedi K.EPICS based monitoring and

control in data acquisition system[J]. International Journal of Computer Science Engineering,2014,3(2):95-100.

[4] Ito T U,Nakahara K,Kawase M,et al.The EPICS-based remote control system for muon beam line devices at J-PARC MUSE[J].Journal of Physics,2010, 225(1):12-22.

[5] Stepanov S,Makarov O,Hilgart M,et al.JBluIce-EPICS control system for macromolecular crystallography[J].Acta Crystallographica Section D: Biological Crystallography,2011,67(3):176-188.

[6] 张德敏,金晓,黎明,等.EPICS在加速器控制系统中的应用[J].强激光与粒子束,2008,20(4):597-600.

[7] 刘平,周永年,米清茹,等.光束线站EPICS数据采集系统研究[J].核技术,2010,33(6): 415-419.

[8] 辛文曲,李刚,欧阳华甫,等.CSNS直线加速器前端水冷控制系统的研制[J].核电子学与探测技术,2014,34(3):345-348.

[9] 刘群,汪啸,贺博.EPICS环境下PLC在光束线安全防护控制中的应用[J].核电子学与探测技术,2015,35(7):662-665.

[10] 张博,朱宇军,和征.三相无刷直流伺服电机控制系统的研究[J].电子科技,2008,21(9): 67-69.

[11] 朱卫云,付东翔,葛懂林.基于RBF神经网络的永磁同步伺服电机控制系统[J].电子科技,2016,29(1):161-164.

[12] Tim Mooney,Joe Sullivan,Ron Sluiter.Motor record and related software[EB/OL]. (2003-09-05)[2016-03-28]http://www.aps.anl.gov/bcda/synApps/motor/R6-8/motorRecord.html.

[13] 胡勇,郑丽芳,李纪堂,等.基于EPICS的运动控制系统[J].核电子学与探测技术,2007,27(6): 1175-1178.

[14] Dirk Zimoch.Stream[EB/OL]. (2011-09-14)[2016-03-28]http://epics.web.psi.ch/software/streamdevice/doc/stream.pdf.

[15] 王萌.EPICS在过程控制中的应用研究[D].哈尔滨:哈尔滨工业大学,2008.

[16] 乔显杰,李刚.基于EPICS的StreamDevice的应用研究[J].核电子学与探测技术,2011, 31(10):1073-1076.

[17] Norum W Eric.How to use StreamDevice and ASYN to create EPICS device support for a simple serial, GPIB, or network attached device[EB/OL]. (2010-05-27)[2016-03-28]http://www.aps.anl.gov/epics/modules/s-oft/asyn/R4-24/HowToDoSerial/HowToDoSerial_StreamDevice.html.

[18] Mark Rivers, Eric Norum, Marty Kraimer.AsynDriver[EB/OL]. (2012-02-18)[2016-04-01]http://www.aps.anl.gov/epic-s/modules/soft/asyn/R4-21/asynDriver.pdf.

Development of Servo Motor Driver Based on EPICS

ZHU Zewei,SHEN Nailian

(School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)

The lack of drivers in EPICS software environment deny the use of servo motor in setting up experiment platform directly, for which problem the StreamDevice software module is used to develop a servo motor driver in EPICS. The developing process begins with setting up a servo motor IOC with EPICS tools. The driver program of servo motor is developed with StreamDevice module and called by IOC. With a serial port, the IOC sends control commands to the servo controller which cooperate with the hardware driver to implement the control task. Finally, a graphical user interface is developed for an intuitive operation. By this development method, a servo motor can be used in an EPICS with precise control and real-time respond.

EPICS; StreamDivce; servo motor driver; IOC; motion control

2016- 06- 11

朱泽玮(1992-),男,硕士研究生。研究方向:光电检测等。

10.16180/j.cnki.issn1007-7820.2017.05.051

TM383.4

A

1007-7820(2017)05-188-05

猜你喜欢

伺服电机控制器驱动
基于模糊PI控制的驱动防滑仿真系统分析
工商业IC卡控制器改造为物联网控制器实践
专利名称:一种适应压铸环境的伺服电机
屈宏斌:未来五年,双轮驱动,砥砺前行
轨旁ATC系统门控柜接收/驱动板改造
生产线中的伺服电机定位控制
伺服电机控制技术的应用及发展趋向分析
浅说伺服电机位置控制下的定位问题
基于S3C6410的Wi-Fi驱动移植实现
模糊PID控制器设计及MATLAB仿真