互聯網技術
責任編輯:jerrychen
2012-04-06
摘要:獲取配置信息GetCONfigValue功能的設計與實現在設計串口服務器之前,首先要配置相應的設備號并給設備配置相應的串口服務器IP地址、TCP通信端口號和串口參數等,這些配置信息放在一個txt文件當中。我們設計了一個Configinfo.txt文件,當我們需要向一個設備傳遞信息時,需要首先從文件中讀取配置信息,對相應的串口及工控板的網絡進
獲取配置信息GetCONfigValue功能的設計與實現
在設計串口服務器之前,首先要配置相應的設備號并給設備配置相應的串口服務器IP地址、TCP通信端口號和串口參數等,這些配置信息放在一個txt文件當中。
我們設計了一個Configinfo.txt文件,當我們需要向一個設備傳遞信息時,需要首先從文件中讀取配置信息,對相應的串口及工控板的網絡進行配置,然后再進行相應的操作。這時,我們在其中用到了 兩個自定義函數:GetConfigValue和GetCFGValue.其中GetConfigValue的功能是將Configinfo.txt中的信息配置給串口服務器,它調用GetCFGValue函數,在Configinfo.txt中尋找相應的配置信息項,并 截取相應的配置信息。
串口操作函數封裝的設計與實現
在對串口進行相應的操作時,首先要打開串口并配置串口的波特率、數據位、停止位和工作模式等。這些關于串口的操作都封裝在一個文件當中,以使結構清晰,方便檢查以及修改或增加更多的操作函 數。所進行的包括以下幾種操作。
串口的打開和關閉:打開串口時,需要首先判斷串口的類型,然后以一定的方式打開串口并保存原來的串口配置信息,最后對串口進行波特率、數據位、停止位和奇偶校驗位的設置。關閉串口時,需要 將原來保存的終端信息恢復,使串口回到打開前的狀態。
對串口進行數據讀寫:串口的讀寫操作是串口服務器最基本的功能,當有數據傳送過來時,需要通過串口發送。寫串口操作會把內存中的數據寫入所指的文件,讀串口操作會把串口送來的數據寫入內存 中。分別用writecomport和readcomport來實現。
對串口進行設置:需要設置波特率、數據位、停止位和奇偶校驗位。調用定義的封裝函數,來完成這些操作。串口的工作模式通過termios函數的配置來控制。
Modbus TCP/RTU相互轉換功能的實現
這一步是串口服務器設計的關鍵,其轉換重點在于CRC校驗和MBPA報頭的變換。在這里,定義mod2tcp函數來完成Modbus RTU到TCP格式的轉換,定義tcp2mod函數來完成Modbus TCP到RTU格式的數據轉換。 例如,來自Modbus主站的TCP協議請求,經串口服務器轉換成Modbus RTU格式,經485口發送給從站,并將從站相應數據經485接口送入串口服務器,轉換成Modbus TCP格式信息返回主站。
由此可見,TCP格式字節數=RTU格式字節數-2+6,獲取的可用數據均相同,因此其程序實現就不再是難題了。
CRC校驗功能
CRC即循環冗余校驗碼,它是數據通信領域中最常用的一種差錯校驗碼。RTU方式時,CRC校驗傳送的全部數據,它忽略信息中單個字符數據的奇偶校驗方法。CRC校驗的關鍵在于數據的匹配,將得到的數 據如何正確的套用到CRC校驗當中是其中的關鍵。
CRC校驗有既定的規則,其程序實現非常簡單,只需要以下幾步:CRC字節的初始化;將數據導入進行CRC計算;返回計算出的CRC值。
串口服務器的設計與實現
此部分介紹整個程序的main()函數,它會調用前文介紹的函數來實現串口服務器功能,故其頭文件中要包含前文所述的各函數文件。程序流程如圖6所示。
main()函數應用Linux C函數編程,其中應尤其注意socket的應用,socket要先建立再bind();在信號量中的參數要配置正確;進程的管理方面,要注意進程退出時先退出子進程,在所有進程都完成 之后再關閉socket。[1] [2] [3]
溫馨提示:因考試政策、內容不斷變化與調整,本網站提供的以上信息僅供參考,如有異議,請考生以權威部門公布的內容為準!
延伸閱讀
掃碼加入通信工程師QQ群
(群號:105981336)
+點擊加入
共收錄117.93萬道題
已有25.02萬小伙伴參與做題