找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1675|回复: 7

串口ReadSerialToGraph程序中关于LabVIEW程序启动和退出时的执行问题

[复制链接]
发表于 2008-3-30 16:25:57 | 显示全部楼层 |阅读模式
我用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[r],y=cos(r),r=r+0.1,1}
  椭圆:f(x,y,r) = {x=2*sin[r],y=cos(r),r=r+0.1,1}

  星行线:f(x,y,r) = {x=sin[r]^3,y=cos[r]^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[Byte],1}

  读一个字节返回二组数据【公式字节起始位置为4】:f(x1,y1,x2,y2,Byte) = {x1=Byte,y1=sin[Byte],x2=x1/2,y2=y2*2,2}

  读二个字节返回一组数据【公式字节起始位置为0】:f(x,y) = 1

  读二个字节返回二组数据【公式字节起始位置为2】:f(x1,y1,x2,y2) = 2

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2008-3-31 09:07:13 | 显示全部楼层
1,兄弟您不是做得都挺好的吗?一般要释放的话在它的DLL里面会有相关的函数,就像您的DLL上面的FREE一样!

2,没有办法帮您测试,我的电脑也只有虚拟的端口,但您不用担心,二者是一样的!虚拟的串口和真实的没有什么区别!如果没有端口它仍然能绘图,就要看您的算法在它输出0 的时候,它会不会还有值呢?如果有,就应该会的!除非您先检查这个端口是否出错的时候再进行绘图,就不会有了!用unbundle by name来接到错误码信息上面来判断!好运!
回复 顶

使用道具 举报

发表于 2008-3-31 09:43:12 | 显示全部楼层

难得一见的好贴,待会仔细看看。。。。。楼主对vc编程非常熟悉?这两个dll哪来的?
回复 顶

使用道具 举报

发表于 2008-3-31 13:22:08 | 显示全部楼层
这个DLL确实相当不错,呵呵
回复 顶

使用道具 举报

 楼主| 发表于 2008-3-31 16:08:03 | 显示全部楼层
谢谢各位的回复。

cpubbs,你好:现在程序每次运行,第一部分的初始化和最后一部分的释放都运行一次,这是没有必要的。我想让它们在程序启动和退出时仅执行一次。有办法吗?

飞雨天、lgh269,你好:这两个dll是我自己的,欢迎使用啊!
参考:http://www.skycn.com/soft/23045.html
http://blog.csdn.net/forcal
http://forcal.512j.com/
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-3 06:17:07 | 显示全部楼层
1、程序每次运行,第一部分的初始化和最后一部分的释放都运行一次,这是没有必要的。我想让它们在程序启动和退出时仅执行一次。在LabVIEW中难道不能实现吗?

2、还有一个问题:在LabVIEW中如何实现多线程?
就本例子而言:输入公式 while[1,1] ,程序就进入无限循环了,程序界面失去响应,不过按Ctrl+Alt+Q(q) 利用本程序加载的动态库QuitFc.dll可以退出。在LabVIEW中实现多线程后,输入公式 while[1,1] 运行时,仅主程序界面失去响应,可以在另一线程界面调用退出Forcal运行的函数,这样就不用加载动态库QuitFc.dll了。
回复 顶

使用道具 举报

发表于 2008-4-3 08:58:16 | 显示全部楼层
第一点我看的不是很懂。。。。你这个程序写起来,没有问题的,每次程序运行,初始化部分和释放部分只执行一次,它们又不在循环里面,当然执行一次。。。一次程序运行就包含了程序的启动和程序的退出了。。

第二点暂时没头绪,先看看再说
回复 顶

使用道具 举报

 楼主| 发表于 2008-4-3 10:45:25 | 显示全部楼层
关于第一点是这样的:程序启动时,第一部分执行一次,以后每次按运行按钮都不用再执行,每次按运行按钮也不执行最后一部分,等程序退出之前,执行最后一部分一次。
回复 顶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-30 09:36 , Processed in 0.049317 second(s), 11 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表