嵌入式伺服控制器调试软件的研究
2017-7-25 来源:中国科学院大学 作者:史秀玉,何 平,王志成,,吴文江,张玉磊
摘要: 随着工业控制领域的不断发展,传统的控制器已经无法满足用户在线调试的需求,只能通过仿真得到实验结果,这种系统仿真具有一定的理想性。针对传统控制器的缺陷,提出设计一种嵌入式伺服控制器调试软件,能有效弥补这一缺陷。文章采用. 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 平台的 rich Text Box 组件,在 C#win Form 程序中作为汇编器的编辑界面,同时采用 la-bel 控件为代码添加行号。为 Label 控件添加 Paint 事件,来实现行号的添加。具体代码设计如图 2 所示:

图 2 绘制行号
其中,line Num Point 是一个 List 数组,存放的是Point 类型的数。Line Num Point 中的坐标是由 Line N-um Point. Add( ) 函数逐一添加的。遍历该数组得到数组中元素的个数( 即行数) ,g. Draw String( ) 函数绘制行号。此中存在一个设计难点,就是滚动条的问题。随着滚动条的滚动,行号需要不断的刷新才能满足正常的需要。为此设计一个滚动条的垂直滚动事件( rich Text Box 的 VScroll 事件) ,实现行号的刷新。首先用 clear( ) 函数将坐标数组清空,重新计算字符串坐标,我 们 知 道 文 本 框 的 行 数,即 rich Text Box. Line.Length,先用 Get First Char Index From Line ( ) 函数从行号得到给定行第一个字符的索引,再根据函数 Get Posi-tion From Char Index( ) 得到字符在指定索引处的位置,进而得到每行行号的坐标。到此为止,编辑器已经做好了,但是为了使其更加美观实用,这里为其实现了关键字高亮。高亮代码如图 3 所示。

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

图 4 汇编程序流程图
2. 2.1 定义用户输入指令
定义用户输入指令类,包括的变量有: 用户输入命令的名称 name,参数 arg X,参数 arg Y,参数 a-rg Z,行号line,String 类型的输入参数数组 in Arg,Int32 类型的输出参数数组 out Arg,以及 byte 类型的数组 bin,长度等于 8,一条指令的长度,8 个字节,用于保存编译后的二进制指令。
2.2.2 设计难点
设计过程中需要考虑的两大问题,第一: 若用户输入的有空白行,则必须先去除空白行,否则就算编程让
投稿箱:
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com