本帖最后由 njrzkj 于 2015-12-29 15:08 编辑
之前曾发帖求过这方面的相关内容,发现有很多人也有这方面的需求。现在自己弄好了,跟大家分享一下。我们都知道在
labview里可以通过
matlab脚本这个节点,将MATLAB的程序直接写在这里进行调用。但是这种方法只有在LabVIEW处于
非运行状态时才能对其进行操作。现在问题来了:假如老师让学生用MATLAB写一个HDB3编码的程序,每个学生写的可能都不一样,老师没时间一个个的给她们过,验证结果是否正确。然后想用LabVIEW做一个程序,使程序
在运行状态的时候能够
动态随机的导入学生们写的程序,以验证其是否正常。现在的关键是怎么使LabVIEW在运行的时候能够导入事先写好的.M文件? 关于这个问题,LabVIEW自带的例程里是有一个相似的。可以说是在MATLAB脚本框里调用MATLAB的.M子函数的程序“MATLAB script node - Lorenz Diff Eq.vi”,打开这个程序可以看到如下所示的调用方式。运行这个程序,名为LorenzEqs的这个M文件将自动导入到程序当中,这时候可以看到前面板上图像的变化过程。
但是,假如这时候我把这里面的语句改一下,例如将"path(path,pa)"注释掉"%path(path,pa)",即不导入这个文件了,这时候再运行程序,前面板上的图像应该为空才对。但是图像还是一样在变化。再者把这里面的几条语句全都注释掉,这样就相当于一个空的MATLAB脚本了,这时候前面板应该是没有任何变化的吧?可是运行程序后发现图像仍然在变化。关掉这个程序,不用保存。再次打开的的时候,先把“%path(path,pa)”注释掉,然后再运行,发现有报错,即在后面要用到LorenzEqs这个子函数的时候没有找到这个.M子函数的文件;去掉注释,把最后一句应用这个子函数的语句注释掉,再运行程序时发现有如下报错。因为把有“t”这个变量的语句注释掉了,程序肯定就会报错了。至此我们可以知道,不是改变语句对程序没有影响,而是一开始就正确运行程序时,被调用的.M函数文件已经加载到LabVIEW的内存当中,这时候再去改变语句,使其不调用这个函数已经没有用,内存中有的,程序会默认从内存里调用来执行。这样就达不到动态性和随机性。更重要的是,每次运行程序之后,调用的文件就被加载到内存中了一直没有释放掉,这样会造成程序在后面的运行中由于内存的泄漏而卡死,使程序的性能下降。 找到问题的关键再去解决问题就容易多了。都是获取文件的路径,用范例里“path(path,pa)”的方式获取到的文件就直接加噪到内存中没有释放掉,这里不是我们所需要的。在MATLAB里获取文件路径的方式还可以通过cd( )函数来获取。cd(str),这里的str是一个char类型的数组,存储了某个文件的路径。我们直接调用这个cd(str)函数就可以实现获取要调用函数的路径。而调用的函数文件保存的名称可能是不一样的,为了能够动态识别文件名,这里用eval( )函数来实现自动识别文件名。y=eval(d)、[y,ys]=eval(d)中的y或[y,ys]表示所调用函数中的返回参数;d为函数文件名字符串。若已知要调用的函数名是什么也可以直接代替这里的eval( ),只要调用形式一致就可以。程序见附件。这里
值得注意的是,跟MATLAB的要求一样,要调用的.M文件的保存路径必须要是全英文的,否则调用时识别不了路径就会报错。
第一次发技术贴,语言表达也不太流畅,有什么不对的地方还望谅解。希望能够对大家有帮助就可以了。
16