人人妻人人澡人人爽一区,国产综合99无码视频,日韩无码 久久综合,无码一区二区五区蜜桃,精品无码国产一区二区三区AVw,久久国语露脸国产精品电影

杭州盡享科技有限公司
免費(fèi)會(huì)員
新品
溫度記錄儀
溫濕度記錄儀
藥品GSP認(rèn)證專用溫度記錄儀
短信報(bào)警溫度記錄儀
冷藏車用溫度記錄器
不銹鋼防水高溫記錄儀
高溫記錄儀
溫度遠(yuǎn)程檢測(cè)儀
冷藏集裝箱溫度記錄儀
多通道記錄儀
帶打印溫濕度記錄儀
一次性溫度記錄器
溫濕度監(jiān)測(cè)系統(tǒng)
溫濕度變送器
進(jìn)口優(yōu)質(zhì)產(chǎn)品
PH在線監(jiān)測(cè)記錄儀
風(fēng)速記錄儀
二氧化碳記錄儀
溫度壓力記錄儀
壓力記錄儀
便攜式風(fēng)向風(fēng)速儀
電量記錄儀
電壓記錄儀
三相電功率記錄儀
電流記錄儀

基于嵌入式Linux的無(wú)紙記錄儀通信設(shè)計(jì)

時(shí)間:2009/2/13閱讀:1568
分享:

引言

在工業(yè)自動(dòng)化控制系統(tǒng)中,記錄儀起著十分重要的作用,它可以實(shí)時(shí)采集、監(jiān)測(cè)和記錄一些影響工藝過(guò)程和產(chǎn)品質(zhì)量的重要參數(shù),被廣泛應(yīng)用于石化、冶金、電力、機(jī)械、醫(yī)藥、輕工業(yè)等行業(yè)。隨著電子技術(shù)的不斷發(fā)展,記錄儀已從傳統(tǒng)的有紙模擬式發(fā)展到如今的無(wú)紙數(shù)字式[1]。與傳統(tǒng)的有紙記錄儀相比,無(wú)紙記錄儀無(wú)機(jī)械磨損、顯示直觀、使用方便、故障率低和設(shè)備耗材少,因此被越來(lái)越多的應(yīng)用于工業(yè)控制領(lǐng)域。

隨著工業(yè)過(guò)程自動(dòng)化的高速發(fā)展,企業(yè)對(duì)無(wú)紙記錄儀提出了越來(lái)越高的要求,基于8位單片機(jī)的無(wú)紙記錄儀的功能已遠(yuǎn)遠(yuǎn)達(dá)不到用戶的要求。嵌入式ARM微處理核的32位RISC處理器以其強(qiáng)大的性能豐富的接口以及優(yōu)異的性價(jià)比等諸多優(yōu)勢(shì),而被越來(lái)越多的應(yīng)用于無(wú)紙記錄儀,隨著硬件的改進(jìn),傳統(tǒng)的串行通訊方法也迫切需要改進(jìn),因此本文提出了基于嵌入式Linux的串口通信方案。嵌入式Linux操作系統(tǒng)是在標(biāo)準(zhǔn)Linux的基礎(chǔ)上針對(duì)嵌入式系統(tǒng)進(jìn)行內(nèi)核裁剪和優(yōu)化后形成[2],它繼承了Linux的開(kāi)放源代碼、多任務(wù)、穩(wěn)定性高,內(nèi)核可裁剪等諸多優(yōu)點(diǎn),其內(nèi)核精簡(jiǎn)而,具有非常好的網(wǎng)絡(luò)性能。本文將使用嵌入式Linux作為無(wú)紙記錄儀上位機(jī)操作系統(tǒng),并利用其多線程編程技術(shù)實(shí)現(xiàn)上位機(jī)與下位機(jī)的串口通信。

1 記錄儀中的通信協(xié)議

由于無(wú)紙記錄儀主要在過(guò)程控制現(xiàn)場(chǎng)或監(jiān)控室中使用,與之進(jìn)行通信的現(xiàn)場(chǎng)設(shè)備接口以串口居多,因此在該裝置的開(kāi)發(fā)過(guò)程中采用十分通用的MODBUS協(xié)議作為串口通信協(xié)議。MODBUS協(xié)議是MODICON公司于1979年為建立智能設(shè)備間的主從式通信而開(kāi)發(fā)的一種通信協(xié)議,它規(guī)定在一個(gè)系統(tǒng)中,每次命令應(yīng)由系統(tǒng)中主設(shè)備發(fā)起,從設(shè)備通過(guò)解析地址位決定是否應(yīng)答[3]。該協(xié)議具有兩種報(bào)文傳送幀格式,ASCII和RTU報(bào)文幀格式,分別如圖1和圖2所示。

