基于Java的嵌入式频谱分析仪显示界面的实现方法

文档序号:5885356阅读:262来源:国知局
专利名称:基于Java的嵌入式频谱分析仪显示界面的实现方法
技术领域
本发明属于嵌入式频谱分析仪领域,特别涉及一种基于Java的嵌入式频谱分析仪显示界面的实现方法。
背景技术
目前,小型化的嵌入式控制器逐渐成为现代化仪器的主流,对嵌入式控制器中的人机交互界面的要求也进一步提高,嵌入式环境中基于Java语言的频谱分析仪软件的开发成为了嵌入式控制器中人机交互进一步提高的瓶颈。目前在采用Java语言绘制嵌入式频谱分析仪显示界面时,不能全部直接采用已有控件进行绘制,其中较为关键的频谱显示控件需要用户自己开发。

发明内容
有鉴于此,本发明提供了一种基于Java的嵌入式频谱分析仪显示界面的实现方法,弥补了现有技术的空白,不仅能够在嵌入式环境中绘制出频谱分析仪的显示界面,而且提供了频谱数据的频标显示功能。该方案是这样实现的一种基于Java的嵌入式频谱分析仪显示界面的实现方法,该方法包括建立主线程和辅助线程,主线程完成绘制频谱、频标操作、响应用户操作功能,辅助线程循环利用 TCP/IP协议完成从网络中接收频谱数据,将接收的频谱数据以一个浮点型数组循环保存; 主线程和辅助线程独立运行;(1)主线程通过Java中Component类提供的r印aint 0方法不断自动刷 If paintCompoent () ;paintCompoent () ^ 3 自胃 I Ml ■, ^v M ^ DrawAxe () > Drawruler ()、Drawcurve ();DrawAxe ()采用DrawLine ()函数绘制矩形网格坐标轴,X轴为频率,Y轴为幅度;DrawcurveO调用辅助线程所接收的频谱数据,与用户设定的频谱分析仪参数结合后,在矩形网格坐标轴中绘制频谱曲线;Drawruler ()完成频标相关功能的实现,具体包括①频标图标的创建将预先绘制好的特定图案作为频标图标,用DrawImageO函数添加到主线程中;②频标显示与关闭功能的实现采用右键菜单的形式完成频标的显示与关闭, 利用Java所支持的PopupMenu对象,创建多个MenuItem的多个实例,依次将这些实例加入PopupMenu中,释放鼠标右键时在鼠标监听器中对状态标志位DrawRulerl进行设置, DrawrulerO在每次刷新时通过判断标志位DrawRulerl的状态来决定频标是否显示;初始显示时,将触发右键菜单的X轴位置当做频标图标的显示位置;③频标动态显示频标坐标(xp,yp)的xp固定,yp随频谱曲线幅度动态变化;④频标拖动功能的实现a、鼠标点击频标时触发鼠标press事件,在press事 件中判断是否选中该频标;b、确定选中频标后,状态标志位moveMark开启并触发鼠标拖动事件,循环以下操作记录鼠标位置(X,y),判断频标位置是否越界并进行越界处理,利用 DrawImageO不断将频标图标显示到频谱的位置(x,y)上;C、鼠标释放频标时触发鼠标 release事件,在release事件中将moveMark关闭,不再在循环记录(x,y)的值,只将释放瞬时的(x,y)值当做频标图标的显示位置。较佳地,该方法进一步包括主线程响应用户频谱分析仪参数配置时或者响应启停控制事件时,通过设定标志位A通知辅助线程停止接数操作,辅助线程结束本轮接数操作后,读到标志位A,停止接数;主线程设定标志位A后,延迟200ms后完成当前响应操作。有益效果(1)本发明利用Java提供的语句实现了频谱分析仪的界面显示,不仅能够在嵌入式环境中绘制出频谱分析仪的显示界面,而且提供了频谱数据的频标显示功能,弥补了现有技术的空白。(2)本发明在主线程响应用户频谱分析仪参数配置时或者响应启停控制事件时, 通过设定标志位A通知辅助线程停止接数操作,并延迟200ms后完成响应操作。从而保证在断开辅助线程的接数通道时,辅助线程已经接收到完整数据,从而确保主线程能够调用到完整的频谱数据。(3)本发明针对越界情况进行了处理,不会因越界导致数据错误和程序混乱。(4)由于频谱数据是即时更新的,频标也会随着频谱不断刷新变化的,因此在判断是否选中该频标时,设定一个有效范围来确定选中频标,增大了判断选中操作的正确性和可行性。


