如何按照设定的时间间隔保存数据到同一个Excel
如上图,点击保存按钮,每到设定的保存间隔都会在当前路径下自动以当前日期以及机器编号新建Excel来保存数据,如何修改以上程序,使得在程序运行状态下,每次只有点击数据保存按钮才会以点击按钮时的时间以及机器编号建立一个EXCEL,并且将接下来的数据按照设定的保存间隔都保存到点击按钮时新建的EXCEL中,而不是上图中的每隔设定的保存间隔都新建EXCEL,来保存数据。也就是每次只有点击数据保存按钮才会新建EXCEL,将数据按照设定的保存间隔保存到同一个EXCEL.
嗯..不过,你这个程序框图,我在脑袋里想了下,感觉有点问题,不知道你有没有调试运行过。
当第一次运行程序,点击保存后(初始值为F,假设你“保存”按钮的机械动作是按下后切换,即之后变为T),进入条件真分支,这时候,事件结构在100ms内等待“‘保存’值改变”,怎么触发?或许你“保存”按钮设置的动作只是按下时切换,即只有按下时候才为T,虽然这样应该是可以的,但个人认为程序上不严谨。因为,你最外层的while循环,并没有延时VI,所以内部的条件结构判断在不断循环判断,并且由于全速占用CPU,所以快速,所以你鼠标释放前肯定进入到条件真分支内了,而当你鼠标释放的时候,可能就刚好触发了事件结构。然而如果机械动作设置成这样,那么下次while循环则只进入假分支。另一方面,如果释放的速度大于100ms,那么则先进入超时分支,如果程序初始运行,“添加的路径”局部变量如果为空,则会提示新建or直接报错。所以,不论你的“保存”按钮机械动作怎么设置,好像都有问题。
另一方面,前面有提到,假设初始值为F,在你奇数次点击“保存”按钮之前,即第0次、第2次等,这时候假分支循环如果为空,那么while循环不断循环,非常占用CPU,容易造成其它线程卡顿。如果假分支有延时等函数,那么又可能导致你事件结构错过“保存”按钮响应等操作?
没有你具体程序,只是脑袋中想象的,可能有问题,你看看就好。
另外,像楼上说到的动态注册事件应该是可以的,而且应该比你现在这个程序要严谨可靠,可以试试。
最后提下,你的后面几次回帖时候,EXCEL写成EXCLE了。
循环前面用一个事件结构,负责响应“数据保存”按钮按下操作。然后,把你图中上面那些新建文件的放在事件结构分支里面,把文件引用连到后面的循环里写入文本文件。循环里剩余的不需要改变即可。
条件结构外面套个事件结构就OK
感谢您的回复,我按照您说的,改了下,能够实现程序运行时点击保存按钮按照当前时间以及机器号建立EXCLE,将数据按照设定时间间隔保存到该EXCLE,但在第一次点击保存按钮保存文件后,在本次运行状态下,再次点击保存按钮,却没有反应,保存按钮无法被选中,麻烦您帮我看一下是什么原因
试过了,不能实现,时间结构套在外面,只能实现点击按钮时动作,不能按照设定的保存间隔连续保存数据
自顶,希望大家能帮我看一下
把事件结构后面的循环做成子VI,事件结构按按钮的时候调用子VI运行。
如果直接按照你说的这样做,估计会出现卡死:子VI无法停止,无法跳出循环。
你高亮看下你的程序就应该明白。前面的事件结构没有循环,所以一旦触发之后,就不会进入对应分支,然后进行后续程序,而这块程序不会再得到响应了,所以你第二次按保存按钮不会有反应。
我但是这样给你建议,是因为你的控件名称叫“数据保存”,而且你想要当控件按下之后持续间隔写入文本,所以,我不太明白为什么你有要在当前保存没有停止的情况下进行再次按下“数据保存”按钮呢?按照正常思路,如果要记录另一个文件,不应该先按下“退出程序”按钮么,否则我程序怎么知道什么时候停止?然后再重新运行VI,或者总体最外面加个循环。
除非,你想要,每次按下“数据保存”就新增一个写入文本?即同时写入多个文本文件?
如果要想进一步改进,可以自己学习下队列+生产者/消费者循环+状态机。
如果要实现多个写入过程同时实现,自己再补充下多线程的编程思路。
感谢您的回复,之所以没先退出,又进行下次保存是这样的,我用的生产者-消费者结构来进行数据采集,消费者部分进行数据的保存,需要实现生产者部分采集开始后,当需要保存数据时点击保存按钮,以当前的时间和机器编号新建一个EXCLE,把之后的数据按照当前设定的保存间隔,比如说10s保存到这个EXCLE,保存过程中当我更换机器,机器号发生改变,或者想用20s的间隔保存数据时不用停止程序,只需再次点击数据保存按钮使其弹起,数据保存暂停,输入新的机器编号和保存间隔,再次点击保存按钮即可,下面是修改后的 程序框图
感谢您的回复,这样做比较麻烦,我已经用另外的方法实现
用注册事件结构就可以
感谢您德回复,我试试
感谢小编,小编大神!
谢谢分享