圖1 ASCII報(bào)文幀格式

圖2  RTU報(bào)文幀格式

將兩種報(bào)文傳送幀格式異同總結(jié)如表1。由表1可知,兩種報(bào)文幀格式各有優(yōu)劣:ASCII格式使用的字符是RTU格式的兩倍,但ASCII格式數(shù)據(jù)的譯碼和處理更為容易一些;使用RTU報(bào)文幀格式傳輸數(shù)據(jù)時(shí),報(bào)文字符必須以連續(xù)數(shù)據(jù)流的形式傳送,而使用ASCII格式,字符之間允許長(zhǎng)達(dá)1s的時(shí)間間隔。

表1 ASCII與RTU報(bào)文幀格式比較

通常情況下,在一個(gè)MODBUS網(wǎng)絡(luò)中只采用一種報(bào)文幀格式進(jìn)行數(shù)據(jù)交換。但在一些特殊情況下,同一系統(tǒng)中需要用到不同傳輸模式的控制器,即同時(shí)采用兩種報(bào)文幀傳輸格式。為了使無(wú)紙記錄儀具有更強(qiáng)的通用性,本文提出了一種新的可同時(shí)使用兩種報(bào)文幀格式的串口通信方案。在以下闡述過(guò)程中, 以ASCII和RTU報(bào)文幀格式傳輸?shù)臄?shù)據(jù)將分別簡(jiǎn)稱為ASCII和RTU數(shù)據(jù)。

2 記錄儀的通信實(shí)現(xiàn)

2.1 整體設(shè)計(jì)

無(wú)紙記錄儀主要通信對(duì)象為工業(yè)現(xiàn)場(chǎng)設(shè)備,因此通信過(guò)程中數(shù)據(jù)交換應(yīng)快速、準(zhǔn)確無(wú)誤。在MODBUS協(xié)議中,ASCII與RTU數(shù)據(jù)打包與解碼均不相同,數(shù)據(jù)讀寫(xiě)方面需要獨(dú)立起來(lái)。串口通信功能框架如圖3所示。

圖3 串口通信功能框架圖

設(shè)備注冊(cè)掃描模塊主要負(fù)責(zé)設(shè)備地址表的維護(hù),每間隔一定時(shí)間掃描在線設(shè)備,并記錄下設(shè)備地址和使用的報(bào)文幀格式,同時(shí)根據(jù)掃描得到信息動(dòng)態(tài)開(kāi)辟ASCII和RTU數(shù)據(jù)緩存區(qū)。ASCII數(shù)據(jù)讀寫(xiě)模塊負(fù)責(zé)打包和解碼ASCII數(shù)據(jù),RTU數(shù)據(jù)讀寫(xiě)模塊負(fù)責(zé)打包和解碼RTU數(shù)據(jù)。數(shù)據(jù)發(fā)送模塊根據(jù)優(yōu)先級(jí)排列好打包好的數(shù)據(jù)依次發(fā)送。數(shù)據(jù)接收模塊僅解碼下位機(jī)儀表每次傳回?cái)?shù)據(jù)的*,判斷是RTU數(shù)據(jù)還是ASCII數(shù)據(jù),存入RTU或ASCII數(shù)據(jù)緩存區(qū),以待處理。

為了實(shí)現(xiàn)ASCII與RTU數(shù)據(jù)的共存,首要問(wèn)題是每次設(shè)備掃描注冊(cè)時(shí)對(duì)使用ASCII和使用RTU數(shù)據(jù)的設(shè)備加以區(qū)分。由ASCII和RTU的報(bào)文幀格式可知,傳輸數(shù)據(jù)*是判斷數(shù)據(jù)類型的關(guān)鍵,所以使用RTU報(bào)文幀格式的設(shè)備地址需避開(kāi)ASCII數(shù)據(jù)的起始位和結(jié)束符。在未知在線設(shè)備情況下,上位機(jī)將所有設(shè)備地址輪詢一遍,解析接收數(shù)據(jù)*,如果是ASCII的起始位,則ASCII設(shè)備注冊(cè),反之,則RTU設(shè)備注冊(cè)。

