[分享] 转载:数据可视化工具FreeMASTER v3.0发布评测
1344 查看
4 回复
 楼主 | 发布于 2020-05-14 | 只看楼主
分享到:
FreeMASTER是一个界面友好的,可用于实时观察目标系统中变量内容的数据可视化软件。可以通过多种通信方式将PC机和微控制器电路板连接,实时捕获和配置微控制器中(存放变量)的内存信息,并显示在PC机的软件窗口中。

FreeMASTER软件最早用于汽车电子相关的软件开发中,后被广泛应用在多种开发环境,用以提供友好的人机交互界面。

从笔者的开发经历中,特别是分析例如触摸感应等模拟传感器信号时,常用FreeMASTER实现一个简易的示波器,将单片机中实时采集的传感器信息绘制成时域曲线,显示在电脑界面上,从而便于分析数据,寻找其中的变化规律,进而提取特征信息用于特定的模式匹配。在进行最近比较火热的嵌入式AI开发,在海量的数据处理过程中,通过FreeMASTER的可视化界面,监控计算过程中间某些关键变量的变化过程,简直不要太方便了,就是在给领导和客户演示的时候也是逼格满满.

笔者之前在本公众号中,发表过一篇关于基本使用FreeMASTER的短文,可以帮助嵌入式工程师在5分钟内上手使用FreeMASTER v2.0工具,见: 使用FreeMASTER捕获采样记录并导出重现曲线

近期,NXP官方发布了FreeMASTER v3.0,据说进行了很大的更新,在本文中,笔者对新版本的FreeMASTER进行了试用,并同大家分享使用体验。


安装过程

下载

FreeMASTER的产品主页是:https://www.nxp.com/design/software/development-software/freemaster-run-time-debugging-tool:FREEMASTER在下载页面中还能看到,官网仍然开放了历史版本v2.0和v2.5的下载链接。笔者常用的是v2.0版本。

 

比较惊喜的是,FreeMASTER终于开始能够跨平台了,本次更新提供了Linux系统的安装包。但是根据说明,在Linux上只支持FreeMASTER Lite服务和相关的文档,大家熟悉的桌面版没有提供Linux平台的支持。

从安装包的大小来看,新版的安装包整整增大了一个数量级,从v2.x的40MB左右,一下子剧增到近300MB,笔者不禁脑补了一下,最近到底给它喂了些什么。


安装

下载之后双击安装包安装。安装过程也是全新的,用了InstallAnywhere打包工具对整个软件包进行打包。界面看起来更可爱一些,但略显简单。笔者作为一个资深的嵌入式系统工程师,还是更喜欢之前版本使用InstallShell打包工具简洁干练的工业风。

 

这里特别注意,在安装过程中,如果不是明确需要使用"FreeMASTER Lite服务",而只是使用原有大家熟悉的使用FreeMASTER桌面版提供的功能,可以在安装过程中勾选掉相关的选项。否则会需要提供专门的激活码.

一开始安装的时候由于疏忽跳过了激活码,由于不知道怎样获得"激活码",本打算先安装试用部分功能,但没想到没有激活码竟然直接回滚安装,FreeMASTER的基本功能也被卸载了。后来询问其它同事才知道,这个激活码是在安装过程中自动创建申请的,最关键的,它是免费的。然后笔者重新安装,注意到了安装过程中的一个页面的一段说明:

 

之前安装到这个步骤的时候,自动弹出了一个网页,但是被笔者想当然地给关掉了。现在看来是自动发出的申请激活码的请求。但之前戳"NO"的时候直接回滚了整个安装,这次选"YES"。

弹出网络浏览器并访问NXP官网,需要NXP注册账户授权,然后在网页中确认软件使用许可声明。

 

最后获得激活码。

 

PS: 笔者仔细阅读了一下这个激活码的回单,发现激活码是根据PC的某种"机器识别码"生成的,也就是说,它是绑定在PC上的。好吧,反正是free的,如果换台电脑就再申请一次就好。

后续的安装还出现了不少提示说重复复制文件的问题,这可能是使用新的部署工具没有处理好文件的解压顺序导致的,不影响最终的安装功能。另外,安装过程后来还是通过网络执行了一遍在线激活过程。

安装之后查了一下安装根目录,再一次被惊呆了,FreeMASTER竟然专门包含了一个JRE(Jave运行时环境),不必自行匹配相应的软件版本了。

 

特别注意,如果需要安装FreeMASTER Lite功能,必须确保电脑已经联网,并且能够顺利访问到nxp.com的官网。

试用

从pmp到pmpx按照笔者们对已经熟悉的老版本FreeMASTER的使用步骤,创建工程,导入MCU端的可执行文件解析符号表,根据符号表项创建变量,创建示波器页面,在示波器页面中加载变量,开始采样。一顿操作猛如虎,最终正常工作。这说明新版本确实是能做到兼容老版本用户的使用习惯。

