嵌入式伺服控制器调试软件的研究*

2017-02-15 10:27史秀玉王志成吴文江张玉磊
组合机床与自动化加工技术 2017年1期
关键词:嵌入式指令调试

史秀玉,何 平,王志成,吴文江,张玉磊

(1.中国科学院大学,北京 100049;2.中国科学院沈阳计算技术研究所 高档数控国家工程研究中心,沈阳 110168;3.沈阳高精数控智能技术股份有限公司,沈阳 110168)

嵌入式伺服控制器调试软件的研究*

史秀玉1,2,何 平2,3,王志成2,3,吴文江2,3,张玉磊1,2

(1.中国科学院大学,北京 100049;2.中国科学院沈阳计算技术研究所 高档数控国家工程研究中心,沈阳 110168;3.沈阳高精数控智能技术股份有限公司,沈阳 110168)

随着工业控制领域的不断发展,传统的控制器已经无法满足用户在线调试的需求,只能通过仿真得到实验结果,这种系统仿真具有一定的理想性。针对传统控制器的缺陷,提出设计一种嵌入式伺服控制器调试软件,能有效弥补这一缺陷。文章采用.NET Framework平台及Visual Studio集成开发环境,基于嵌入式伺服控制器设计了编辑器、汇编器以及调试器(硬件在回路仿真测试系统)。运用硬件在回路(Hardware-in-the-loop,HIL)技术,让处理器运行仿真模型来模拟电机的运行状态,满足了用户实时调试的需求。

Visual Studio;HIL;嵌入式伺服控制器;调试软件

0 引言

随着微控制器的快速发展,其应用已经遍及各个领域,如:电机控制、工业自动化等。传统控制器中,单轴控制器和伺服驱动器采用分立的设计结构,系统成本高、通讯时延长、灵活性差。因此,嵌入式单轴控制器应运而生,它将单轴控制器和伺服驱动器结合在一起,解决了传统控制器的缺陷;嵌入式单轴控制器的出现也对调试工具提出了新的要求,在对指令进行编辑编译的同时,也需要满足用户的实时调试的需求。目前国内尚无成熟的嵌入式伺服控制器调试软件,因此在参考文献[1]的基础上,文章设计了基于嵌入式伺服控制器的调试软件。嵌入式伺服控制器调试软件可用于实现运动控制器监控、编码器角度检测、Osci控制等功能,其核心功能是编辑、汇编以及调试,其中,调试功能采用了硬件在回路的仿真设计,硬件在回路仿真已逐渐成为控制系统设计的重要工具[2],满足了用户实时调试的需求。

1 总体结构设计

1.1 伺服控制系统

伺服控制系统整体的工作流程如图1所示:用户在上位PC机的调试软件上编写程序,通过USB端口将程序指令代码序列下载到嵌入式单轴控制器中,解释器模块对下载的代码序列进行解释处理并调用相应的处理函数,得到电机的运动参数,因为单轴控制器和伺服驱动器共享内存,伺服驱动器可以根据参数直接控制电机的运动轨迹,不需要再使用通讯接口。其中,运动控制器中变量监测模块保存记录数据,并将各个变量同样通过USB接口反馈给上位PC机调试软件中的调试器,便于用户实时调试,控制电机的运转轨迹。

图1 伺服控制系统结构

1.2 伺服驱动指令

伺服驱动指令由汇编器汇编,具有一定的指令格式,包括指令标识符和相关的参数。统一编译为二进制代码,根据指令标识符的不同,调用不同的指令处理函数,当然这就是解释器的功能了,不是我们讨论的范畴。根据参考文献[1]设计的伺服驱动指令集,设计一个类,定义统一的指令规范格式,定义各个变量,分别存储助记符的名称、指令代码、参数个数以及各个参数。定义该类型的数组,数组中存放的是所有的指令集合,最后定义所有输入输出参数可能的类型指令。

2 调试软件的设计

2.1 编辑器的设计

采用Visual Studio平台的richTextBox组件,在C# winForm程序中作为汇编器的编辑界面,同时采用label控件为代码添加行号。为Label控件添加Paint事件,来实现行号的添加。具体代码设计如图2所示:

图2 绘制行号

其中,lineNumPoint是一个List数组,存放的是Point类型的数。LineNumPoint中的坐标是由LineNumPoint.Add()函数逐一添加的。遍历该数组得到数组中元素的个数(即行数),g.DrawString()函数绘制行号。此中存在一个设计难点,就是滚动条的问题。随着滚动条的滚动,行号需要不断的刷新才能满足正常的需要。为此设计一个滚动条的垂直滚动事件(richTextBox的VScroll事件),实现行号的刷新。首先用clear()函数将坐标数组清空,重新计算字符串坐标,我们知道文本框的行数,即richTextBox.Line.Length,先用GetFirstCharIndexFromLine()函数从行号得到给定行第一个字符的索引,再根据函数GetPositionFromCharIndex()得到字符在指定索引处的位置,进而得到每行行号的坐标。

