困扰很久的问题,期待高手能给予帮忙解答一下,关于主vi调用子vi
我想实现的是,子vi连续采集仪表的数据,主vi进行数据显示以及相关的操作,存储。仪表是定时向串口发送数据,每一秒一行数据,后面有自动回车换行。
由于子vi是一个完整的串口连续数据采集,我将采集到的文本数据发在一个while循环里面,做了一个全局变量来传递数据,因此我在主vi初始化的时候调入了子VI。然后在while循环里面进行数据的连续刷新显示
现在的问题 是,生成exe后,无法设置选择com口,因为子vi如果重入,只是作为副本,都无法停止!
请问怎么才能在主vi点击设置后,停止整个程序,跳出子采集vi的窗口,设置了子vi的串口通讯口呢
如果只用一个主vi,在主界面设置com,整个界面不好看!
求问,谢谢
顶一下帖子,大神来回答
用状态机(队列)加事件结构来写,应该可以实现
没看懂你问的是什么,可能是我理解太差,,是要选择串口的弹窗?还是需要一个窗口停止另一个窗口也要停止?
是这样的,我看了好多范例,很多都是一个主界面,包括选择串口控件,位于软件的主界面上,很不美观,而且容易误操作。
因此我希望像现在很多常规的软件一样,主界面是用于显示和常规操作的,但是修改参数需要点击设置按钮,然后进入设置界面
正因为如此,遇到如下几个问题:
我的结构如下:
main.vi 主界面
data.vi 连续采集数据,并放入到全局变量中(不需要按钮启动,vi启动便运行)
1.因为我期望开机的时候,软件随机启动就跳出来主界面,因为需要连续采集数据,因此首次运行的时候我需要先配置到端口,只要用户不换usb线,下次开机就可以默认com2(比如)。
2.如果因为种种原因更换了com口,开机跳出主界面因为读不到数据,跳出提示消息,可以点击主界面“设置”按钮,调出data.vi,进行设置。
3.如果在运行中需要切换com口到com3,也可以点击“设置”,调出data.vi进行修改。
问题很明显的是:随机启动后,data.vi是一直运行的,如果我点击“main.vi”的“”设置“”按钮,就编程重入了,
并且,设置按钮事件因为调用了“data.vi”,data一直运行中的,而导致外面while循环无法进行
不太理解编程重入这个概念,也没遇到过,,我开发过很多串口的软件,一般的流程就是选择串口窗口或自动选串口,主程序,,采集和数据处理都可以在主程序里执行,采集就两个函数没有必要单独用一个子vi,,像你这个你可以添加一个停止的全局变量,再用条件框把这个vi放到“真”里面,你点击设置按钮的时候data.vi停止运行,然后条件框执行“假”条件,弹出修改串口的窗口,修改完串口确定后再执行“真”条件,,我的思路是这样,不知道对你有没有用
是的,主要我是看到选择串口这个控件在主界面上很不美观,我想放到设置界面去,而且这个控件也就开始的时候用一次,后面正常工作都不用。
我看了很多范例,都是主界面上选择串口,我曾想把这个单独控件放到一个子vi,不过现在我通过引用调用的方式来完成了,然后调用弹出子vi,可以直接看到子vi工作状态,同时全局变量传递数据。没有用队列,因为我的数据比较规则。
另外想请教下,如果通过ini文件来启动初始化时候读取软件的相应配置?那样就更方便了,直接更改下ini文件就可以启动了。
当然可以用ini了,很灵活的
请问能否提供一些例子?我想改成ini,另外请教一下,目前我想做一个历史数据界面,大概存储2000条左右记录,多余的记录就覆盖,早前的可以导出,请问通过什么存储方式更简单,高效
数据量不大,又全部是字符串,有必要用access吗?
配置文件ini的例子太多了,也很简单,知道段名和键名直接读写就可以了,,我的思路是用以为寄存器保存数据,通过截取最新的2000个数据,,不知道对你有没有用
非常感谢您的帮助,我对labview的数据存储还不是很明白,再研究一下,如果用寄存器,是不是关闭软件,重启电脑,数据就没有了?这样意义就不大了,我觉得还是采用内部数据库的方式或者直接就采用txt文件作为数据存储中间介质,导出的数据存为excel