2.2 編程實(shí)現(xiàn)

軟件實(shí)現(xiàn)上,采用Linux的多線程編程技術(shù),可以更好的滿足工業(yè)現(xiàn)場(chǎng)的實(shí)時(shí)性要求。多線程程序采用多任務(wù)、并發(fā)的工作方式[4],可以提高應(yīng)用程序響應(yīng)時(shí)間并且改善程序結(jié)構(gòu)。Linux操作系統(tǒng)中提供了Linuxthread 庫(kù)[5],它實(shí)現(xiàn)了符合POSIX1003.1c標(biāo)準(zhǔn)的多線程支持,而且是內(nèi)核級(jí)方式。

串口通信通過(guò)三個(gè)線程來(lái)實(shí)現(xiàn),主線程、發(fā)送子線程和接收數(shù)據(jù)處理子線程,如圖4所示。同時(shí),為了使收發(fā)數(shù)據(jù)管理更加方便,建立了四個(gè)數(shù)據(jù)緩存區(qū):⑴ 發(fā)送緩存區(qū),存放準(zhǔn)備發(fā)送的命令; ⑵ 已發(fā)送緩存區(qū),存放已發(fā)送好但未經(jīng)接收確認(rèn)的命令;⑶ RTU接收緩存區(qū),存放接收到的RTU數(shù)據(jù);⑷ ASCII接收緩存區(qū),存放接收到的ASCII數(shù)據(jù)。所有線程共享上述四個(gè)數(shù)據(jù)緩存區(qū)的數(shù)據(jù),并設(shè)置互斥鎖用來(lái)確保一個(gè)時(shí)間段內(nèi)只有一個(gè)任務(wù)在訪問(wèn)共享數(shù)據(jù)。

圖4  串口通信多線程程序流程圖

主線程主要負(fù)責(zé)設(shè)備的注冊(cè),掃描是否有數(shù)據(jù)發(fā)送,如果有發(fā)送數(shù)據(jù),進(jìn)行優(yōu)先級(jí)設(shè)置,將發(fā)送數(shù)據(jù)轉(zhuǎn)為發(fā)送所需的ASCII和RTU格式,存入發(fā)送緩存區(qū)以待發(fā)送。串口初始化主要功能為設(shè)置串口通信屬性,如波特率、數(shù)據(jù)位、校驗(yàn)位和流控制等。串口通信采用異步通信模式,并以全局變量作為接收標(biāo)志。解析數(shù)據(jù)時(shí)應(yīng)將已收到數(shù)據(jù)和已發(fā)送數(shù)據(jù)進(jìn)行匹配,根據(jù)發(fā)送的數(shù)據(jù)分析接收數(shù)據(jù)是否正確,如果接收數(shù)據(jù)正確則丟棄已發(fā)送命令,否則重發(fā)。

3 快速數(shù)據(jù)轉(zhuǎn)換算法

由于上位機(jī)與下位機(jī)的個(gè)別數(shù)據(jù)存儲(chǔ)格式不同,需要轉(zhuǎn)換為對(duì)方能夠識(shí)別的數(shù)據(jù)。下面以浮點(diǎn)數(shù)為例,說(shuō)明本次設(shè)計(jì)中的數(shù)據(jù)轉(zhuǎn)換機(jī)制。

上位機(jī)采用Linux操作系統(tǒng),浮點(diǎn)數(shù)采用IEEE-754數(shù)據(jù)存儲(chǔ)格式。IEEE規(guī)定一個(gè)浮點(diǎn)數(shù)在內(nèi)存中占四字節(jié),其數(shù)據(jù)格式如圖5所示。

圖5  IEEE浮點(diǎn)數(shù)數(shù)據(jù)格式

在IEEE浮點(diǎn)數(shù)數(shù)據(jù)存儲(chǔ)格式下,第1位為符號(hào)位,指示浮點(diǎn)數(shù)的正負(fù)。指數(shù)部分共8位,*個(gè)字節(jié)的后7位和第二個(gè)字節(jié)的第1位,表示范圍是0 ~ 255。實(shí)際上的指數(shù)值應(yīng)是-128 ~ 127的有符號(hào)整數(shù),為了存儲(chǔ)方便,指數(shù)值都加127轉(zhuǎn)為0 ~ 255存儲(chǔ),即實(shí)際指數(shù)值是E-127。zui后23位為小數(shù)部分,需要注意的是,在計(jì)算時(shí),要將小數(shù)部分zui高位補(bǔ)1。因此,實(shí)際的浮點(diǎn)數(shù)值可以通過(guò)下面的公式計(jì)算:

Real =(-1)*Sign*(D/224)*2E-126

下位機(jī)浮點(diǎn)數(shù)在內(nèi)存中同樣占四字節(jié),其數(shù)據(jù)格式如圖6所示。

圖6  下位機(jī)浮點(diǎn)數(shù)數(shù)據(jù)格式

下位機(jī)浮點(diǎn)數(shù)數(shù)據(jù)格式中,數(shù)符用來(lái)指示浮點(diǎn)數(shù)的正負(fù),階符用于指示指數(shù)的正負(fù),階碼有6位,即指數(shù)范圍是0~64,小數(shù)部分比IEEE浮點(diǎn)數(shù)數(shù)據(jù)格式中多1位,因此在計(jì)算時(shí)高位無(wú)需補(bǔ)1。實(shí)際的浮點(diǎn)數(shù)數(shù)值可以通過(guò)下面公式計(jì)算:

Real =(-1)*Sign*(D/224)*2(-1)*SignE*E

實(shí)際傳輸過(guò)程中,從下位機(jī)傳來(lái)的浮點(diǎn)數(shù),需要先轉(zhuǎn)為IEEE標(biāo)準(zhǔn)格式,傳給下位機(jī)的數(shù)據(jù)同樣需要轉(zhuǎn)為下位機(jī)能夠識(shí)別的格式。由于浮點(diǎn)數(shù)存儲(chǔ)格式復(fù)雜,在轉(zhuǎn)換數(shù)據(jù)時(shí)應(yīng)盡量避免使用浮點(diǎn)數(shù)運(yùn)算。通過(guò)比較圖5和圖6可知,兩種存儲(chǔ)格式的zui后23位相同,可以共用。因此,在編程時(shí),采用共同體能夠更快的解決兩者之間的轉(zhuǎn)換。編寫(xiě)共同體如下:

union {

float fdata;

unsigned char byte[4];

}data_change;

fdata中存放轉(zhuǎn)換前得浮點(diǎn)數(shù),而字符型數(shù)組byte直接對(duì)應(yīng)浮點(diǎn)數(shù)在計(jì)算機(jī)中以二進(jìn)制存儲(chǔ)的四個(gè)字節(jié)。通過(guò)對(duì)字符型數(shù)組的簡(jiǎn)單的加減法及移位計(jì)算就可以快速在兩種存儲(chǔ)格式之間轉(zhuǎn)換。 實(shí)際測(cè)試時(shí),采用共同體的數(shù)據(jù)轉(zhuǎn)換在響應(yīng)時(shí)間上要明顯優(yōu)于未采用共同體的數(shù)制轉(zhuǎn)換,提高了串口通信的實(shí)時(shí)性。

4 結(jié)論

本文創(chuàng)新點(diǎn):(1)將嵌入式Linux系統(tǒng)應(yīng)用于無(wú)紙記錄儀,使得該裝置體積小,功能強(qiáng),實(shí)時(shí)性能及可擴(kuò)展性能良好;(2)實(shí)現(xiàn)了MODBUS協(xié)議中RTU與ASCII傳輸模式的共存,使無(wú)紙記錄儀具有更強(qiáng)的通用性;(3)通過(guò)在數(shù)據(jù)轉(zhuǎn)換編程中采用共同體這方面的改進(jìn),提高了無(wú)紙記錄儀串口通信的實(shí)時(shí)性。

會(huì)員登錄

×

請(qǐng)輸入賬號(hào)

請(qǐng)輸入密碼

=

請(qǐng)輸驗(yàn)證碼

收藏該商鋪

X
該信息已收藏!
標(biāo)簽:
保存成功

(空格分隔,最多3個(gè),單個(gè)標(biāo)簽最多10個(gè)字符)

常用:

提示

X
您的留言已提交成功!我們將在第一時(shí)間回復(fù)您~
在線留言
铁岭市| 偃师市| 韶山市| 余干县| 察隅县| 高唐县| 富民县| 根河市| 南昌县| 房产| 科尔| 老河口市| 鹿邑县| 娱乐| 墨江| 崇义县| 闽清县| 龙井市|