摘要:獲取配置信息GetCONfigValue功能的設(shè)計(jì)與實(shí)現(xiàn)在設(shè)計(jì)串口服務(wù)器之前,首先要配置相應(yīng)的設(shè)備號(hào)并給設(shè)備配置相應(yīng)的串口服務(wù)器IP地址、TCP通信端口號(hào)和串口參數(shù)等,這些配置信息放在一個(gè)txt文件當(dāng)中。我們?cè)O(shè)計(jì)了一個(gè)Configinfo.txt文件,當(dāng)我們需要向一個(gè)設(shè)備傳遞信息時(shí),需要首先從文件中讀取配置信息,對(duì)相應(yīng)的串口及工控板的網(wǎng)絡(luò)進(jìn)
獲取配置信息GetCONfigValue功能的設(shè)計(jì)與實(shí)現(xiàn)
在設(shè)計(jì)串口服務(wù)器之前,首先要配置相應(yīng)的設(shè)備號(hào)并給設(shè)備配置相應(yīng)的串口服務(wù)器IP地址、TCP通信端口號(hào)和串口參數(shù)等,這些配置信息放在一個(gè)txt文件當(dāng)中。
我們?cè)O(shè)計(jì)了一個(gè)Configinfo.txt文件,當(dāng)我們需要向一個(gè)設(shè)備傳遞信息時(shí),需要首先從文件中讀取配置信息,對(duì)相應(yīng)的串口及工控板的網(wǎng)絡(luò)進(jìn)行配置,然后再進(jìn)行相應(yīng)的操作。這時(shí),我們?cè)谄渲杏玫搅?兩個(gè)自定義函數(shù):GetConfigValue和GetCFGValue.其中GetConfigValue的功能是將Configinfo.txt中的信息配置給串口服務(wù)器,它調(diào)用GetCFGValue函數(shù),在Configinfo.txt中尋找相應(yīng)的配置信息項(xiàng),并 截取相應(yīng)的配置信息。
串口操作函數(shù)封裝的設(shè)計(jì)與實(shí)現(xiàn)
在對(duì)串口進(jìn)行相應(yīng)的操作時(shí),首先要打開(kāi)串口并配置串口的波特率、數(shù)據(jù)位、停止位和工作模式等。這些關(guān)于串口的操作都封裝在一個(gè)文件當(dāng)中,以使結(jié)構(gòu)清晰,方便檢查以及修改或增加更多的操作函 數(shù)。所進(jìn)行的包括以下幾種操作。
串口的打開(kāi)和關(guān)閉:打開(kāi)串口時(shí),需要首先判斷串口的類型,然后以一定的方式打開(kāi)串口并保存原來(lái)的串口配置信息,最后對(duì)串口進(jìn)行波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)位的設(shè)置。關(guān)閉串口時(shí),需要 將原來(lái)保存的終端信息恢復(fù),使串口回到打開(kāi)前的狀態(tài)。
對(duì)串口進(jìn)行數(shù)據(jù)讀寫:串口的讀寫操作是串口服務(wù)器最基本的功能,當(dāng)有數(shù)據(jù)傳送過(guò)來(lái)時(shí),需要通過(guò)串口發(fā)送。寫串口操作會(huì)把內(nèi)存中的數(shù)據(jù)寫入所指的文件,讀串口操作會(huì)把串口送來(lái)的數(shù)據(jù)寫入內(nèi)存 中。分別用writecomport和readcomport來(lái)實(shí)現(xiàn)。
對(duì)串口進(jìn)行設(shè)置:需要設(shè)置波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)位。調(diào)用定義的封裝函數(shù),來(lái)完成這些操作。串口的工作模式通過(guò)termios函數(shù)的配置來(lái)控制。
Modbus TCP/RTU相互轉(zhuǎn)換功能的實(shí)現(xiàn)
這一步是串口服務(wù)器設(shè)計(jì)的關(guān)鍵,其轉(zhuǎn)換重點(diǎn)在于CRC校驗(yàn)和MBPA報(bào)頭的變換。在這里,定義mod2tcp函數(shù)來(lái)完成Modbus RTU到TCP格式的轉(zhuǎn)換,定義tcp2mod函數(shù)來(lái)完成Modbus TCP到RTU格式的數(shù)據(jù)轉(zhuǎn)換。 例如,來(lái)自Modbus主站的TCP協(xié)議請(qǐng)求,經(jīng)串口服務(wù)器轉(zhuǎn)換成Modbus RTU格式,經(jīng)485口發(fā)送給從站,并將從站相應(yīng)數(shù)據(jù)經(jīng)485接口送入串口服務(wù)器,轉(zhuǎn)換成Modbus TCP格式信息返回主站。
由此可見(jiàn),TCP格式字節(jié)數(shù)=RTU格式字節(jié)數(shù)-2+6,獲取的可用數(shù)據(jù)均相同,因此其程序?qū)崿F(xiàn)就不再是難題了。
CRC校驗(yàn)功能
CRC即循環(huán)冗余校驗(yàn)碼,它是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯(cuò)校驗(yàn)碼。RTU方式時(shí),CRC校驗(yàn)傳送的全部數(shù)據(jù),它忽略信息中單個(gè)字符數(shù)據(jù)的奇偶校驗(yàn)方法。CRC校驗(yàn)的關(guān)鍵在于數(shù)據(jù)的匹配,將得到的數(shù) 據(jù)如何正確的套用到CRC校驗(yàn)當(dāng)中是其中的關(guān)鍵。
CRC校驗(yàn)有既定的規(guī)則,其程序?qū)崿F(xiàn)非常簡(jiǎn)單,只需要以下幾步:CRC字節(jié)的初始化;將數(shù)據(jù)導(dǎo)入進(jìn)行CRC計(jì)算;返回計(jì)算出的CRC值。
串口服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
此部分介紹整個(gè)程序的main()函數(shù),它會(huì)調(diào)用前文介紹的函數(shù)來(lái)實(shí)現(xiàn)串口服務(wù)器功能,故其頭文件中要包含前文所述的各函數(shù)文件。程序流程如圖6所示。
main()函數(shù)應(yīng)用Linux C函數(shù)編程,其中應(yīng)尤其注意socket的應(yīng)用,socket要先建立再bind();在信號(hào)量中的參數(shù)要配置正確;進(jìn)程的管理方面,要注意進(jìn)程退出時(shí)先退出子進(jìn)程,在所有進(jìn)程都完成 之后再關(guān)閉socket。[1] [2] [3]
溫馨提示:因考試政策、內(nèi)容不斷變化與調(diào)整,本網(wǎng)站提供的以上信息僅供參考,如有異議,請(qǐng)考生以權(quán)威部門公布的內(nèi)容為準(zhǔn)!