笔者注意到,v3.0版本创建工程的扩展名是".pmpx",而不是原来的".pmp",多了一个"x"。难道这是学了MS Office套件升级文件扩展名的思路? 笔者用sublime text打开工程文件查看其源代码,果不其然,新版本的工程文件已经换用可读的xml档案组织格式了,而老版本的工程文件是无法查看源代码的。这就意味着,在使用新版本的FreeMASTER时,可以以修改源文件的方式精细配置工程,这对于开发工程师来讲绝对是一个"有良心"的设计。

 

 

另外,笔者还试着在新版的软件窗口中导入原有二进制编码的pmp工程文件,同老版使用完全一样,无缝完全兼容。看来FreeMASTER的开发人员在历史兼容性上下了很大的工夫。(实际上这个变更在v2.5中就已经实现了).

ActiveX控件

FreeMASTER的ActionX控件应该是它在基本功能外的另一个亮点。ActiveX控件是Microsoft Windows系统中的应用功能扩展库,可用于互联网的很小的程序,有时称为插件程序。

通过使用ActiveX控件,在FreeMASTER运行框架下,可以使用网页作为界面,访问到单片机中内存中的变量。FreeMASTER的ActiveX控件仅提供面向电路板的内存访问服务,而网页UI的呈现则完全由用户自由发挥,这就为创建丰富的UI创造了灵活的平台。

虽然FreeMASTER的手册中几乎没有提到如何将ActiveX控件用于用户产品设计的说明,但凭借笔者极强的想象力,还是摸索出一套可行的用法。

实际上,FreeMASTER安装包中提供了一个通过JavaScript在htm网页中调用ActiveX控件的例子。位于"FreeMASTER 3.0\FreeMASTER\examples\scripting\JavaScript-ActiveX"目录下的"example.htm"文件。但是为了把这个代码运行起来,需要一波神操作。

首先,从MCUXpresso SDK中导出一个hello_world工程(基于lpcxpresso55s69开发套件),之后在源代码中创建全局变量"var16","var16inc"及"arr16"并确保它们不会被编译器的自动优化掉。

volatile uint16_t var16 = 0u;
volatile uint16_t var16inc = 0;
volatile uint16_t arr16[10] = {0,1,2,3,4,5,6,7,8,9};

之后编译下载工程工程到开发板。

然后就是FreeMASTER的操作了。创建FreeMASTER工程,导入之前编译好的可执行程序文件,之后在FreeMASTER中创建对应的"var16","var16inc"及"arr16"变量。将FreeMASTER安装目录下的"example.htm"文件复制到新创建的FreeMASTER用户工程目录下,然后在FreeMASTER工程中引用这个文件:

 

此时,可以看到网页上有一些按钮和一些内容框,试着戳了几下,会报错,显示没有有效连接。

 

此时,启动FreeMASTER工程,按这些按钮,就能读到和写入位于单片机内存中的变量了。

 

查看"example.htm"文件的源代码可以看到FreeMASTER的ActiveX读写远程变量基本函数的用法:

function read_variable(name,span_id) { /* ReadVariable uses FreeMASTER variable object from current project。Use
     * ReadUIntVariable to access the memory directly using a symbol name。*/ if(pcm.ReadVariable(name))
        document.getElementById(span_id).innerHTML = pcm.LastVariable_vValue;
    else
        on_error("Error when reading variable " + name + "。" + pcm.LastRetMsg);
}

function write_variable(name,input_id) {
    var val = document.getElementById(input_id).value;  /* WriteVariable uses FreeMASTER variable object from current project。Use
     * WriteUIntVariable to access the memory directly using a symbol name。*/ if(pcm.WriteVariable(name,val))
        document.getElementById("status").innerHTML = "Write of the " + name + " succeeded.";
    else
        on_error("Error when writting variable " + name + "。" + pcm.LastRetMsg);
}


JSON-PRC轻量级远程调用协议

这里暂时略过对JSON-PRC协议的介绍。从实用角度看,它是用于替换ActiveX的,同样能够提供从网页到电路板的访问服务。

在新版FreeMASTER的手册中,将JSON-PRC称之为一种"现代的"技术,特别要配合Chromium引擎使用。而Chromium引擎就是Google旗下大名鼎鼎的Chrome浏览器使用的内核。相对应地,ActiveX对应使用的是Microsoft IE浏览器技术。

 

同ActiveX相似,FreeMASTER的安装目录中也有JSON-PRC的样例代码,位于"FreeMASTER 3.0\FreeMASTER\examples\scripting\JavaScript-JSON-RPC"目录下。

