软件调试(精选八篇)
软件调试 篇1
电机驱动模块是数控机床最重要的组成部分之一,是数控装置与执行部件之间的联系钮带。它将数控装置发出的数字信号转换成为符合预定要求的方向、速度指令。为保证数控系统的加工要求,电机驱动模块必须有较好的动态特性、稳态特性以及抗扰性。因此对于电机驱动模块的参数调整与优化及其重要。大连光洋科技集团有限公司开发GDU系列电机驱动模块采用光纤作为通信介质,具有频带宽,通信容量大,适应能力强,不怕外界强电磁场的干扰、耐腐蚀等优点。GDU系列电机驱动模块功率覆盖范围广,并可以在硬件统一的基础上,实现对同步伺服电机、异步电机、力矩电机及直线电机的高精度、高性能的控制。
GDU Helper伺服调试软件是大连光洋科技集团有限公司开发,用于GDU系列电机驱动模块现场调试。能够实现在线实时监控、参数下载修改及保存、 复位、跟踪记录,以及图形和数据的保存等强大调试功能。图1为GDU Helper伺服调试软件主界面。
主界面显示GDU系列电机驱动模块的主要信息,包括软件及参数版本、驱动器信息、电机信息以及运行模式及报警状态。
1功能
1.1串口通信
GDU Helper采用RS232串口通信协议,字符是按照帧定义顺序从MSB开始依次传输,每次传输8 bits。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。
M i c r o s o f t开发了非常好的机制来进行这类通信,这种机制被称为I/O完成端口,通过Create File、 Read File以及Write File等语句完成端口打开及文件读写操作,并且以HANDLE语句形式进行,字节数据可调,使用简捷方便[1]。
1.2参数操作
GDU Helper伺服调试软件的“参数操作”可以对电机驱动模块进行参数操作,并可根据程序版本不同选择对应的参数文件,参数文件为XML文件格式。XML是一种用于数据交换和存储的一种多用途文本文件格式,在内存中以DOM树的结构表示数据[2]。以完成如参数的下载、保存、修改等功能。
批量下载:将选取的参数文件(*.txt)批量下载到电机驱动模块中。
批量读取:读取电机驱动模块中的参数,显示在参数界面。
参数另存:将批量读取的参数保存(*.txt格式)。
写入修改:参数下载或读取后修改参数,见图2。
此外,参数操作还包括参数解释及参数范围及单位显示。
1.3实时监控
GDU Helper同时提供实时监控功能,通过使用QTime类提供了时钟时间功能,在固定时间间隔可以进行数据刷新,并且改时间可以根据PC及配置不同一般可达秒级精度。该功能用于实时监控电机控制模块、电机及编码器等信息变化。可自行设置刷新周期及观测数据,方便调试人员及时发现数据变化,以保障系统安全,平稳运行。
如图3所示,显示了硬件及软件版本、运行状态、反馈速度及电流负载率等。其他参数实时显示可以在设置界面选择。
1.4绘图
GDU Helper调试软件基于Visual studio,同时使用Qt框架。通过自定义QWidget派生类,实现Paint Event并使用QPainter我们可以随心所欲低绘制任何需要的内容[3]。可以将数据以图形形式显示,并提供图片保存及数据分析和对比。同时也提供了如平移、缩放等功能,可以更加清晰显示某些特定数据。
(1)示波器模式
GDU Helper调试软件提供了强大的示波器功能,即能够跟踪某些重要的参数(例如转速、输入输出电流、直流部分电压…),并以曲线形式记录下来,便于调试人员进行分析。如启动时粘滞摩擦分析,平稳运行时齿槽转矩扰动及阻力分析等[4]。
示波器模式绘图为实时监控,图4中显示了“实际反馈速度”及“电流负载率”的大小及变化趋势实时变化。调试人员可以根据数据大小及变化趋势来修改参数改变电机性能。
(2)采样模式
采用示波器模式监控数据时,由于串口波特率制约,数据采样时间约为20ms。无法更加实时显示参数变化,因此提供了更加实时采样功能。
GDU Helper提供了采样模式,采样时间可以达到电流环响应,因此可以更加直观的观察电流环及速度环的响应时间。以便优化参数,使电机驱动模块可以达到更好的响应。采样模式可以设置触发条件,如报警触发、上升沿触发、使能触发、自由采样等,当运行达到触发条件电机驱动模块自动保存采样数据并上传到上位机。GDU Helper接收数据并绘制实时曲线。
对于大多数控系统而言,至少存在这样一个评论,它的相位滞后累积为180°,但是这个条件不足以导致不稳定。要产生不稳定,控制回路的增益还必须等于1。并且一般使用PI调节器,可以带来足够的增益以及带宽[5]。
图5反映了“Q轴电流指令”与“Q轴电流反馈”的变换规律,根据设定的采样周期可以计算电流环的“相频特性”与“幅频特性”。根据时间可以优化参数,达到最优的性能。
2结束语
软件调试 篇2
摘要:在光电伺服控制软件调试过程中为了开发一种连续、实时、直观的调试工具,需要将DSP环境中的数据实时传输到PC环境,利用PC丰富的图形环境进行数据显示和图形绘制。如何实现DSP环境与PC环境之间的实时数据交换成为该调试工具开发中的一个关键问题。针对该问题,利用T1公司实时数据交换(RTDX)技术,实现了MATLAB和CCS集成开发环境之间的实时数据交换。
关键词:光电伺服控制;调试工具;RTDX;MATLAB
中图分类号:TP273 文献标识码:A 文章编号:1673-5048(2014)02-0012-04
0、引言
目前,在光电伺服控制软件调试过程中,为了实现程序中各种寄存器、控制参数等变量的观察,需要在目标程序中设置断点,中断目标程序运行。然而对实时性要求较高的光电伺服控制程序,这种插入断点的调试方法不能实时反映所关心数据的变化,同时还有可能造成数据错误,影响控制算法设计和错误分析,给程序调试带来不便。同样,在其调试阶段,需要在线修改程序中的控制参数,实现外部数据实时导人目标程序,而用传统调试手段难以实现。针对以上问题,需要设计一个连续、实时、直观的调试工具来进行光电伺服软件调试,用以提高调试效率和缩短开发周期。本文针对该调试工具设计过程中PC环境与DSP环境数据实时交换的关键问题,通过应用实例说明了采用RTDX技术实现MATLAB和CCS的编程环境之间数据交换的方法。
1、实时数据交换技术RTDX
TI公司的Real Time Data Exchange(RTDX)技术利用DSP的内部仿真逻辑和JTAG接口实现主机与目标机之间的数据交换。它几乎不占用DSP的系统资源,数据传送可以在目标程序后台运行,对目标程序影响很小。它可以在不中断目标程序运行的前提下向主机实时发送目标DSP上各个寄存器或内存变量的值。而Pc主机也可通过TI公司提供的RTDX相关API函数获取这些数据,并可对这些数据进行实时分析和可视化显示。RTDX数据交换原理如图1所示。
目标DSP为了向主机发送数据必须设定一个输出通道,通过用户接口可将数据送到输出通道以使这些数据立即保存到RTDX目标机的缓存(由RTDX目标函数库定义)中,然后再将这些数据通过JTAG接口发送到主机。目标机要从主机中获得数据,首先必须设定输入通道接收主机发出的命令,从而实现数据传输的同步。同时可利用输出通道完成目标程序向RTDX主机函数库发送数据,向RTDX主机函数库发送数据请求及在目标机上提供数据缓存等功能。
2、RTDX应用过程
使用RTDX进行DSP环境和PC环境之间的数据交换时,需要在DSP目标程序和PC主机程序中分别实现。它们之间的数据传输格式和传输频率要结合应用需求来定义。
2.1 DSP目标程序RTDX实现
在DSP目标程序中使用RTDX进行数据传输,只需在原有的DSP目标程序中加入关于RTDX通道初始化、数据缓存区定义和数据收发的代码即可。以下是RTDX在DSP程序中的实现过程。
(1)RTDX初始化
首先使用以下宏完成RTDX输入、输出通道的创建:
RTDX_CreatelnputChannel(d_jchan);
RTDX_CreateOutputChannel(a_ochan)。其中:d_ichan为输入通道名:a_ochan为输出通道名。后面有关RTDX通道的操作函数都要使用它们来指定通道。完成通道创建以后使用以下宏来使能输入、输出通道:
RTDX_enableInput(&d_ichan);
RTDX_enableOutput(&a_ochan)。
(2)创建接收和发送数据缓存区
进行数据发送之前需要定义好接收和发送缓冲区,缓冲区的大小可根据实际应用情况定义,但不可超过RTDX通道最大容量值。定义Readdata[counterl]为接收缓冲区,counterl为缓冲区容量大小,定义Seaddata[counter2]为发送缓冲区。
(3)向RTDX通道读写数据
函数RTDX_readNB(&d_ichan,(void*)&Readdata,sizeof(short))可实现RTDX输入通道数据非阻塞读取。使用RTDX_write(&a_ochan,&Seaddata,500*sizeof(short))可以向RTDX通道发送数据,这里向通道中写入了500个short类型数据,发送数据个数不应超过RTDX通道容量大小,否则会发送失败。
在实际应用过程中RTDX只提供了一个数据的传输通道,而如何有效地使用这个通道还需要DSP目标程序和PC主机程序定义好数据的传输协议来实现。
2.2 MATLAB主机程序实现
PC主机程序是在MATLAB/GUI编程环境实现的。主要实现定时获取DSP目标程序通过RTDX通道发送上来的数据:实时显示接收到的数据信息;通过人机交互界面向DSP目标程序发送数据。设计流程如图2所示。
主机程序首先通过MATLAB Link for CodeComposer Studio的相关API函数与CCS集成开发环境建立双向和实时数据链接,成功建立链接后可以通过MATLAB/GUI程序控制执行CCS的命令来进行批处理调试和显示,然后再进行DSP类型及数量的探测。待探测到目标DSP类型和数量后,程序将进行RTDX通道缓冲区配置、通道初始化等操作。完成这些操作后MATLAB/GUI程序控制CCS运行目标程序,同时启动数据接收和发送定时器,此时DSP和PC可进行数据的实时交换。以下为MATLAB环境下RTDX的实现过程。
(1)RTDX初始化过程
首先使用configure(cc.rtdx,8192,4)对通道进行配置,配置参数需要根据DSP目标程序通道创建的个数来确定,这里配置缓冲区大小为8192字节,同时配置了4个通道,其中cc.rtdx为MATLAB和CCS建立连接成功后返回的句柄,后面有关RT-DX通道的操作函数都需要把它作为参数来使用。完成配置后,可使用open(cc.rtdx,a_ochan,r)来打开RTDX读通道,使用open(cc.rtdx,d_ichan,w)来打开写通道,其中a_ochan,d_jchan为DSP目标程序中创建通道时定义的通道名。最后使用以下函数完成RTDX输入、输出通道的使能:
enable(cc.rtdx,d_ichan);
enable(cc.rtdx,a_ochan)。
(2)接收定时器服务函数
TimeUpdateChannelATl( )
在定时服务程序中主要完成实时接收RTDX通道中的数据,并把接收到的数据存人数据缓存区,然后根据数据传输协议解析数据并对数据进行处理或图形绘制。
(3)发送定时器服务函数
TimeUpdateChannelDTl( )
发送定时器服务函数主要实现数据的发送和协议的封包。当PC主机程序需要向DSP发送连续数据时,例如,正弦、方波和锯齿波等类型的激励信号时,需要将上述激励信号离散化处理后再进行发送,发送控制命令时,只需发送按照传输协议封包好的数据即可。
3、RTDX应用实例
以某型光电稳定平台的光电伺服控制软件调试为背景,结合上文RTDX在DSP目标程序和MATLAB/GUI的实现过程,对光电伺服控制软件和MATLAB/GUI程序进行修改,对DSP目标程序增加RTDX初始化、配置、收发等相关代码,对MATLAB/GUI修改有关数据处理和图形显示代码,并根据实际应用需求,实现平台中各种参数的显示、状态控制等功能。
某型光电稳定平台调试系统构成如图3所示。软件构成:MATLAB2011b、CCS3.3;硬件构成:两轴光电稳定平台、驱动控制硬件电路、调试PC主机、仿真器和直流稳压电源等。RTDX应用实现如下:
步骤一,在光电伺服控制软件中加入RTDX初始化相关函数并定义接收、发送缓冲区数组,数组大小按照RTDX最大容量500定义,同时还需实现平台数据的传输协议,其中上传数据包括陀螺、编码器、测速机、跟踪器数据类型及格式的定义。在伺服控制周期里采集到500个数据后进行数据上传,因此数据上传周期为500 ms;Pc机下传数据包括控制指令和正弦、方波、阶跃信号的离散化数据,数据下传周期由MATLAB/GUI发送定时器设定,根据伺服控制的响应特性,设定下传周期为10 ms,每个周期发送500个数据。
步骤二,在MATLAB/GUI程序中设计人机交互界面,如图4所示。需对MATLAB/GUI程序中的接收定时服务函数和发送定时服务函数进行修改,设置接收定时器定时周期为5 ms,并且要小于光电伺服控制程序数据上传周期,以防止数据丢失。按照传输协议,对接收定时服务函数增加数据传输协议解析函数,波形绘制函数等。对发送定时服务函数需增加激励信号波形离散化函数和传输协议封包函数。
步骤三,利用MATLAB/GUI程序观察光电稳定平台各个传感器的数据值,并可发送指令实现对光电稳定平台各种功能的控制,实现对光电伺服控制软件在线监控与调试,如图4所示。
在MATLAB/GUI界面上单击电机上电控制按钮,运动轴选择为俯仰轴,运动模式选择稳定模式,激励信号选择为正弦,幅值为60(°)/s,频率为4 Hz,点击陀螺数据显示按钮,此时可在主机程序界面上观察激励信号(虚线)和响应信号(实线)的曲线。可以选择不同类型的激励信号和运动模式来实现对光电稳定平台位置、速度和跟踪闭环状态性能的测试。在电机不上电的情况下还可以单独观察某个传感器的数据,判断它是否正常工作。
4、结论
软件调试 篇3
比率差动元件广泛应用于微机型母线保护装置, 其作用是在区外故障时让动作电流随制动电流的增大而增大, 使之能躲过区外短路产生的不平衡电流, 而在区内故障时则希望差动继电器有足够的灵敏度[1]。由此可见, 比率差动元件的制动特性直接决定了母线保护动作的正确性, 其调试检验工作显得尤为重要。
比率差动元件制动特性的调试方法为:对同一条母线上的2条支路 (短接2条支路的母线刀闸位置接点) 加入方向相反、大小可调的单相电流I1和I2, 记下保护刚好动作时的2个电流值, 然后将其带入相应的动作判据方程检验制动特性。由于这种方法中对调试电流的获取为试探性的过程且存在盲目性, 因此造成调试工作耗时、效率低下。
为有效解决上述问题, 方便现场调试检验工作, 本文充分结合现场调试实际, 对比率差动元件动作判据进行了研究分析, 开发了母线保护比率制动特性调试电流计算软件。该软件可瞬间输出使保护刚好动作的调试电流临界值, 且可自由调整调试电流并直接判断告知该调试电流是否在动作区内。
1 比率差动元件动作判据分析
比率差动元件的动作判据为:
式中, K为比率制动系数;Ij为第j个连接元件的电流;Icdzd为差动电流起动定值。据此绘制出比率差动元件的动作特性曲线, 如图1所示。
现场调试时, 通常选择2条支路分别加入电流I1和I2, 考虑到I1和I2方向相反, 可将调试电流设定为I1>0、I2<0, 且则上述动作方程变为:
那么保护刚好动作时的临界动作方程为:
其中, K和Icdzd均为已知值。联立方程可得:
即为使保护刚好动作的调试电流临界值。
2 软件的开发
2.1 软件算法流程图
母线保护比率制动特性调试电流计算软件的算法流程如图2所示。
2.2 软件功能界面
该软件的功能界面主要分为计算参数输入区和调试电流输出区, 如图3所示。计算参数主要是差动电流启动值和比率制动系数, 由于保护厂家普遍考虑到母联断路器位置导致的运行方式对差动元件灵敏度的影响, 为兼顾可靠性和灵敏度, 设置了比率制动系数高值KH与低值KL, 为此软件中特别加入了“母联断路器位置”选项供选择。计算参数确认后, 点击“动作临界值”按钮进行计算, 推荐的临界调试电流值直接显示, 变化步长可自定义, 以便自由调试电流值。
2.3 软件的计算和判断
该软件的编程环境为Visual Basic 2005。计算使保护刚好动作的调试电流临界值的主要代码及注释编写如下:
下面以支路1调试电流值的增加变化为例, 为判断是否满足动作判据并输出消息, 编写代码及注释如下:
3 软件计算实例
某供电公司所辖220kV常青变电站220kV第一套母线保护差动电流起动定值为8.33A, 比率制动系数高值为0.7, 低值为0.6, 选择母联断路器位置为合位。点击“动作临界值”按钮后, 瞬时输出支路1调试电流值为10.12A, 支路2调试电流值为-1.79A (此处负号体现出该电流方向与支路1相反) , 显示当前调试值为比率制动动作临界值, 同时初始化变化步长为0.1, 如图4所示。
4 结束语
母线保护比率制动特性调试电流计算软件界面明晰、简单易用, 已在多个变电站的母线保护例行检验工作中使用, 实现了比率制动特性调试电流的快速获取和电流自定义变化后的判断告知, 避免了盲目试探过程, 方便了现场专业人员的调试工作, 有效提高了工作效率。
摘要:为方便母线保护比率差动元件制动特性的调试检验工作, 开发了基于Visual Basic 2005编程环境的调试电流计算软件, 实现了比率制动特性调试电流的快速获取和电流自定义变化后的判断告知, 并通过现场实际应用证实了该软件的正确性和可行性。
关键词:母线保护,比率制动,调试,软件开发
参考文献
软件调试 篇4
随着嵌入式应用的深入和发展,特别是在数字通信领域的应用,对嵌入式跟踪调试软件运行效率和性能的要求在逐步提高,故在系统运行速度快、实时性要求高的嵌入式系统中,如何利用跟踪调试技术实现对芯片内部和整个ARM子系统的测试与监控成为了ARM调试技术的难点。而不断增长的处理器频率也给实时跟踪分析带来了一个又一个挑战,所以嵌入式跟踪调试技术的重要性推动着新技术的持续发展,使得跟踪分析工具也在不断创新[1]。
由于跟踪调试技术需要很高的可靠性、实时性,而在LTE系统中还要保证能够满足高速的数据业务传输,这成为在LTE系统中实现跟踪调试技术的矛盾点。本文提出了既能使跟踪调试软件高效地在LTE系统中运行,又能保证不影响LTE系统的高速率数据业务传输的跟踪调试技术方案。
1 方案设计需求
本方案的设计总体要求是既要使跟踪信息按照预想的方式输出,保证跟踪信息的可靠性、完整性和正确性,便于工程人员对异常情况的定位分析和流程控制,又要使整个ARM子系统消耗的资源小,即保证ARMcore处理器资源、总线压力和DDR访问最小[2]。首先,为了方便各种跟踪信息的封装和PC端解码软件的分析,需要对每条跟踪信息按照约定的格式进行封装和解析,这样才能保证跟踪信息的可靠性。其次,输出的跟踪信息应完整、实时地输出,有助于产品的开发和定位,保证跟踪信息的解析完整性和连续性,且在系统任务频繁切换时,保证信息不丢失且没有历史信息重复的显示。最后,从封装到PC端的解码软件解析之间有一条传输的物理通道(串口或USB),在硬件上需要保证传输跟踪数据在传输过程中的正确性。而在整个LTE系统中需要跟踪的信息种类繁多,需要对各种跟踪进行分类,以便在开发过程中对跟踪进行管理与配置,故将跟踪内容根据其特性分为常规性跟踪数据和临时性跟踪数据。常规性跟踪数据是指生命周期在方案设计、开发、调试测试、系统测试产品发布阶段;临时性跟踪数据是指生命周期在调试测试和系统测试阶段,如图1所示。
ARM基带系统的涉及面广,不同的工程类人员关注的跟踪信息种类不同,因此还需要对跟踪数据进行分类控制,以便使不同的工程人员关注各自相关的跟踪信息,要求本跟踪调试技术采用的控制方式是对跟踪源屏蔽的方式进行控制,可以保证整个系统效率[3]。
2 调试方法及功能介绍
嵌入式系统在开发过程中需要对软件进行调试,目前主要的嵌入式系统软件调试方法有两种。一种是在线调试(简称JATG Debug)[4],在线调试的主要手段是通过设置断点的方式来观察系统状态,从而找出软件设计中存在的问题。在线调试可以通过调试器观测到系统当前代码执行情况、内存数据、中断状态、硬件状态等信息和运行时调试信息进行问题分析定位。另一种调试方法是跟踪调试,预先在软件程序中插入跟踪点,在跟踪点调用跟踪模块获取跟踪点执行时刻的系统状态信息,可以监测系统变量、内存、状态机、函数执行情况、任务调度情况等内容。跟踪调试的方法不需要打断系统的运行,可以对系统顺序执行的状态变迁信息进行检测,因而在实时嵌入式系统的软件调试中应用非常广泛。
由于在线调试存在一些问题:在调试对时序严格要求的系统软件时,若断点观察系统状态,则系统无法再按正常时序运行;同时,在线调试无法监测到系统顺序执行的状态变迁,只能观察到某一时刻点的系统状态。所以本方案中采用的是第二种调试方法——跟踪调试。本方案中跟踪调试技术的主要功能是采集基带系统中的跟踪数据,通过UART/USB接口发送到PC端,并由PC端的跟踪软件进行解码显示。在跟踪调试技术中,提供一系列的跟踪接口,开发人员通过调用这些接口,将程序运行时的变量、内存数据和接口消息等输出到PC机上,再经过跟踪软件解析、显示。
3 跟踪调试方案的实现
跟踪调试的过程实际上就是任务先调用跟踪模块的跟踪接口开始跟踪,并为本次任务的跟踪信息分配缓存区,然后按照约定的信息格式对当前任务的跟踪信息进行封装,并将跟踪信息写入已分配好的缓存中,最后根据情况适时发送缓存中的跟踪信息,并在PC端的解码软件显示出需要打印的跟踪信息。基于以上机制,将跟踪调试模块的实现分为4个部分,如图2所示。
3.1 跟踪缓存的管理
ARM系统中各个模块调用跟踪接口时,需要将所有打印的跟踪信息缓存起来,再跟踪信息进行传输。故对于跟踪信息缓存的管理在整个设计中起着至关重要的作用[5]。
为了保证嵌入式系统的高效运行,保证ARMcore处理器资源、总线压力和内存访问最小,在片内RAM中专门为存储跟踪信息开辟了32 kbyte的循环缓存。而在嵌入式操作系统中又存在高低优先级任务间的切换,这样就存在高优先级任务的跟踪抢占低优先级任务的跟踪的情况,出现跟踪缓存竞争,故本设计采用的存储机制是在存储每条跟踪信息之前先为本条跟踪信息预留相应大小的存储空间,当低优先级任务的跟踪信息被高优先级任务跟踪信息抢占时,内存中已经为低优先级任务的跟踪信息预留了存储空间,从而不会导致跟踪信息的丢失和错乱的情况,如图3所示。
该方案的跟踪缓存机制主要思想是,利用所有跟踪函数在进入跟踪时均能够确切知道当前跟踪信息所需要的存储空间长度,从而为当前跟踪信息预留出所需要的存储空间。因此在跟踪函数入口处就对写指针进行偏移,在被高优先级任务抢占时,高优先级任务也不会再将跟踪数据写入其预留空间中,当高优先级任务执行完毕后,系统会自动回到低优先级任务执行,完成低优先级任务的跟踪信息的存储过程。
由于本设计中采用的缓存机制为循环缓存,故通过维护2个写索引和1个全局读索引来管理缓存,其中2个写索引分别为全局写索引和当前写索引,全局写索引用来与全局读索引进行匹配,通过这2个索引来计算缓存的剩余空间和已用空间,从而判断何时发送和写入跟踪信息,而当前写索引的作用就是为当前的跟踪信息预留空间。在对循环缓存管理时,发现向循环缓存中写入数据时,会出现跟踪信息的缓存超出32 kbyte的RAM空间(缓存超界)的现象。对于这种情况,设计一个带有保护机制的循环缓存,如图4所示,当数据超界时,将超界部分的数据写入保护区内,待数据写入完毕后,再将数据回拷到循环缓存的首地址处。
3.2 跟踪数据的传输
跟踪缓存数据的传输通道分为UART传输模式和USB传输模式。UART传输模式采用DMA总线完成中断的方式,在每次进入跟踪数据发送单元时配置DMA,本设计采用普通传输方式,第一次不需要等待中断,强制传输一次,目的地址固定不变,源地址递增,传输完成后更新全局读索引。由于在外场测试或没有条件进行串口跟踪时,需要通过USB来传输跟踪消息。USB传输模式直接调用USB跟踪数据传输接口进行跟踪数据传输,传输完成后更新全局读索引,如图5所示。
3.3 跟踪配置信息的管理
跟踪配置信息管理根据高层下发的配置信息设置跟踪数据类型控制变量。控制内容包括跟踪数据种类、跟踪数据长度、跟踪源的跟踪使能。通过跟踪类型设置位来控制应该打印某一类型的哪个或哪些消息。当外部模块调用跟踪函数时,会传递一个BIT值和一段字符串,这个时候需要用这个BIT值来和跟踪类型设置位进行比较,如果对应BIT位为1,则对应类型的跟踪数据需要输出,添加完成将跟踪信息通过DMA发送到串口的FIFO寄存器中,然后硬件打印跟踪信息,反之则不输出。
3.4 跟踪接口设计流程
该方案整个接口设计流程的关键在于怎样保证高低优先级任务的跟踪信息有序无误地存储到缓存,其设计流程如下:在函数入口处首先计算出当前跟踪信息的长度,将当前写索引保存到局部变量中,然后当前写索引偏移当前跟踪信息的长度,最后进行数据的封装和发送。由于嵌入式操作系统存在高低优先级任务之间的切换,故在每个接口进行此过程时,都有可能被高优先级任务抢占,因此设计了一个全局变量来记录被打断的次数(嵌套次数),每次函数入口该嵌套次数都会自加,函数出口嵌套次数再自减,若当前跟踪没有被抢占,则嵌套次数为0,若有被抢占的情况出现,则嵌套次数不为0,不更新全局写索引的值,故可发送的数据就不增加,只有每层的嵌套信息全部写入完毕后,嵌套次数才会减为0,才会将当前写索引的值赋值给全局写索引,这时全局写索引的值才会改变,可发送的数据才会增加。具体流程如图6所示。
4 方案及测试结果分析
本次跟踪方案从3个方面提高了ARM执行效率:1)在跟踪接口内部摒弃了svnprintf函数,直接将跟踪数据复制到跟踪缓存中,一方面把原方案中跟踪数据的原始码流通过svnprintf函数在ARM内部进行字符串的转化过程,转移到通过PC端的解码软件来解析原始码流而转化成可见字符串,另一方面摒弃svnprintf,也省去了函数遍历参数的过程(该过程消耗了ARM的执行时间),从变参的跟踪接口优化成定参接口,这种方式大大提高了ARM的执行效率;2)跟踪控制的优化,采用跟踪接口外部控制,若当前跟踪不需要打印时,则当前任务不会进入跟踪接口,直接丢弃本条跟踪,这样避免了函数的上下文切换的过程,减少了任务栈的切换从而提高了执行效率;3)缓存的优化,如本文所阐述,采用为跟踪预留空间的方式缓存,提高了跟踪信息的有序性。图7所示是通过调用几个相同的跟踪接口,来统计本条跟踪所消耗的LTE中1个子帧的时间片来统计时间,采用svnprintf时,调用跟踪接口消耗的时间为(0x4FB1-0x3DD8)×(1/0x7800) ms=0.147 8 ms。本方案中,跟踪接口消耗的时间为(0x3DC5-0x362D)×(1/0x7800)=0.063 3 ms。通过多次统计验证、测试并对比后发现本方案对ARM的执行时间提高了一半左右。在跟踪模块中减少了ARM的执行时间,从而使LTE系统中的其他模块有充分的时间来利用ARM资源,更好地达到LTE系统所要求的速率。
在提高效率的同时也要保证跟踪正确并可读,故在TTCN下进行各种场景的构造,包括高优先级任务的跟踪信息抢占低优先级任务的跟踪信息等,进行不断的调试测试,最终通过PC端的解码软件观察,跟踪出来的跟踪信息既没有重复显示历史跟踪信息,也没有出现跟踪信息丢失和错乱的情况,而是有序、准确无误地输出预想的跟踪信息,保证了本文开始所提到的可靠性、完整性和正确性。如图8所示,每条跟踪信息和跟踪变量的值都按照预想的方式输出。例如,灰底区域中的第1条用于调试测试阶段的临时信息为“ts_00_tra01_01dynamicTrace04,VRA1,VRA2,VRA3,VRA4”。但将整个LTE系统在中兴基站进行外场测试时,会出现跟踪信息多条丢失的情况,而对于开发人员来说,并不影响其流程控制和异常情况的定位分析,而且能够保证LTE系统50 Mbit/s的下载速率。
5 小结
随着多核产品的日益普及,跟踪调试系统解决方案要求的性能也愈来愈高,ARM公司针对复杂片上系统(SoC)设计推出了高度可配置的跟踪调试解决方案ARM CoreSightSoC,它满足了软件开发人员在SoC设计方面需要更高的可视性要求。而本方案的设计在满足开发人员高可视性需求的同时,既能高效地运行本跟踪调试软件,保证跟踪信息的正确性和完整性,又不会影响整个LTE系统高速率的数据业务,提高分析解决问题的效率。实现过程中通过不断的改进与调试,实现了在跟踪调试软件正常的运行下,LTE系统仍然能够在高速率下进行数据业务的传输。该方案的设计帮助了开发设计人员提高生产效率并缩短新产品上市的时间。
参考文献
[1]张欣,栾新.基于ARM芯片的嵌入式交叉调试系统[J].微计算机信息,2007,23(10):128-130.
[2]MARTIN A,FLAKE J.嵌入式系统软件调试跟踪技术的发展趋势[J].电子设计应用,2005(7):16-18.
[3]HU Xiao,CHEN Shuming.Applications of on-chip trace on debuggingembedded processor[C]//Proc.Eighth ACIS International Conference onSoftware Engineering,Artificial Intelligence,Networking,and Parallel/Distributed Computing.[S.l]:IEEE Press,2007:140-145.
[4]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.
浅析嵌入式软件调试器的设计与实现 篇5
关键词:嵌入式软件调试器,调试技术,设计与实现
要想开发计算机软件, 就必须处理好与程序两者间的关系, 而程序的调试从某种意义上来说是用户在特定环境下借助某项工具来完成对编制的程序进行功能性和正确性测试。在这个过程当中, 用户实时监视自身所要调试的程序, 能够及时发现程序中存在的问题和缺陷, 并采取行之有效的方法予以解决, 确保下一步工作的顺利进行。本文所要分析的嵌入式软件调试器的设计与实现是以多种程序设计语言为基础, 在这个基础之上建立的嵌入式软件调试环境, 它能够广泛应用到计算机上, 通过设置目标机内调试器的方式, 来达到各种目的, 而这也是本文研究的关键所在。
1 分析面向程序设计语言的符号化调试技术
面向程序设计语言的符号化调试技术其特点表现比较明显, 在无特殊情况, 能够在任何程序语句上面设置断点, 而设置的断点能够适应所有变量。当然要想实现这一目的其要满足一个前提条件, 便是通过交互的方式来实现, 并且在调试过程中要选择符合实际情况的源代码。在程序设计语言中进行符号调试, 体现在多个方面, 当然应用最广泛和最普遍的当属宏汇编语言和C语言, 基于此, 本文所探讨的嵌入式软件调试器的设计与实现就是全面服务于汇编语言和C语言这两种程序语言, 为开发新的调试环境创造条件, 当然还有一个重要目的就是在特定条件下可以通过目标代码达到嵌入式软件调试的目的。面向程序设计语言的符号化调试技术并不能够单独完成, 需要借助其它方式, 例如:编译和汇编系统, 换一种方式来说就是, 通过编译或者是汇编连接系统来实现嵌入式软件汇编过程中, 要在各方面都得到保障的情况下, 最大限度的保留程序源代码信息, 这样能够为之后工作的开展提供便利。其中包括:目标文件中所有保存的源代码、与源代码相关联的信息, 只有这样才能够通过环境调试对目标文件结构进行步骤化、系统化分析, 通过建立运行时调试信息表, 能够为根本性实现面向程序设计语言的符号化调试技术提供理论依据。
2 嵌入式软件调试器中调试环境内核的设计与实现
2.1 计算机程序的跟踪与调试
相对于嵌入式软件调试环境中的目标机机内调试器, 当它在接收或者是获取到用户传达的信息后, 其会根据自身需要在最短时间内加载目标文件, 通过加载文件的方式获取目标代码中存在的调试信息, 在完成这个目标之后加载至目标机内, 而与调试相关的信息自然而然的出现在宿主机上。充分考虑到调试环境与目标机之间存在的密切关系, 换一种方式来说就是在特定环境下两者组合后会形成松散耦合结构, 根据系统的需要发生相应的变化。值得一提的是, 在进行调试跟踪过程中系统会获得目标机的执行状态后, 环境会第一时间获取目标机中存在的数据内容和相关信息, 在这个基础之上将相关数据通过本身机构准确获取源文件名称以及其程序执行的编号, 在完成这个程序之后其进入源显示状态并且会显示相关信息。
2.2 变量跟踪与类C表达式分析器的设计与实现
面向源级的符号化测试通常意义上来说就是充分利用所提供的调试环境, 通过一系列的技术手段实时跟踪和获取变量信息, 实时跟踪变量从某种意义上来说就是对变量所构成的表达式进行跟踪, 通过跟踪能够及时有效的获取相关信息。再者, 为了使调试环境能够与程序表达式两者有效吻合起来, 调试环境定义了类C表达式文法的巴克斯范式表示。以传统的编译原理为理论依据, 可以将表达式分为多个层面, 将其简单的概括为:递归子程序法、中间表达式法、逆波兰式法等多个方面, 这些方法应用到不同程序中自然而然的体现的优势也是不一样的, 不可否认其也有自身存在的局限性, 但是与类C表达式的分析与计算进行比较, 前者是类C表达式所不能比拟的。在综合考虑其各方面因素后将上述所提及方法的优势进行整理, 本文研究过程中所使用的是递归栈分析方法, 其弥补了上述三种方法的缺点, 只有这样才能够确保变量跟踪与类C表达式分析器的设计与实现。
2.3 断点管理机的设计与实现
断点管理机侧重点是高级语言调试, 换一种方式来说就是为用户提供一种机制, 而用户通过调试程序的方式获取一些相关信息, 在这个基础之上完成程序代码断点的设定、删除、修改、激活、挂起等多个流程, 使得用户能够获得一定权限, 能够在程序调试过程中直接完成不同断点操作, 这是断点管理机设计与实现的关键性因素, 当然也是断点管理机顺利进行环境调试的前提条件。
3 结语
新形势下, 嵌入式软件调试器的设计与实现需要综合多种因素, 才能够为计算机嵌入式软件调试环境形成创造条件, 开发软件调试环境的初衷和目的在于根本性完成面向嵌入式软件开发语言的调试。上述中我们提及到多种方式来完成嵌入式软件调试器的设计与实现, 结果显示嵌入式软件调试工具运行效果较为显著。
参考文献
[1]李光辉.嵌入式软件相关问题的研究[J].信息技术, 2012 (02)
[2]霍汉强.嵌入式软件发展的瓶颈问题及发展对策[J].广西科学院学报, 2012 (02)
软件调试 篇6
计算机在各行各业中发挥着重要的作用, 人们对其依赖程度越来越高, 如利用计算机能够完成文字编辑、网页浏览、服务器应用等。 而计算机的具体运用范围在逐渐扩大, 使得各种故障问题逐渐暴露出来。但是运用计算机自身的软件调试方式能够起到维护以及修复系统故障的作用。
1 加强操作系统故障修复, 并改进软件调试方式的重要意义
操作系统作为计算机系统的重要组成部分之一, 在使用时如果发生系统故障, 将会对整个系统的稳定运行产生严重的影响。所以对操作系统加以修复极为重要。此外, 随着计算机使用范围的逐渐扩大, 各种故障问题逐渐暴露出来, 但对故障的处理措施方面的研究并不多。 所以在故障修复过程中, 我们应不断进行试验和检测, 改进故障修复措施的不足之处, 积累更多的系统故障修复经验, 从而提高故障修复水平和故障诊断能力, 确保操作系统能够具备更强的生活服务功能、学习服务功能以及工作服务功能等。 现在笔者以Windows XP系统为例, 针对操作系统的软件调试方法以及故障修复问题加以分析[1]。
2 操作系统的故障修复以及软件调试方式
(一) 计算机操作系统
(1) 启动文件的修复。 用户可以采取以下两种措施修复系统启动文件。 方法一:采取fixboot命令对启动文件加以修复。方法二:在修复系统主引导记录文件的基础上, 运用“方法一”加以修复即可。 这两种方法在修复系统故障时, 采取的是不同的技巧, 但其修复结果都较好。
(2) 参数配置的调整。 用户采取 “系统配置实用程序”来调整操作系统的参数配置情况;在“运行”对话框内输入“gpedit.msc”, 调整电源管理组件。 此外, 对于操作系统的有关操作方式以及服务等进行调整时, 均可以利用“设备管理器”以及“控制面板”即可。
(3) 修复组件文件。 方法一:当重新安装 “启动程序”出现错误时, 用户可以利用“控制面板”的删除程序命令来完成。 方法二:用户采用CAB, 将程序提取出来, 然后重新安装。 方法三:对操作系统内的错误文件, 用户可以利用文件检查器进行修复。 方法四:当拷贝正常文件的过程中, 发生文件错误时, 用户可以将错误文件放置在出错的操作系统内进行覆盖处理即可。
(4) 计算机病毒。 病毒会对计算机系统的正常运行以及文件系统造成严重影响, 甚至会导致死机问题;破坏硬件系统, 丢失数据资源。 用户可以利用杀毒软件、防火墙软件以及硬件防火墙等措施加以预防, 及时查杀病毒。
(二) 磁盘驱动器以及设备驱动程度
(1) 磁盘驱动器
为保证磁盘文件的完整, 保证磁盘介质的可靠、安全, 用户应及时维护磁盘驱动器。现阶段, 用户可以采取以下工具, 对磁盘进行维护。方法一:“Disk Map”工具。当磁盘发生故障时, 利用此工具能够找到磁盘中的正确分区。 方法二:“Fdisk”工具。 利用此工具, 用户可以将操作系统修复至原始状态。方法三:磁盘检测程序。为保证磁盘文件的完整, 利用该工具, 能够防止系统发生故障。
(2) 设备驱动程序
其一, 声卡、网卡以及显卡等其他驱动程序的安装。当系统无法采取自动安装措施时, 用户则应强行安装驱动程序, 从而识别操作系统或就近设备是否存在故障[2]。
其二, 操作系统自带硬件系统驱动的情况下, 用户首先应选用该硬件驱动。
其三, 在更换硬件设备时, 用户首先应卸载待更换的硬件驱动, 然后进行更换操作。当用户难以掌握这种卸载方式时, 应运用驱动管理器以及电脑管家来完成卸载删除操作。
(三) 应用软件以及操作系统的重新安装
(1) 应用软件
当操作系统自身的应用程序存在故障时, 用户应检查系统内其他安装程序的兼容情况, 检查应用软件中其他程序的完整情况, 检查应用软件的有关功能与厂家所提供的说明书的描述是否相符等。用户在使用计算机时, 采取上述措施, 就能够合理排除硬件故障, 并保证操作系统的高效运行。
(2) 重装操作系统
用户所使用的计算机, 其配置符合相关要求, 当用户自愿重装系统时, 可以通过操作系统的重新安装, 对系统故障以及应用故障加以修复。 当用户重新安装好操作系统后, 把系统恢复至原始状态, 从而识别计算机是否发生故障, 明确故障发生的具体位置。利用这种措施, 能够合理排除故障。对于操作系统的重新安装, 通常采取以下两种方法。 方法一:一键恢复。 方法二:恢复安装。 其中最复杂、且故障排除效果最佳的方法, 则是重新安装操作系统[3]。
3 结语
现阶段, 在用计算机进行生产、经营、学习的过程中, 常会发生各种故障问题。 所以对计算机进行修复处理极为重要。 而人们唯有在实践中, 不断总结和摸索, 才能够改善故障修复措施, 才能够确保计算机系统的安全运行。
参考文献
[1]朱成芬.计算机网络操作系统软件调试方式及故障修复技术的应用[J].中国科技投资, 2014, 11 (22) :178-179.
[2]刘志刚.浅谈软件调试在修复计算机系统的应用[J].消费电子, 2013, 12 (09) :113-114.
软件调试 篇7
1 C语言简介
早期的C语言主要是应用于Unix系统, 由于它的强大功能和各方面的优点逐渐为人们认识。后来, C语言慢慢进入其他操作系统, 得到广泛应用。它用来提供一种能以建议的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持就可以运行的编程语言, 在信息领域内, 目前受到了普遍的应用。如此看来, 这种语言也算是有着长久的发展历史, 才得以被人们接受。
C语言与以往的机器语言相比, 优点很多, 机器语言虽然问世早, 但繁琐、不直观, 也不易调试, 比如计算y=2x+3需要几条指令, 移植性差, 太过依赖于计算机。而汇编语言, 虽然直观, 但也繁琐。
对于一个简单的程序设计, 一般包含确定数据结构、确定算法、编码、在计算机上调试程序等几个部分, 而其中的编码和调试部分利用C语言的开发就可以完成的。而C语言的代码是由0和1构成的二进制指令或者数据, 是一种高级的面向机器的计算机语言, 它是一种结构化程序设计语言, 它的语言结构简单, 没有子程序的定义, 由32个关键字, C语言中的函数可以便捷地完成子程序的功能。它可以模块化的对函数进行编译, 另外, C语言还提供了比较多的数据类型, 这些数据类型也极大地提高了程序的高效性。
C语言语法结构相对于其他语言, 使用更加方便、灵活, 功能丰富, 数据类型、实现方式都相对不那么复杂, 不仅可以实现高级语言的作用, 而且可以发挥低级语言的作用, 被广泛地应用到软件的编写中。在程序的编写过程中, 它对设计者的编程能力也不那么严格, 语法错误有限, 变量的类型比较灵活, 设计语言的自由度比较大。而且, C语言编写出来的程序其兼容性比较大, 无需做太多的改动, 便可应用到其他的软件中, 这也就是所谓的“可移植性”强。
另外, C语言有很多其他的优点, 如具有丰富的数据类型 (占据字节数不等的整型、实型、字符型等) , 语法限制不太严格、程序设计自由度大、允许直接访问物理地址、可进行位操作、实现汇编语言的大部分功能等, 这些优点共同推动它成为全球广泛应用的一种高级计算机语言。
2 C语言软件开发相关内容
2.1 C语言程序的编译
一般来讲, 计算机语言编写出来的程序包括源程序、目标程序等, 源程序就是指高级语言编写的程序, 这是计算机不能够直接接受的, 所以需要通过软件作一些转化, 而目标程序则是指二进制代码表示的程序, 它可以被计算机接受, 源程序就是通过特定的软件把那些规则的编程语言语句转换成二进制的机器指令, 这就是所谓的编译程序。因此, 每一种高级语言都是有与它对应的编译程序。
C语言中, 也不可避免地存在着C源程序、目标文件, 只不过有它专用的名词来表示, C语言的各种语句, 也是通过编译, 作出如此的转化, 成为二进制的指令。经编译后, 它的目标文件被表示为.OBJ文件, 是一个二进制的文件, 然后由特定的软件把.OBJ文件与C语言提供的各种库函数连接起来生成一个后缀为.EXE的可执行文件。在操作系统中, 运行这个文件就可以了。以上, 就是C语言程序的具体编译过程。
2.2 C语言软件开发的效率
众所周知, 计算机语言的普遍具有的特点就是可以极大程度地提高运行的速率, 减少运算的量, 用极少而又简单的程序代码表达较复杂的算法并且一定程度上减少数据的存储。无论是在数据的存储类型还是程序软件的结构, 都是本着简单高效的原则工作的。
C语言的数据有多种类型, 在对其进行处理时, 要先存放在内存中, 不同类型的数据在存储器中的存放格式也不相同, 不同类型的数据所占内存长度不同, 数据表达形式也不同, 其值域也不相同, 但是, C语言中规定, 任何数据都必须有明确的数据类型, 这样对数据进行仔细地划分后, 可以使得C语言的运行简化、高效。
C语言程序软件采用模块化的结构, 当计算机在处理较为复杂的任务时, 所写出的程序常常是由上万条语句组成, 需要完成很庞大的任务量。因此, C语言会把这个复杂的任务分解成一个个子任务, 每个子任务再继续进行分解, 直到每个子任务只完成一项简单的功能, 然后在进行程序设计时, 每个模块去实现这些较小的功能, 每个程序设计人员分别完成一个或多个小模块。由此看来, 把一个完整的繁琐的程序分解成为若干个子程序, 每个子程序由有限的代码实现, 这样, 一方面减轻了程序设计人员的负担, 也使得程序逻辑清晰简单化, 只需要对程序之间的数据传递作出统一规范, 同一软件可由一组人员同时进行编写, 分别进行调试, 这就大大提高了C语言软件的效率。
2.3 C语言软件开发的移植
与汇编语言相比, C语言程序的可移植性可以很大程度地增加程序的可用性, 所谓的“可移植性”, 并不是指所写的程序不作任何的修改就可以在任何计算机上运行, 通俗地讲, 它是指当条件有变化时, 程序无需作太多的修改就可以运行, 但是仍然存在着需要修改的部分。在不同的平台上运行时, 改动的代码是一部分, 也就是指分模块编程, 把不会变的代码写到一起, 基本上不作修改就可以用于各种型号的计算机和各种操作系统。比如, C语言是C++的基础, 两者在很多方面都是兼容的。C程序都是由函数构成, 而函数由主函数和函数体组成, 如下程序:
这个程序在C语言中的运行结果是“Hello, word!”, 而在其他的一些软件中的运行结果也是同样的。
2.4 C语言软件开发的调试
编程语言在编译和运行的时候, 可能会出现错误或者警告, 而错误主要是包括语法和逻辑错误, 在编译的时候, 语法错误可以检测出来, 而逻辑错误是编译界面无法直接检测出来的, 就要通过调试来解决问题。所谓“调试”, 是指程序没有显示语法错误。调试的时候, 程序员应该先进行静态的检查, 也就是有效的人工检查, 尽可能在程序上多加注释, 之后再上机调试, 也就是动态检查, 编译时发现错误时, 可以找出并改正, 然后程序员就可以连接并执行目标程序, 然后运行, 如此反复地调试即可。比如对于上述的程序, 如果在软件中编译发现错误, 就需要针对错误的地方进行更改。
3 结语
近年来, 由于C++的出现, 进一步增加了C语言面向对象的程序设计功能, 使得C语言已经成为最流行的一种计算机程序设计语言。无论是从算法、编程、调试还是其他各个方面, C语言软件的开发都展现出了极大的优异性, 相关人员应该学会在继承它的各种优点的同时, 开发出更具竞争力的计算机的高级语言, 满足人们的需求, 从而推动社会的进步。
参考文献
[1]周鸣争.C语言程序设计教程[M].成都:电子科技大学出版社, 2005.
[2]田淑清.全国计算机等级考试二级教程[M].北京:高等教育出版社, 2011.
软件调试 篇8
成像测井技术是新一代测井技术,在复杂油气蔵勘探中发挥着重要的作用。成像测井仪器是实施成像测井的重要物质基础,为了满足国内成像测井的需求,相关单位启动了成像测井仪器研发项目。由于成像测井仪器结构复杂,高新技术集中,研制和维护需要专用测试装备支持。中国石油大学(北京) 鞠晓东教授与CPL合作开展了相应成像测井仪调试台架研制工作,其中包括微电阻率扫描测井仪、阵列感应成像测井仪和测井仪数据遥传等三个成像测井仪的调试台架。为实现调试台架通用性,除具体功能实现的差别外,硬件和软件设计上采用相近的体系结构。本文以微电阻率扫描测井仪调试台架为例,介绍调试台架软件系统设计与实现方法。
1 微电阻率扫描测井仪调试台架结构
微电阻扫描测井仪调试台架是针对CPL的MCI井下仪器专用测试系统,主要功能是对MCI井下仪器的关键部件极板、测斜短节和遥传短节进行性能测试。
微电阻扫描测井仪调试台架结构如图1所示,由前端机和上位机两部分构成。前端机是调试台架测试核心,上位机是调试台架的监控平台,完成对测试数据的处理,并提供友好的测控交互界面。前端机由主控核心板和对应的检测接口板组成。检测接口板由相应测试电路和FPGA构成,FPGA完成测试的直接控制。主控核心板是前端机的测控核心,一方面通过扩展I/O总线与各检测接口板的FPGA通信,完成测试过程的控制;另一方面完成前端机与上位机的通信[1]。
2 调试台架软件系统
2.1 调试台架软件系统功能需求
根据调试台架结构和功能需求,调试台架软件系统主要功能如下:
(1)实现测试过程的控制功能;
(2)实现前端机与上位机通讯功能;
(3)完成测试数据处理任务;
(4)实现测试数据和测试结果的图形化显示功能;
(5)实现测试结果导入和导出功能。
2.2 调试台架通讯模式选择
基于主从式结构的测试系统具有C/S和B/S两种通信模式。C/S(客户机/服务器)模式是基于分布处理的二层体系结构,其优点:交互性强、数据传输安全、响应速度快和数据处理能力强等。B/S(浏览器/服务器)模式是随着网络技术发展,在C/S模式基础上,形成一种三层C/S结构。由于B/S模式增加了Web服务器,用户可以通过客户端的Web网页浏览器实现对服务器端的访问,这达到了客户端软件“零”维护的目的[2]。由于C/S模式软件结构简单性能优秀,在测试仪器领域使用广泛,所以本调试台架采用C/S通讯模式。
2.3 调试台架软件系统结构
根据调试台架主从式结构,调试台架软件系统由前端机软件和上位机软件两部分组成。前端机软件运行于主控核心板上的嵌入式系统,上位机软件运行于基于x86通用计算机。根据两个平台性能的差异,前端机完成对嵌入式系统管理、测试控制和与上位机通讯等任务。上位机软件完成与前端机通讯、数据处理和图形化显示等功能。
3 前端机软件设计
3.1 前端机软件结构
主控核心板是前端机管理和测控核心,其主要组成部分是基于S3C2440的嵌入式系统。前端机软件结构如图2所示,包括嵌入式系统软件和功能软件两部分,系统软件包括:引导加载程序、嵌入式操作系统、文件系统和驱动程序等。嵌入式操作系统和文件系统是嵌入式系统的核心软件,它一方面通过驱动程序对底层硬件进行管理,另一方面为应用软件提供工作环境。驱动程序为操作系统和应用程序提供硬件设备操作的软件。功能软件指为实现特定功能而设计的应用软件[3]。
根据前端机嵌入式系统的体系统特点,确定基于Linux的系统软件,并构建了基于U-Boot1.1.6 + Linux 2.6.25 + Yaffs2的前端机系统软件。前端机驱动程序包括:Nand Flash驱动、网络芯片驱动和检测接口板驱动。对于上述三个调试台架,Nand Flash芯片和网络芯片都采用相同结构,但是各检测接口板的功能和接口结构不同,为实现前端机软件在各调试台架间移植,Nand Flash和网络芯片的驱动程序直接编译到Linux内核,各检测接口板的驱动程序采用内核模块的方式进行动态加载。
3.2 前端机应用程序设计
微电阻率扫描测井仪调试台架前端机软件结构如图3所示,由极板测试模块、测斜测试模块、遥传测试模块、人机交互模块和网络通讯模块组成。三个测试模块是前端机测试功能核心,它通过功能接口板驱动完成与接口板的通讯,控制相应测试过程。人机交互模块对前端机的LCD显示模块和小键盘的支持。网络通讯模块通过与上位软件通讯模块建立流式套接字,实现来自上位机的命令和测试数据传输。
为实现前端各功能模块协调工作,前端机主程序采用多线程技术,各功能模块作为独立线程,线程间通过共享内存方法实现数据共享,采用信号量实现线程间的同步。
4 上位机软件设计
4.1 上位机软件功能
上位机软件是调试台架的重要组成部分,主要功能如下:
(1)系统参数设置功能
(2)测量刻度功能
(3)网络通讯功能
(4)数据处理功能
(5)图形化显示功能
(6)数据导入导出功能
(7)帮助功能
4.2 上位机软件结构
上位机采用基于x86处理器的通用计算机,以WindowsXP为运行环境。根据系统性能要求,调试台架的上位机软件开发采用VC++6.0平台。上位机软件结构如图4所示[3],系统所需功能由相应的功能模块完成。系统配置模块实现系统初始化和测试参数设置;网络通讯模块实现上位机与前端机间的数据通信功能;数据处理模块完成测试数据处理任务,获得测试结果;波形显示模块实现测试数据或测试结果的图形化显示功能;测量刻度模块完成测量系统的刻度任务,保证测量的准确性;数据导入导出模块完成数据文件的保存和读取任务,实现测试数据的永久保存和测试结果重现。中间层为WindowsXP的系统内核层,通过内核的消息驱动机制,可以协调各功能模块间的工作,实现软件系统的高效、平稳运行。
VC++6.0具有三种应用程序框架:对话框、单文档(SDI)和多文档(MDI)。在三种框架中对话框框架是最简单,功能也相对最弱。SDI框架可以实现单个文档及其视图的组织,而MDI可以实现多个文档及其视图的组织。微电阻率扫描测井仪调试台架功能是对MCI井下仪器的极板、测斜短节和遥传短节等关键部件进行性能测试。每个测试任务都对应着特定数据结构和测控界面,所以本调试台架选择MDI框架作为上位机软件的组织结构。
MDI框架是通过文档模板实现对相应文档类、视图类、子窗口类和资源标本的管理。微电阻率扫描测井仪调试台架软件框架类图如图5所示,根据系统功能建立三个文档模板指针:pJibanTemplate(对应极板测试)、pCexieTemplate(对应测斜仪短节测试)和pYaochuanTemplate(对应遥传短节测试)。这些文档模板分别对极板测试、测斜短节和遥传短节测试任务对应文档、视图、子窗口、菜单等资料进行管理。MDI软件框架是个开放结构,方便软件功能扩展和移植。
如图4所示,功能模块是上位机软件功能的载体,实现上位机具体功能。根据这些模块的复用性不同,可以把系统配置模块、测量刻度模块和数据导入导出模块采用封装类方法实现,而曲线显示模块、数据处理模块、网络通讯模块采用组件技术实现。
4.3 主要功能模块设计
4.3.1 系统配置模块
系统配置模块的功能是对软件系统进行参数设置,为软件提供所需的工作环境。系统配置功能由类CIniFile实现系统配置功能,该类提供GetStrValue、GetIntValue和GetLongValue等读取成员函数,SetStrValue、SetIntValue和SetLongValue等写入成员函数。这些成员函数封装了GetPrivateProfile-String、GetPrivateProfileInt、WritePrivate-ProfileString和WritePrivateProfileInt等API函数。通过CIniFile的成员函数可以对软件系统的配置文件MCIS.ini进行修改和读取,进而实现系统配置功能。
4.3.2 测量刻度模块
为了保证测量的准确性,在测量前,需要对测试系统进行校准。调试台架软件系统刻度功能是通过给数据采集系统各通道加上相应的恒定电压值,进行系统线性刻度,找出各通道的乘系数和加系数。测量刻度功能是由封装类CCalibrate完成,该类包括进行测量刻度所需的成员变量和成员函数。
4.3.3 数据导入导出模块
为了实现测量结果的保存和重现,要求对磁盘文件进行读写操作,这些功能由数据导入导出模块完成。数据导入和导出功能是通过对CFile类进行二次封装,根据测试数据结构,增加相应写入和读出成员函数。通过这些成员函数可以很方便实现对数据文件存取操作。
4.4 以太网通讯组件—Winsock控件[4]
对于基于C/S模式本调试台架,需要上位机应用软件具体网络通讯功能。VC++6.0可以通过MFC库提供的CAsyncSocket类、CSocket类或Winsock控件完成网络通讯程序开发。采用前两个类开发,需要开发人员对网络协议和相关的底层技术有深入了解,而Winsock控件封闭了技术细节,可以降低开发难度,缩短开发时间。
应用程序通过控件的属性、方法和事件实现对其访问。Winsock控件的主要属性:
(1) LocalIP 本地计算机的IP
(2) LocalPort 本地计算机的端口号
(3)LocalHostName 本地计算机名
(4) RemoteHostIP 远程计算机IP
(5) RemotePort 远程计算机接口
(6) RemoteHost 远程计算机名
(7) state 控件的当前状态
(8) Protocol 通信协议
Winsock 控件的主要方法
(1) Accept 接受到来的连接
(2) Connect 发出连接请求
(3) Listen 创建并监听一个套接字
(4) Close 关闭TCP连接
(5) GetData 获得数据块
(6) SendData 向远程计算机发送数据
(7) PeekData 获得一个数据拷贝
Winsock控件的主要事件
(1) Close 关闭一个TCP连接
(2) Connect 向远程计算机发出连接请求
(3) ConnectionRequest 当远程计算机请求连接时产生
(4) DataArrival 数据到达
(5) Error 发生一个后台台错误
(6) SendComplete 数据发送完成
(7) SendProgram 数据传送进程
利用Winsock控件创建基于C/S客户端的过程:首先对Winsock控件的相应属性进行赋值,包括前端机名或IP地址、前端机通讯端口。然后调用Connect方法,向前端机发出连接请求。根据是否有ConnectRequest事件发生,判断是否与前端机连接成功。为了完成连接,在ConnectRequest事件中调用Accept方法。连接完成后,就可以通过SendData向前端机发送数据了,根据是否有DataArrival事件,判断是否有数据回传,如果有,在DataArrival事件内通过调用GetData方法来得到数据。
4.5 曲线显示组件—MSChart控件[5]
MSChart控件是微软开发的图表工具,它能够制作多种二维、三维的图表功能。绘制折线图是MSChart控件功能之一,所以本系统选择MSChart控件作为曲线显示组件。
MSChart控件的主要属性
(1) charttype图形类型
(2) Row属性
(3) Column属性
(4) Data属性
(5) Legend属性
(6) Title属性
(7) ChartData属性
通过属性设置就可以实现对等显示图表的更新。
曲线显示过程:
(1)对MSChart的属性进行设置,包括标题、背景色、图例、轴、线色、线宽等。对于静态属性,可以在程序初始化过程进行设置,也可以通过属性卡来在界面设计过程中设置。
(2)通过网络通讯控件获得测试数据。
(3)通过修改数据属性绘制曲线。
4.6 基于Matlab COM的数据处理组件[6]
数据处理在测试软件中担当着重要的角色。为了实现数据处理模块的可重用性,本文利用Matlab自带的COM builder工具相应的数据处理组件,以极板测试数据处理组件为例,介绍组件的开发方法。
极板测试数据处理是为了获取所测量正弦的幅度值,算法包括数点法、三点法、最小二乘法和数字相敏检波法等,本组件采用的算法是数字相敏检波法。离散型的数据相敏检波算法公式如式(1)和式(2)所示。
其中N为采样区间数据长度,i为数据序号,ωD是数字角频率。
根据式(1)和式(2)创建m程序function [amp, phi]=xmjb(Data),其中Data是测试获得到的正弦波数据序列,amp,phi分别是正弦波的幅度值和相位。
接着利用在Matlab的命令窗口输入:comtool,根据提示进行设置,生成COM组件,并对该组件进行打包。
5 总结
本文给出基于C/S通讯模式的微电阻率扫描测井仪调试台架软件设计的思路。本系统采用C/S通讯模式。在前端机软件设计过程中引入内核模块动态加载和多线程技术,在上位机软件设计中,功能实现采用模块化设计,并在主要功能模块上采用组件技术。该设计思路提高了微电阻率扫描测井仪调试台架软件系统功能扩展性和移植性。
参考文献
[1]鞠晓东,成向阳,卢俊强.基于嵌入式架构的测井仪器调试台架系统设计.测井技术,2009;33(3):270—274
[2]刘媛,张伟,王知学.基于B/S和C/S架构的嵌入式远程监控系统.仪表技术与传感器,2008;(10):39—41
[3]罗苑棠,杨宗德.嵌入式Linux应用系统开发实例精讲.北京:电子工业出版社,2007:125—127
[4]龚安.基于VB的Winsock控件实现C/S网络通信.科学技术与工程,2006;6(10):1447—1450
[5]曲国伟,王英慧.VC++环境下利用MsChart控件对GPS数据的处理.计算机与现代化,2007;(9):132—136
相关文章:
岩土工程勘查技术01-23
深部找矿技术01-23
浅谈地质找矿勘查技术01-23
地质勘查技术人员管理论文提纲01-23
论地质矿产勘查找矿方法01-23
宏程序在数控编程中的应用01-23
优秀的Java程序员应具备哪些编程技术01-23
《C程序设计》编程教学方法的创新初探01-23
运行调试01-23