其实
labview传送的只是二进制的数,只是默认以ASCII码显示而已。除你楼主的方法,还有一种就是利用“字符串到字节数组转换工具”,将传送的数据按每8位,保存为一个数组元素。再用“索引数组”索引出需要的
二进制数即可。
1.labview对串口进行调试时,首先需要安装visa驱动,可在NI的官方网站上下载,不过速度好像不是很快。
2.最简模式下进行串口程序接收。如图:
然后在最右边接一个字符串接受区就可以接受到串口发送的数据了。
注意:通过串口发送的是ascii码,因此如果单片机那边发送的是比如0x20之类的数据,那么在接受端你用"Normal"模式将看不到任何东西,因为Normal是以ascii模式查看,而0x20的ascii表示空格,解决的方法为右键点击接受区(字符串指示器),然后选择16进制模式便可以正常查看。
那如果要在单片机那么发送一个具体的数字,怎么才能正确的将这个数提取出来呢?这才是难点所在。
有种方法可以解决:在下位机(发送端)发送的就是表示该数的ascii码,比如你要发送12,那么就发送49,50(ascii比实际的数大48),因此在下位机专门写个函数将欲发送的数转换成ascii码就可以正常发送了。函数很简单,就是将其拆开然后加48。
此方法是专门用于labview,因为要从接收到的字符串中提取数字就必须用这种方法,当然其他的软件,比如说VB之类的在这方面就简单一些,因为它可以在上位机对接受到的ascii码进行处理还原。
3.得到字符串后,将有用的信息提取出来:
比如收到如下信息:
b0001b002b0003b0004b0005……
如果字符串是上述固定格式,可以scan from string 函数直接将数字提取出来,但我遇到的问题是上面的格式在每次发送的时候却不是固定的(串口都这样)
上述字符串有可能以如下方式收到
001b0002b0003b0004b0005b00……
此时scan from string 就会报错,因为它发现第一个不是字母等等。
经过查找,发现Search/Split String函数可以解决这个问题,它可以把格式固定化,
比如我查找的字母为"b",连接输出端到match + rest of string 那么上述字符串
就会形成以b开头,然后由剩余的所有字符组成的序列,为
b0002b0003b0004b0005
然后就可以用scan from string 函数对上述字符串进行处理了。
如 format string为: b%4d ,就提取了b后面4个整数。