图1为本发明DrawAxe ()函数中矩形坐标矩阵创建示意图;图2为本发明Drawcurve ()函数中频谱数据显示示意图;图3为本发明Drawcurve ()函数中频谱数据越界处理示意图;图4为本发明DrawrulerO函数中频标创建和相关功能示意图。
具体实施例方式下面结合附图并举实施例,对本发明进行详细描述。本发明提出了一种基于Java的嵌入式频谱分析仪显示界面的实现方法,其主要包括主辅两个线程,在主线程中,完成绘制频谱、频标创建、响应用户操作功能,在辅助线程中,利用TCP/IP协议完成从网络中接收频谱数据。主线程和辅助线程独立运行。(1)线程的建立和启动本发明使用Java的Thread类代表线程,每条线程完成一定的任务,即执行一段程序流(一段顺序执行的代码),并利用Java中的rim ()方法来封装这样一段程序流,具体方法如下定义Thread类的子类,创建该子类的实例,即创建了线程的对象;重写该类的rimO方法,在方法体中完成需要完成的任务;使用线程对象的start ()方法来启动该线 程。
(2)建立主线程 主线程在其run ()中调用Java中Component类提供的r印aint ()方法不断自动刷新paintCompoentO来实现频谱分析仪的主要任务,paintCompoent ()包含3个自定义函数,分别是 DrawAxe ()、Drawruler ()、Drawcurve (),具体实现如下DrawAxe ()负责绘制网格数量为10X 10的矩形网格坐标轴;Drawcurve ()负责完成从辅助线程中接收过来的频谱数据显示;DrawrulerO负责完成频标创建与相关功能的实现。(3)建立辅助线程辅助线程中利用TCP/IP协议,在通信的两端各建立一个Socket,并通过Socket产生10流来进行网络通信,将标准的频谱分析仪SCPI命令以字符串的形式发送,接收端将从频谱分析仪硬件中接收的频谱数据以一个足够大的Float型数组循环保存。下面针对上述三个自定义函数完成的功能进行详细描述。图1是本发明DrawAxeO函数中矩形坐标矩阵创建示意图。如图1所示,由于Java 中只提供了 DrawLineO这样一个最基本的函数,因此,在频谱绘制过程中仅能以该函数为基础,根据频谱分析仪仪器要求需要一个10X10的坐标网格作为背景,X轴为频率,Y轴为幅度,考虑到占用内存多少影响到程序效率及频谱显示效果,本实施例中定义网格宽度为 400pix,高度为 800pix。图2是本发明DrawcurveO函数中频谱数据显示示意图。如图2所示,为使接收数据能够正确显示在屏幕上,接收频谱数据F和屏幕坐标(x,y)之间需要一个映射关系,本发明采用线性映射方案,利用一元一次方程实现该映射,方程如下χ = 士klXF+bl ;y = 士k2XF+b2 ;在X轴上
.. CanvesWidthk\ = --——τ‘ bl = 0 ;
Sweepromt-I在Y轴上
「 π ,η CanvesHeight ,汽 CanvesHeisht χrefk2 =----,b2 =-\-—;
axexY max χ DivDiv其中,CanvesWidth,CanvesHeight为屏幕的宽度禾口高度,Swe印Point、Div分别代表频谱分析仪的扫描点数和对数刻度,axexYmax则代表屏幕Y轴方向网格的个数。图3是本发明Drawcurve ()函数中频谱数据越界处理示意图。如图3所示,为解决在实际测量中测量的幅度值可能不在设定的范围内导致频谱越界问题,需要对频谱数据作显示效果的限制,但不影响真实测量值。具体来说若 y < CanvesTop,贝U y = CanvesTop ;若 y 彡 CanvesBottom,贝丨J y = CanvesBottom ;其中,CanvesTop, CanvesBottom分别为屏幕上界和下界。图4是本发明DrawrulerO函数中频标创建和相关功能示意图。如图4所示,Java 中没有提供频谱分析仪的专用频标控件,Graphics类虽然可以提供一些画图的方法,但如果仅仅绘制一些简单的几何图形,程序的图形效果会比较单调,因此,本发明利用photshop 软件绘制了一个大小适中的特定图案例如图3所示的菱形图案作为频标图标,并在菱形上方用数字1和2标注其意义(1代表参考频标,2代表差值频标),用Drawlmage ()函数添加到主线程中。频标的相关功能包括和频标拖动,频标显示和关闭,具体实现如下(1)频标显示与关闭 本发明采用右键菜单的形式完成频标的显示与关闭,利用Java所支持的 PopupMenu对象,创建多个MenuItem的多个实例,依次将这些实例加入PopupMenu中,释放鼠标右键时在鼠标监听器中对状态标志位DrawRulerl进行设置,Drawruler ()在每次刷新时通过判断该标志位DrawRulerl的状态来决定频标是否显示。初始显示时,将触发右键菜单的X轴位置当做频标图标的显示位置。较佳地,在显示频标的同时,采用DrawStringO 在网格坐标轴中显示当前频标的频率值和幅度值。(2)频标动态显示频标坐标(xp,yp)的xp固定,yp随频谱曲线幅度动态变化,如图4所示,从而实现频标随频谱数据的移动。(3)频标拖动本发明提出的鼠标拖动功能实际上是一个完整地鼠标拖动位图的过程,包括三大环节,具体方法如下a、鼠标点击频标时触发鼠标press事件,在press事件中判断是否选中该频标具体来说,这里需要说明的是由于频谱数据是即时更新的,频标也会随着频谱不断刷新变化的,因此需要设置一个合理的范围,则如果频标当前坐标在[xp±15,yp±15]区间中,则确定选中频标。b、确定选中频标后,状态标志位moveMark开启并触发鼠标拖动事件,在拖动过程中循环以下操作记录鼠标位置(X,y)的值;判断该频标位置是否越界,并进行越界处理如果越界则将边界作为频标显示位置;将频标在Y方向上作线性映射;利用Drawlmage ()将频标图标显示到动态移动的鼠标位置(x,y)位置上,从而实现频标被拖动的图像显示。c、鼠标释放频标时触发鼠标release事件,在release事件中将moveMark关闭, 不再循环记录(x,y)的值,只将释放瞬时的(x,y)值当做频标图标的显示位置。在主线程和辅助线程运行后,辅助线程循环接收频谱数据。主线程执行绘制频谱操作时,调用辅助线程所接收的频谱数据,与用户设定的频谱分析仪参数(例如中心频率、 扫宽、扫描点数等)结合后绘制频谱曲线。当主线程响应用户频谱分析仪参数配置事件时,需要将参数下发到下位机,由于辅助线程接数也需要与下位机通信,但下位机仅能进行单线程工作,为了避免两者冲突,因此需要同步操作,即通过设定标志位A通知辅助线程停止接数操作,辅助线程结束本轮接数操作后,读到标志位A,从而停止接数。因为辅助线程一轮操作用时大致为200ms,因此主线程设定标志位A后,延迟200ms后向下位机发送参数设置操作,完成后开启辅助线程,进行正常频谱显示,从而使得主线程能够调用到完整的频谱数据。当主线程响应启停控制事件时,与上述做法相同,也通过设定标志位A通知辅助线程停止接数操作,辅助线程结束本轮接数操作后,读到标志位A,停止接数;主线程设定标志位A后,延迟200ms后退出启停控制事件。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种基于Java的嵌入式频谱分析仪显示界面的实现方法,其特征在于,该方法包括建立主线程和辅助线程,主线程完成绘制频谱、频标操作、响应用户操作功能,辅助线程循环利用TCP/IP协议完成从网络中接收频谱数据,将接收的频谱数据以一个浮点型数组循环保存;主线程和辅助线程独立运行;(1)主线程通过Java中Component类提供的r印aint ()方法不断自动刷 if paintCompoent () ;paintCompoent () ^ 3 自胃 I Ml ■, ^v M ^ DrawAxe () > Drawruler ()、Drawcurve ();DrawAxe ()采用DrawLine ()函数绘制矩形网格坐标轴,X轴为频率,Y轴为幅度;DrawcurveO调用辅助线程所接收的频谱数据,与用户设定的频谱分析仪参数结合后, 在矩形网格坐标轴中绘制频谱曲线;DrawrulerO完成频标相关功能的实现,具体包括①频标图标的创建将预先绘制好的特定图案作为频标图标,用DrawImageO函数添加到主线程中;②频标显示与关闭功能的实现采用右键菜单的形式完成频标的显示与关闭,利用Java所支持的PopupMenu对象,创建多个MenuItem的多个实例,依次将这些实例加入PopupMenu中,释放鼠标右键时在鼠标监听器中对状态标志位DrawRulerl进行设置, DrawrulerO在每次刷新时通过判断标志位DrawRulerl的状态来决定频标是否显示;初始显示时,将触发右键菜单的X轴位置当做频标图标的显示位置;③频标动态显示频标坐标(xp,yp)的xp固定,yp随频谱曲线幅度动态变化;④频标拖动功能的实现a、鼠标点击频标时触发鼠标press事件,在press事件中判断是否选中该频标;b、确定选中频标后,状态标志位moveMark开启并触发鼠标拖动事件,循环以下操作记录鼠标位置(X,y),判断频标位置是否越界并进行越界处理,利用 DrawImageO不断将频标图标显示到频谱的位置(x,y)上;C、鼠标释放频标时触发鼠标 release事件,在release事件中将moveMark关闭,不再在循环记录(x,y)的值,只将释放瞬时的(χ,y)值当做频标图标的显示位置。
2.如权利要求1所述的方法,其特征在于,该方法进一步包括主线程响应用户频谱分析仪参数配置时或者响应启停控制事件时,通过设定标志位A通知辅助线程停止接数操作,辅助线程结束本轮接数操作后,读到标志位A,停止接数;主线程设定标志位A后,延迟 200ms后完成当前响应操作。
3.如权利要求1或2所述的方法,其特征在于,在Drawcurve()函数中,采用映射关系 χ = 士klXF+bl和y = 士k2XF+b2将频谱数据F映射为屏幕坐标(x,y);
4.如权利要求3所述的方法,其特征在于,在Drawcurve()函数中,若y < CanvesTop, JjllJ y = CanvesTop ;若 y ^ CanvesBottom, JjllJ y = CanvesBottom ;CanvesTop>CanvesBottom分别为屏幕上界和下界。
5.如权利要求1或2所述的方法,其特征在于,所述在press事件中判断是否选中该频标为如果频标坐标在区间[xp±15,yp±15]中,则确定选中频标。
6.如权利要求1或2所述的方法,其特征在于,该方法进一步包括在显示频标的同时,采用DrawStringO在矩形网格坐标轴中显示当前频标的频率值和幅度值。
7.如权利要求1或2所述的方法,其特征在于,所述特定图案为菱形图案。
全文摘要
本发明公开了一种基于Java的嵌入式频谱分析仪显示界面的实现方法,主要包括主辅两个线程,主线程完成频标创建与相关功能,其采用Java中repaint()方法自动刷新paintCompoent();paintCompoent()包含3个自定义函数DrawAxe()绘制10×10的矩形网格坐标轴;Drawcurve()调用辅助线程所接收的频谱数据,在网格坐标轴中绘制频谱曲线;Drawruler()完成频标相关功能的实现,在辅助线程中,主要利用TCP/IP协议完成从网络中接收频谱数据。该方法弥补了现有技术的空白,不仅能够在嵌入式环境中绘制出频谱分析仪的显示界面,而且提供了频谱数据的频标显示功能。
文档编号G01R23/16GK102156639SQ20101062082
公开日2011年8月17日 申请日期2010年12月24日 优先权日2010年12月24日
发明者何逸伦, 史浩 申请人:北京航天测控技术开发公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1