Arduino+Labview 串口占用问题求解
最近在学习用上位机labview控制arduino(使用Labview Visa库 而不是 Labview Arduino库,因为Visa更为自由灵活).参考的是"糊涂塔克学习笔记02 Arduino+Labview (下)"中的例子.
直达链接: http://www.geek-workshop.com/thread-1276-1-1.html
由于手头没有"DS18b20温度传感器芯片",我就用使用一个光敏电阻来代替了,反正都是首先通过Uno(OCROBOT MANGO II) 读取电路/器件的数值,然后通过Labview来显示. 我的MANGO II是通过串口COM3连接到电脑上的.
写好程序后:
过程1, 单独使用Arduino-->tools-->serial Monitor/Plotter 没有问题, MANGO可以正常读数.
过程2, 再使用Labview来读取光敏电阻数据,也没有问题(时序问题还有缓存问题暂且不提~).
问题:过程2中, 当我"Labview中按下Stop键"-->"回到Arduino编译器-->尝试修改程序中的delay(xxx)并Upload"时, Arduino编译器反馈"Error opening serial port 'COM3'. (Port busy)".
也就是说COM3串口已经被Labview占用,所以Arduino编译器无法通过COM3对MANGO注入新的程序.
我的解决办法是: 关闭Labview, 再修改Arduino程序,再打开Labview查看调试结果. 但是这个解决办法实在太冗余(反复开关Labview), 想问问朋友们,有没有比较好的解决办法?
我觉得这个问题很重要,因为通过Labview控制Arduino的时候,经常会出现比较底层的"时序错误/buffer溢出"的问题,需要随时调整Labview界面内的循环等待时间和Arduino的数据读取时间. 然而一旦运行Labview,它作为上位机就会剥夺Arduino编辑器的权限,造成无法修改/upload新程序到板子上.
串口只能被一个软件调用。
问题出在每次退出Labview软件程序运行时没有点击“STOP停止”而是直接点击“停止运行X”导致串口没能及时退出Labview调用。所以此时Arduino编程软件就无法去访问串口啦。
所以切记,每次退出Labview程序运行时一定点击While循环里的“STOP”停止程序! @PINKWALKMAN, 谢谢楼上的回答. 我已经注意到了这个问题. 可惜还是没有用.
总结:"点击循环中使用的STOP键"-->"avrdude: ser_open(): can't open device "\\.\COM3",依旧是提示串口被占用,Arduino编译器没有从Labview手上获得串口权限.
不过很重要的一点是, 你的回答让我想起来:是不是Labview里面有一个什么模块来"主动让visa放弃串口权限"? 接3楼本人的回复, 也感谢@PINKWALKMAN 的启发.
我现在是在Labview的后面板,while循环框图之外多加了一个VISA Close 的模块, 目的就是使得"循环读取结束之后/激活while循环的Stop键以后-->Labview通过Visa close模块主动放弃对COM3的占用".
不过如果大家还有什么更好的建议,希望能不吝赐教哇~ 对了,我看啦你的Labview程序后面要加一个关闭串口指令才对,这样就结束啦串口资源的占用。 看这个图,就知道啦。 老弟是个新手 刚刚接触两三天 Visa、linx 和labview interface for Arduino都下载了,但是在labview中搭建好了,它们三个分别 怎么加载到Arduino中的呢 哪个大神能帮忙做个例子用visa 简单的实现 单击灯亮在单击灯灭就行 ,我研究一下。资料实在是太少了,对于新手有些困难,真心在此求助:handshake
页:
[1]