到此为止,编辑器已经做好了,但是为了使其更加美观实用,这里为其实现了关键字高亮。高亮代码如图3所示。

图3 关键字高亮

2.2 汇编器的设计

汇编器需要在上位PC机调试软件中使用,在上位PC机调试软件的编辑器的编辑框里输入相关的汇编指令,汇编器将这些汇编指令一一进行汇编,即编译为可执行的二进制代码,如果编译不通过,则需进行相应的代码调试,直至编译通过为止。汇编过程的流程图如图4所示。

图4 汇编程序流程图

2.2.1 定义用户输入指令

定义用户输入指令类,包括的变量有:用户输入命令的名称name,参数argX,参数argY,参数a-rgZ,行号line,String类型的输入参数数组inArg,Int32类型的输出参数数组outArg,以及byte类型的数组bin,长度等于8,一条指令的长度,8个字节,用于保存编译后的二进制指令。

2.2.2 设计难点

设计过程中需要考虑的两大问题,第一:若用户输入的有空白行,则必须先去除空白行,否则就算编程让编译通过,遇到跳转指令也不能正确执行,因此需要去除空白行,Array.FindAll(codeLines,line=> !string.IsNullOrEmpty(line))。将输出去除空白行之后的内容与之前对比,如果没有空行则说明已经成功去除。

第二是跳转指令中的line,在去除了空白行之后的所有行号都会发生变化,所以不能靠行号的变化来识别,这里设计了另一种思路:当跳转指令,第一个参数是line类型的,将此字符串的line转化成int型,那么需要跳转到的字符串就是codeLines[newLine],codeLines是原来的文本数组。然后遍历新的文本数组,如果新数组中哪个元素与该字符串一样,则说明这个元素就是我们要找的元素,然后把该元素的序号i赋值给newLine,再将其转换为字符串即可。

2.3 调试器的设计

2.3.1 编译调试

在编译的过程中,检查不符合规则的错误,停止继续编译,并报告给用户错误指令,即错误的类型和具体内容。为此,定义一个错误类,该类有两个变量,错误序号id以及对应序号的错误内容如图4流程图所示,每当发生一个编译错误,就向用户发出该错误报告,告诉用户错误的类型以及具体的内容,以方便用户调试代码,修正错误,从而通过编译。

为了输出错误信息给用户,再次设计一个richTextBox,与之前编辑器的richTextBox组件放在同一个winForm中。当有错误报告时,就将错误信息在此输出。除此之外,设计一个指针箭头指向当前编辑、编译的行号,如果编译出错,则指向出错的行。

2.3.2 硬件在回路

硬件在回路(Hard-in-the-Loop,HIL)是系统的一种半实物仿真,通过实际的控制器和虚拟对象来模拟电机的运行状态。与传统的软件仿真技术不同,硬件在回路技术将实际硬件设备引入到仿真系统环境中,利用仿真平台的计算能力、辅助工具等系统资源,实现动态的功能测试,检查设计过程中可能存在的错误与缺陷[3]。

目前,硬件在回路的仿真系统主要有dSPACE,Mathworks xPC Target,Opal-RT RT-Lab等,这些系统控制器运算能力较强、扩展性较好,但是部分接口需要具备相关专业知识的用户编程实现,用户交互能力较弱[2],因此不适用于伺服控制器程序的开发实现,所以设计了如图5所示硬件在回路的系统结构图。此硬件在回路的变量监测系统的需要的硬件支持是伺服驱动器,软件支持是.NET Framework平台及Visual Studio集成开发环境。

图5 硬件在回路系统结构图

实现的具体流程如图6。在上位PC机通过调试器实时监控,将仿真数据发送给运动控制器,运动控制器将数据做记录,即将所有的数据存储在一个数组中,同时,将数据发送给伺服控制器,由伺服控制器根据数据的大小情况控制电机的运转。电机运转情况由伺服驱动器采集并反馈,之后进行数据记录保存,运动控制器重新将反馈的数控发送给上位PC机的调试器,由用户实时监测控制。运动控制器变量监测模块会将变量实时反馈给上位机的调试器如图1所示,观察电机运行的结果是否与预期一样,反馈的各个实时参数是否与设置相同。

与此同时,根据电机上电情况和运行情况,设计了labelPC值实时反映当前电机的状态以及程序运行的状态,并将该PC值返回给指针箭头函数,使得箭头指向当前正在执行的语句。

图6 伺服控制器程序流程图

3 调试软件的实现

3.1 实验平台的搭建

此次实验平台搭建如图7所示。图中从左到右依次是伺服电机、嵌入式伺服驱动器和上位机调试软件。

图7 实验平台的搭建

3.2 编辑器、汇编器的实现

