小草手把手教你 LabVIEW 串口仪器控制—使用串口调试小助手
①,调试下位机指令,使用串口调试小助手,连接仪器调试。
一般你拿到一台仪器,得到指令后,建议用串口调试小助手来测试指令,指令测试没问题后,再用 LabVIEW 来进行编程。
很多人指令都没弄清楚,然后用 LabVIEW 编写了程序,然后收不到数据之类的,很可能你指令不对,可能发送的不是 16 进制的,或者发送的末尾没加校验叫终止符之类。所以,循序渐进的来的话,先用串口调试小助手测试指令,然后把指令在写到 VISA 写入里面。
串口调试小助手,网上有很多。注意,有些串口调试助手,写的可能不好,我以前见过一些从网上随便下的,然后发送指令有问题。后来发现,十六进制下,字符串之中的空格符没给自动的去除,还有各种的,所以,前提是,保证你串口助手没问题。
我用的是这个,挺好用的。常见的,就是字符串输入框输入命令,记得分清是不是 HEX发送。然后还可以多条字符串发送。
先配置好串口的参数,有些可选项,像 DTR 和 RTS 的,按要求选或者不选。
正常情况下,用单一的字符串发送就可以了。比如你的协议发送是 SETV12.000(假定是程控电源的,设置电压为 12.000V)。如果通讯没问题,程控电源回送一个 OK。在串口助手里,就可以看到 OK。如上图所示。
如果你连串口调试助手都木有收到信息,那你用 LabVIEW 编写肯定是有问题的。所以,前期一定要弄个明白这个协议没问题。
另外,像 Keithley2400,在 LabVIEW 设置里,貌似有个终止符的,要加个 OD 回车符,前面我讲过,属性里有个终止符输出,而说明书里没有写明,这里注意一下。
很多时候,你调试不通,其实都是细节问题。自己要养成良好的处理事情的习惯。自己多琢磨一下,然后实际调试去验证。
② 调试自己的上位机程序,即自己写的 LabVIEW 程序。
问:当你用串口调试小助手跟仪器调试时候,指令都正确了。可是自己写的程序,老是不对,或者收不到数据,或者乱七八糟,该怎么办?
答:请使用串口调试小助手。
操作方法:先使用虚拟串口创建一对串口(如果创建了,就不必再重复了)。比如你创建的是 COM3 和 COM4。你打开串口调试小助手,选择 COM3,然后自己写的 LabVIEW 程序选择 COM4,配置好对应的参数,然后你的 LabVIEW 程序就可以跟你的串口调试小助手进行读写通讯了。
然后你把你下位机给上位机的指令,给自己的 LabVIEW 程序发送一遍,看自己的程序怎么样。第一,能不能收到。这个一般都可以收到。第二,处理后的数值对不对。这个就需要自己截取然后各种操作得到想要的。慢慢琢磨。
有时候,上位机收到的是一串字符,可能是不同的间断的,那可能就需要多条字符串发送。一般串口调试小助手有多条循环发送的功能,见下图,我这个就自带的,他会轮流发送字符串。
另外,可能很多人 LabVIEW 进行串口读取(注意,这里只是读取,没有写入串口)的程序,大多是如下的组合。
请看 WHILE 循环里面,一个“读取串口字节数”和“VISA 读取”。前面已经说了,这两个函数的功能就是读取串口缓冲区已有的字符串。好比你有个水缸,每次使用一次这个组合,就是把水缸的一下子取干净。我加了个判断,没有数据就不读,节约效率。
有些人可能用这个“黄金组合”,收不到数据,那你最好程序里高亮试试,有时候,是下位机发送数据太慢,或者读取的太快,或是读取的是不能正常显示的,如 0A0D 之类的。
经验:用这种 读取串口字节数+VISA 读取组合,可以防止下图错误发生,因为有数据就读,没数据就不读。而如果你指定要读的字节数,当超时时间到之后,如果还没读到指定直接,就会报错。
但是,我写过一个协议,是先发送一段字符,过几毫秒马上又发送结束符 0D,所以,前面数据刚读出来,就被后面的覆盖了,导致我每次都只能看到 0D,后来才知道,不是一起发的,是间断发的。用这种组合,不容易掌握字符串的字数。因为它有数据就读出来,所以,调试的时候,自己多小心。
调试问题就讲这么多。具体靠自己琢磨。
编写者:浅浅的小草
论坛账号:happyarrow
推荐阅读:
小草手把手教你 LabVIEW 串口仪器控制——使用虚拟串口
小草手把手教你 LabVIEW 串口仪器控制——通信协议(指令)
小草手把手教你 LabVIEW 串口仪器控制——字符串处理
小草手把手教你 LabVIEW 串口仪器控制——VISA 串口配置
小草手把手教你 LabVIEW 串口仪器控制——初识VISA串口
小草手把手教你LabVIEW串口仪器控制—安装使用仪器现有驱动
小草手把手教你 LabVIEW 串口仪器控制——VISA 驱动下载安装篇
还研究的没有头绪
0D0A之类的数据有影响,能不能详细点!我发送的数据格式的帧尾就是0D0A,发送和接收同时运行的时候串口接收数据会偶尔漏数据。如果只接收,接收数据能保证完全正确。
调试了一下,0d0a数据没什么问题啊,不知道你的是什么问题。按照你所给的程序,读取缓冲区的数据在显示出来之前应该已经被刷新了,所以我们应该是看不到读取缓冲区的数据。读取缓冲区,个人觉得不是条件读取,应该是顺序读取,有数据就读出来,没数据读空的也没关系,自己会处理就好。
学习了,很好的资料,谢谢分享!希望更多labview资料可以分享
谢谢分享,很有用。
对现在的我来说太有用了,继续努力
好厉害的说。赞赞赞
这个得学习下,不错滴
看看,不能下载
学习了,很好的资料,谢谢分享!
学习了赞一个
真好真好!非常感谢,正好要用到
太漂亮了 6的不行行!菜鸟学习了,谢谢小草!
很好的资料。多谢小编分享
小草您好,请教一个问题,自己编写了一个串口调试程序,想控制下位机,发送数据帧,我把最左边的开关一直设为开(相当于自动发送),能不能实现当数据帧改变时,有输出,没有改变时无输出
能发一下串口调试小助手的程序吗?谢谢
串口调试小助手
很好的建议
非常感谢小编,小编的教程非常好,受益匪浅!
非常感谢小编aaaa
我来看看有没有LV的串口 助手
学习学习。。
辛苦!
最近我也在做这个 ,而且很头疼,就快死掉了
针对性很强,有帮助!
谢谢分享。
学到很多东西 谢谢啦。
赞一个
我来学习一下呵呵!嵌入式培训www.arm8.net
谢谢分享
谢谢分享
帮帮哒
谢谢小编分享,顶一下
很好
谢谢小编
受教了,感谢小编的教程
可以学习学习!
感谢分享,学习中
在哪设置接收数据的帧头帧尾,,求赐教
谢谢小编的分享,收下了
好资料。。
好资料。。
学习下
那这个串口调试助手在哪里下载啊