将这个目录整个复制到新创建的FreeMASTER工程目录下。之后在FreeMASTER工程中创建一个新的页面"JS-JSON-PRC"并引用JSON-PRC版本的"example.htm"网页文件。此时启动FreeMASTER工程后会报错,因为缺少一个关键的步骤。

将FreeMASTER工程的网页解释器换成Chromium引擎。选中"project" -> "option",在"option"对话框中,选中"使用Chromium引擎"的选项。注意,切换到Chromium引擎后,基于IE的ActiveX控件就不能使用了。

 

此时再启动FreeMASTER工程,就能看到之前使用ActiveX控件实现的操作单片机内存变量的网页, 戳戳看也能正常读写内存了。从功能上看,使用Chromium引擎实现的网页同之前使用ActiveX几乎完全一样,但是显示效果看起来好很多,字体比较圆润。考虑到Chromium引擎已经成为众多流行浏览器内核的事实,FreeMASTER 在技术上需要与时俱进,这可能也是v3.0的设计初衷吧。

 

看一下JSON-PRC版的示例网页源码,可以看到在javascript脚本部分引用的关键组件:
<!-- load JSON-RPC and FreeMASTER wrapper object -->
<script type="text/javascript" src="./simple-jsonrpc-js.js"></script>
<script type="text/javascript" src="./freemaster-client.js"></script> 
这是同ActiveX方式的关键区别,对应地,在ActiveX版的样例代码中,在网页显示部分引用了ActiveX组件:
<!-- The main FreeMASTER ActiveX communication object -->
<object id="pcm" height="0" width="0" classid="clsid:48A185F1-FFDB-11D3-80E3-00C04F176153"></object> 
当然,对变量读写函数的使用方式上也有一些不同:
function read_variable(name,span_id) {  /* ReadVariable uses FreeMASTER variable object from current project。Use
     * ReadUIntVariable to access the memory directly using a symbol name。*/ return pcm.ReadVariable(name)
        .then((value) => {
            document.getElementById(span_id).innerHTML = value.data;
        })
        .catch((err) => {
            on_error(err.msg);
        });
}
    
function write_variable(name,input_id) {
    var val = document.getElementById(input_id).value; /* WriteVariable uses FreeMASTER variable object from current project。Use
     * WriteUIntVariable to access the memory directly using a symbol name。*/ pcm.WriteVariable(name,val)
        .then(() => {
            document.getElementById("status").innerHTML = "Write of the " + name + " succeeded.";
        })
        .catch((err) => {
            on_error(err.msg);
        });
}


FreeMASTER Lite服务

FreeMASTER Lite是v3.0新增的独立组件,用于脱离经典的FreeMASTER框架提供从桌面到电路板的数据访问。

实际上,这几乎是一个并列于FreeMASTER桌面版的全新软件包。它以"服务"的形式运行在系统后台,提供了JSON-PRC接口用于访问远程连接的电路板。就像大多数操作系统服务的运行方式一样,FreeMASTER Lite没有用户窗口,通过命令行和配置文件传入参数。根据手册的描述,FreeMASTER Lite在操作系统中像一个标准的网页服务器一样,一方面同远程的电路板交互,另一方面可以接收来自python或者node.js脚本中的请求。

由于时间关系,笔者还没有仔细研究如何使用这个FreeMASTER Lite的功能,以后有时间再做介绍。


总结

FreeMASTER v3.0兼容了经典FreeMASTER的所有功能,新增了Chromium引擎和JSON-PRC协议组件,用于作为IE引擎和ActiveX的换代产品。首次引入了FreeMASTER Lite软件包,用于提供命令行版本的连接PC机网页和电路板的服务。

新版的FreeMASTER定位于提供运行某些新的FreeMASTER应用工程的运行时环境,而没打算让用户在这个平台上进行二次开发,设计自己的FreeMASTER应用工程。

经过试用,笔者个人建议,经典FreeMASTER用户不用着急迁移到新平台上。如果你一定想使用Chromium引擎,在你的UI界面中增加一些炫酷的特效,那么可以试试桌面版的FreeMASTER v3.0。如果只是简单地使用一个数据可视化的工具,v2.5仍是目前的最佳选择。(没错,借着试用v3.0的兴致,笔者也试用了v2.5,然后决定把用了多年的v2.0更新到v2.5版本)。
(0 ) (0 )
回复 举报

楼主 | 回复于 2020-05-14 沙发

(0 )
评论 (0) 举报

楼主 | 回复于 2020-05-14 2#

(0 )
评论 (0) 举报

回复于 2020-05-14 3#

谢谢楼主分享
(0 )
评论 (0) 举报

回复于 2020-05-26 4#

感谢分享
(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部