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個整數。
評論