戴振民
摘要
對于嵌入式軟件系統(tǒng)的開發(fā)而言,上位機軟件的編寫尤為重要,很多嵌入式工程師都廣泛關注上位機軟件編寫的研發(fā)領域。本文主要介紹的就是一種上位機軟件的編程方法,提供了最新Qt5庫編寫的MODBUS協(xié)議的方案。
【關鍵詞】串口語言 狀態(tài)及編程 MODBUS
開發(fā)出一款適合上位機控制的應用軟件,在智能電子線路的研制過程中非常必要,對于一般的嵌入式應用軟件的開發(fā)而言,總是會遇到各種上位機軟件編寫的難題,上位機軟件編寫的核心任務之一就是串口通信語言的編寫。利用一些比較傳統(tǒng)的上位機軟件開發(fā)工具,例如VB6等軟件,都基本上只能適用于比較老舊的Windows操作系統(tǒng),而C++又因為過于復雜而不便于被嵌入式工程師所利用,本文介紹的這種Qt5串口的編程方案,掌握起來比較輕松,功能也非常強大。
1 Qt5串口如何進行通信
Qt5串口可以實現(xiàn)跨平臺的開發(fā),是一個貫通C++和GUI的開發(fā)框架,可以調用模塊化的C++類的數(shù)據庫,實現(xiàn)和Visual C++軟件可以調用的MFC庫一樣的功能,相比較其他軟件接口而言Qt的編程更加簡便快捷,實現(xiàn)了跨平臺的功能,具備強大的擴展性,可以廣泛用于嵌入式軟件的開發(fā)之用。利用Qt進行編程的優(yōu)勢在于信號的使用機制可以利用開發(fā)工具中帶的Qt Creater進行編寫,Qt最新的版本目前叫做Qt5,其中用于串口通信的模塊主要是類似于Q Serial Port和類似于Q SerialPort Info的平臺。
1.1 串口的列舉
通過靜態(tài)的方法利用Q Serial Port Info可以實現(xiàn)所有端口的列舉,通過獲取端口的有用信息,可以常見的方法例如通過is BUSY的方法判斷出端口在運行中所處的狀態(tài),如果是忙碌的狀態(tài),則可以通過Port Name的方法獲取端口的名字,可以利用Q Serial Port info的方法對對象輸入所要調用的Q Serial Port所關聯(lián)的對象的Set Port進行Set Port Name的方法,或者也可以采用參數(shù)的方法進行調用,例如將Q Serial Port info的對象看成是一個參數(shù),利用set Port的方法進行調用,將他們設置成一個設備的串口。
1.2 串口的設置方法
在上位機中進行串口通信的步驟就是選擇串口的參數(shù),嵌入式設備開發(fā)的必備一步就是進行參數(shù)的設置。在Qt5中,可以使用Q Serial Port對象來進行抽象的端口設置,進行端口的封裝和相關操作。在構成了一個QSerial Port對象之后,可以通過Set Port Name或者采用Set Port的方法進行參數(shù)設置,在打開了該端口之后,Q Serial Port就可以對進入設備的信息進行檢測,進行初始化設置,或者也可以使用其他的例如set Flow Control的方法對流控模式、波的頻率和數(shù)據的幀格式進行重新設計,例如串口的波特率可以為19200,數(shù)據幀可以為8N1。
1.3 串口數(shù)妮的讀寫方法
數(shù)據的收發(fā)是串口通信的核心,利用強大的Q Serial Port軟件對對象文件進行設置,可以讓簡單的讀寫指令實現(xiàn)串口的設計目標,可以利用read line和read all指令對端口的情況進行調用,如果利用一次數(shù)據就讀寫完整了數(shù)據,余下的數(shù)據會存放在Q Serial Port軟件里面,作為其中的緩存數(shù)據,新的數(shù)據會儲存在緩存的尾部,利用例如set read和buffer size的方法對緩沖區(qū)域的大小進行設置。串口數(shù)據適合讀取的時機關系密切的,時機的選擇問題通常涉及到兩個路徑,一個是循環(huán)不斷的串口路徑,另一個是可能接受的一些數(shù)據,但是去掉其中的一些任務,并不會對其他任務指令造成阻塞,一般采用的是GUI的應用,或者選擇其他的Qt的強大信號機制。進行連接的是Q Serial Port和ready read進行數(shù)據的接受,通過數(shù)據的端口對槽函數(shù)進行讀取。如果串口可以進行數(shù)據接收,槽函數(shù)就可以實現(xiàn)數(shù)據調用,可以利用的數(shù)據端口在函數(shù)調用的過程中涉及到數(shù)據的列隊問題,可以方便對之后的數(shù)據包進行讀取操作,作為設置代碼的一種手段。
1.4 串口的關閉
串口的操作需要使用close函數(shù)進行,關閉端口,停止I/O操作。
2 MODBUS協(xié)議的實現(xiàn)方法
想要實現(xiàn)端口的可靠通信問題,還需要具備的是可靠的串口通信協(xié)議,MODBUS就是一種協(xié)議,在工業(yè)領域已經獲得了廣泛的應用,下文介紹的一些方法就是MODBUS協(xié)議在工業(yè)產業(yè)生產中已經獲得過廣泛的推廣,該協(xié)議在Qt串口的運行過程中也可能發(fā)揮更大的作用。
2.1 MOUBUS的簡介
MOUBUS協(xié)議是一種簡單的利用電子控制原理工作的通信軟件,是一種通信語言,通過MOUBUS協(xié)議可以實現(xiàn)控制器之間的溝通與互動,控制神經網絡和設備之間實現(xiàn)通信的順暢,并且其已經成為了工業(yè)的一種標準,利用該設備,不同的廠商之間的設備可以實現(xiàn)兼容互通,構成一種互聯(lián)的工業(yè)網絡,為了實現(xiàn)監(jiān)控的集中和可控制,還會嘗試機器識別的方法實現(xiàn)控制器之間的消息互通,通過各種結構實現(xiàn)網絡通信,如果通過一種機制可以和另外一種機制實現(xiàn)設備之間的溝通互聯(lián),一種設備將會能夠回應其他設備的請求,設備可以學會偵測錯誤記錄并進行及時更正。可以通過一種控制器對另外一種設備的訪問,將偵測出來的錯誤記錄通過路徑記載的形式儲存起來,在制定了相應的網絡格局之后實現(xiàn)公共格式的共享。MODBUS的消息幀可以分成RTU消息幀和常見的ASCII消息幀,通過RTU消息幀可以實現(xiàn)CRC冗余循環(huán)的效驗,通過LRC縱向冗余的效驗功能,可以實現(xiàn)ASCII消息幀的效驗。對MODBUS的關鍵內容進行效驗在于解碼其消息幀,考慮到串口通信中可能出現(xiàn)各種信息傳輸?shù)腻e誤問題,可靠的消息幀的檢測可以采用機器編碼的方式進行,根據消息幀的數(shù)據結構可以實現(xiàn)同一設計模式下的數(shù)據功能轉換。數(shù)據程序的包裝轉換可以通過起始狀態(tài)的消息更新進行,當收到一部分數(shù)據之后,就會對應的進入下一個工作狀態(tài),接收到的信息因而不會出現(xiàn)錯誤的可能,如果僅僅是簡單的數(shù)據丟失,則不必再等待另一個數(shù)據幀的傳輸。
3 結語
本文介紹了數(shù)據包的開發(fā)方案和實現(xiàn)方法,本文闡明了Qt5串口如何進行編程,根據狀態(tài)機的數(shù)據如何進行解碼等一些軟件功能的實現(xiàn)方法,根據實踐檢驗,該種測試方案編程容易,工作起來也非常穩(wěn)定。
參考文獻
[1]龍灝.SQLite數(shù)據庫在Qt5開發(fā)環(huán)境中的應用[J].電子世界,2017(24):61+63.
[2]謝學剛.基于Qt5.0的機器人上位機系統(tǒng)的設計[D].東北農業(yè)大學,2016.
[3]謝學剛,董桂菊,于猛,郭凱敏,郭志強,朱鐵欣.基于Qt5.0的機器人姿態(tài)檢測與控制系統(tǒng)的設計[J].農機化研究,2016,38(04):90-93+98.
[4]范貴生,虞慧群,陳麗瓊,劉冬梅,分布式嵌入式系統(tǒng)的自適應能耗管理和分析[J].軟件學報,2014,25(02):419-438.
[5]任慰,以實時操作系統(tǒng)為中心的嵌入式系統(tǒng)平臺化設計研究[D].華中科技大學,2013.