串口ReadSerialToGraph程序中关于LabVIEW程序启动和退出时的执行问题
我用LabVIEW写了一个读串口的程序,功能是将串口数据用自定义的公式变换后显示在Graph图上。有些问题需要向大家请教。1、串口ReadSerialToGraph.vi 的程序面板中,顺序结构的第一部分仅需要在程序启动时执行一次,即对所加载的动态库进行初始化;顺序结构的最后一部分仅需要在程序退出时执行一次,即释放所加载的动态库的资源。如何实现?
2、无端口时程序也能运行绘图,且程序在虚拟端口上测试通过,谁能帮忙在实际端口上测试一下?
==========================
串口ReadSerialToGraph 说明
==========================
1.文件说明
--------------------------
1).“串口ReadSerialToGraph.vi”是源程序文件,供调试用,运行时请使用“串口ReadSerialToGraph.exe”文件。
2).需将“FORCAL.DLL”和“QuitFc.dll”与“ReadSerialToGraph.exe”放在同一目录下。
3).FORCAL.DLL:通用字符串表达式编译运行库。
4).QuitFc.dll:Forcal运行监视动态库,在任意可接受输入的窗口,按 Ctrl+Alt+Q(q) 键可以退出Forcal漫长的计算过程或者无限循环。
--------------------------
2.简要描述
--------------------------
1).根据LabVIEW的Graph图形的特点,图形X轴和Y轴坐标可自己设定。本程序中X轴和Y轴坐标值由转换公式确定。
2).转换公式说明:打开程序帮助窗口(Ctrl+H),将鼠标放在转换公式窗口即可显示转换公式说明。
3).运行开关为窗口左上角的向右箭头 -> 。
--------------------------
3.公式例子
--------------------------
1).端口无效也可运行的例子【若端口有效,设置公式字节起始位置大于自变量个数】
正弦曲线1:f(x,y) = {x++,y=sin(x),1}
正弦曲线2:f(x,y) = {x=x+0.1,y=sin(x),1}
圆:f(x,y,r) = {x=sin,y=cos(r),r=r+0.1,1}
椭圆:f(x,y,r) = {x=2*sin,y=cos(r),r=r+0.1,1}
星行线:f(x,y,r) = {x=sin^3,y=cos^3,r=r+0.1,1}
2).端口有效方可运行的例子
读一个字节返回一组数据1【公式字节起始位置为2】:f(x,y,Byte) = {x++,y=Byte,1}
读一个字节返回一组数据2【公式字节起始位置为2】:f(x,y,Byte) = {x=Byte,y=sin,1}
读一个字节返回二组数据【公式字节起始位置为4】:f(x1,y1,x2,y2,Byte) = {x1=Byte,y1=sin,x2=x1/2,y2=y2*2,2}
读二个字节返回一组数据【公式字节起始位置为0】:f(x,y) = 1
读二个字节返回二组数据【公式字节起始位置为2】:f(x1,y1,x2,y2) = 2 1,兄弟您不是做得都挺好的吗?一般要释放的话在它的DLL里面会有相关的函数,就像您的DLL上面的FREE一样!
2,没有办法帮您测试,我的电脑也只有虚拟的端口,但您不用担心,二者是一样的!虚拟的串口和真实的没有什么区别!如果没有端口它仍然能绘图,就要看您的算法在它输出0 的时候,它会不会还有值呢?如果有,就应该会的!除非您先检查这个端口是否出错的时候再进行绘图,就不会有了!用unbundle by name来接到错误码信息上面来判断!好运! :)
难得一见的好贴,待会仔细看看。。。。。楼主对vc编程非常熟悉?这两个dll哪来的? 这个DLL确实相当不错,呵呵 谢谢各位的回复。
cpubbs,你好:现在程序每次运行,第一部分的初始化和最后一部分的释放都运行一次,这是没有必要的。我想让它们在程序启动和退出时仅执行一次。有办法吗?
飞雨天、lgh269,你好:这两个dll是我自己的,欢迎使用啊!
参考:http://www.skycn.com/soft/23045.html
http://blog.csdn.net/forcal
http://forcal.512j.com/ 1、程序每次运行,第一部分的初始化和最后一部分的释放都运行一次,这是没有必要的。我想让它们在程序启动和退出时仅执行一次。在LabVIEW中难道不能实现吗?
2、还有一个问题:在LabVIEW中如何实现多线程?
就本例子而言:输入公式 while ,程序就进入无限循环了,程序界面失去响应,不过按Ctrl+Alt+Q(q) 利用本程序加载的动态库QuitFc.dll可以退出。在LabVIEW中实现多线程后,输入公式 while 运行时,仅主程序界面失去响应,可以在另一线程界面调用退出Forcal运行的函数,这样就不用加载动态库QuitFc.dll了。 第一点我看的不是很懂。。。。你这个程序写起来,没有问题的,每次程序运行,初始化部分和释放部分只执行一次,它们又不在循环里面,当然执行一次。。。一次程序运行就包含了程序的启动和程序的退出了。。
第二点暂时没头绪,先看看再说 关于第一点是这样的:程序启动时,第一部分执行一次,以后每次按运行按钮都不用再执行,每次按运行按钮也不执行最后一部分,等程序退出之前,执行最后一部分一次。
页:
[1]