上位机调试工具的编辑器的界面如图8所示。分为编辑界面和显示界面,其中,显示界面主要用于代码调试错误信息的输出,此时驱动器处于未上电状态,运动控制器处于停机状态。

图8 编辑界面

当用户给驱动器上电,输入汇编指令,并点击编译按钮,则汇编器进行编译,如果没有错误则编译通过,调试显示框会输出“编译成功”和当前开始编译的时间,黄色箭头指向当前执行的命令行,如图9所示。

图9 编译运行界面

3.3 调试器的实现

编译执行命令行后,打开运动控制器变量监测窗口,可以清晰的看到各个变量值的情况如图10,以此来监测电机的运转状况,观察是否符合预期的期望。若不符合,及时调整相关值的大小,以达到预期期望。

图10 运动控制器变量监测

4 结论

文章在解决了传统单轴控制器成本高、延时长、灵活性差的嵌入式伺服控制器的基础上,采用 .NETFramework平台及Visual Studio集成开发环境设计并实现了编辑器、汇编器以及采用了硬件在回路技术的调试器。弥补了传统控制器无法满足用户实时调试的缺陷,对伺服控制器调试软件的开发具有一定的借鉴作用。

[1] 黄昭县,王志成,赵鸿博.嵌入式单轴控制器的设计与实现[J]. 组合机床与自动化加工技术,2014(8):62-66.

[2] 朱渊渤,白瑞林,吉峰,等.交流伺服硬件在回路系统的设计[J].江南大学学报(自然科学版),2012,11(6):631-636.

[3] 杜少华,于东,黄艳,等.一种基于硬件在环的可重构数控系统验证方法[J].机械工程学报,2011,47(21):139-145.

[4] 赵鸿博,王志成,何鹏飞,等.轴控制通信技术的研究与实现[J].组合机床与自动化加工技术,2015(4):55-58,62.

[5] 肖贺,刘佩林.针对DSP指令生成与二进制翻译的汇编器实现[J].信息技术,2011(3):47-50.

[6] 刘洋,胡育文,黄文新,等.交流伺服系统调试软件设计[J].伺服控制,2008(1):60-63.

[7] 柴宇,栾勇,王志成.可重构伺服驱动调试工具的设计与实现[J].组合机床与自动化加工技术,2013(7):75-77.

[8] 许娜,张晓彤,王沁,等.基于宏指令集的专用汇编器的研究与实现[J].计算机工程,2010,36(2):249-251.

[9] 杨光,冉峰.单片机汇编器的设计与实现[J].微计算机应用,2005,26(2):231-233.

[10] R Leupers.Compiler Design Issues for Embedded Processors[J].IEEE Design and Test of Computers,2002,19(4):51-58.

[11] K Kennedy,JR Allen.Optimizing compilers for modern architectures: a dependence-based approach[M].Morgan Kaufman Publ Inc,2001.

(编辑 李秀敏)

Researches on the Debugging Software of Embedded Servo Controller

SHI Xiu-yu1,2,HE Ping2,3,WANG Zhi-cheng2,3,WU Wen-jiang2,3,ZHANG Yu-lei1,2

(1.University of Chinese Academy of Sciences,Beijing 100049,China;2.National Engineering Research Center for High-end CNC,Shenyang Institute of Computing Technology,Chinese Academy of Sciences,Shenyang 110168,China)

With the development of the field of industrial control,the traditional controller has been unable to meet the needs of user’s online debugging.The experimental results can only be obtained by simulation,but it’s a pure simulation system with certain ideals.Aiming at the defects of the traditional controller,the paper puts forward a debugging software of embedded servo controller, which can effectively compensate for this defect.Based on embedded servo controller designed editor, assembler and debugger (Hard-in-the-Loop simulation test system) on the .NET Framework platform and Visual Studio IDE.Therefore, the processor will run with simulation model to simulate running state of the motor and meet the needs of user’s online debugging.

Visual Studio;HIL;embedded servo controller;debugging software

1001-2265(2017)01-0085-04

10.13462/j.cnki.mmtamt.2017.01.023

2016-03-02;

2016-04-08

“高档数控机床与基础制造装备”国家科技重大专项:国产高档数控机床、系统及其技术在航空领域的综合应用验证及工艺研究(2014ZX04001051)

史秀玉(1992—),女,山西忻州人,中科院沈阳计算所硕士研究生,研究方向为伺服控制,(E-mail)1058946261sxy@sina.com。

TH166;TG659

A

猜你喜欢
嵌入式指令调试
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
电气仪表自动化安装与调试分析
《单一形状固定循环指令G90车外圆仿真》教案设计
TS系列红外传感器在嵌入式控制系统中的应用
嵌入式PLC的设计与研究
基于航拍无人机的设计与调试
嵌入式单片机在电机控制系统中的应用探讨
核电厂主给水系统调试
无线通信中频线路窄带临界调试法及其应用
中断与跳转操作对指令串的影响