《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于嵌入式Linux的無紙記錄儀通信設(shè)計
基于嵌入式Linux的無紙記錄儀通信設(shè)計
EDN
摘要: 本文將使用嵌入式Linux作為無紙記錄儀上位機操作系統(tǒng),并利用其多線程編程技術(shù)實現(xiàn)上位機與下位機的串口通信。
Abstract:
Key words :

引言

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

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

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

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

ASCII報文幀格式

圖1  ASCII報文幀格式

RTU報文幀格式

圖2  RTU報文幀格式

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

表1 ASCII與RTU報文幀格式比較

ASCII與RTU報文幀格式比較

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

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

  2.1 整體設(shè)計

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

串口通信功能框架圖

圖3 串口通信功能框架圖

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

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

  2.2 編程實現(xiàn)

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

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

 

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

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

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

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

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

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

IEEE浮點數(shù)數(shù)據(jù)格式

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

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

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

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

下位機浮點數(shù)數(shù)據(jù)格式

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

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

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

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

  union {

  float fdata;

  unsigned char byte[4];

  }data_change;

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

  4 結(jié)論

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

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美一区二区三区视频| 欧美日韩另类在线| 在线亚洲欧美视频| 亚洲人成网站在线观看播放| 久久成人一区| 欧美在线观看视频一区二区| 亚洲一品av免费观看| 亚洲综合视频1区| 国产精品一区二区久久精品| 欧美日韩一区三区| 欧美日韩国产综合视频在线| 欧美国产日韩视频| 女女同性精品视频| 久久免费精品视频| 久久久国产成人精品| 欧美一区激情| 久久精品电影| 久久精品91| 久久精品夜夜夜夜久久| 久久不射中文字幕| 久久精品国产2020观看福利| 久久成人精品一区二区三区| 欧美一区二区三区播放老司机| 午夜精品国产| 欧美一区国产一区| 久久久久久久久综合| 久久综合九色九九| 欧美国产精品一区| 欧美日韩日本网| 国产精品久久久久毛片大屁完整版 | 欧美激情综合亚洲一二区| 欧美日本一区| 国产精品久久久久久久久免费桃花| 国产精品二区影院| 国产欧美在线观看一区| 伊人婷婷欧美激情| 91久久精品国产91性色| 亚洲美女啪啪| 午夜精品福利一区二区三区av| 久久成人精品一区二区三区| 亚洲国产精品一区制服丝袜| 一本色道88久久加勒比精品| 香蕉久久久久久久av网站| 久久久久久有精品国产| 欧美成人视屏| 国产精品久久久久久久久久三级| 国产一区二区三区久久| 91久久线看在观草草青青| 中日韩美女免费视频网址在线观看 | 伊人久久男人天堂| 亚洲日韩欧美视频一区| 亚洲一区三区视频在线观看| 亚洲国产精品va在线观看黑人| 日韩一区二区免费高清| 午夜精品久久久久久久男人的天堂| 久久裸体艺术| 欧美日韩一区二区在线| 国产亚洲精品久久久久婷婷瑜伽| 亚洲大胆av| 亚洲视频专区在线| 亚洲国产精品ⅴa在线观看| 亚洲一二三四久久| 久色婷婷小香蕉久久| 欧美三级午夜理伦三级中文幕| 国产午夜亚洲精品理论片色戒| 亚洲国产日韩欧美| 午夜久久黄色| 这里只有精品电影| 鲁大师影院一区二区三区| 欧美吻胸吃奶大尺度电影| 精品成人在线视频| 亚洲一区二区成人在线观看| 亚洲欧洲美洲综合色网| 欧美一区二区观看视频| 欧美日韩成人在线播放| 国产一区二区剧情av在线| 一本一道久久综合狠狠老精东影业| 久久国产婷婷国产香蕉| 亚洲男人的天堂在线aⅴ视频| 美女免费视频一区| 国产美女一区二区| 99视频精品在线| 亚洲国产经典视频| 欧美亚洲色图校园春色| 欧美日产国产成人免费图片| 韩国v欧美v日本v亚洲v| 亚洲一区成人| 亚洲深夜影院| 欧美激情欧美狂野欧美精品| 含羞草久久爱69一区| 亚洲免费在线电影| 亚洲一区二区四区| 欧美精品久久久久久久| 一色屋精品视频免费看| 欧美一级片一区| 午夜精品www| 欧美午夜精品久久久久久久 | 亚洲毛片av在线| 久久国产精品久久久久久| 午夜精品久久久久久久蜜桃app| 欧美日韩精品一区视频| 亚洲丶国产丶欧美一区二区三区| 欧美影院一区| 欧美一区二区三区日韩| 国产精品久久久久秋霞鲁丝 | 国产日韩欧美视频| 亚洲影视在线播放| 亚洲在线视频| 欧美日韩精品免费观看视一区二区| 亚洲承认在线| 亚洲国产精品一区制服丝袜| 久久亚洲电影| 黄色成人在线免费| 久久av一区二区三区| 欧美在线观看视频在线| 国产日韩在线一区二区三区| 亚洲欧美精品| 校园激情久久| 国产精品一区二区久久国产| 亚洲欧美激情在线视频| 欧美在线999| 国产女主播一区二区三区| 亚洲尤物视频在线| 先锋影音网一区二区| 国产九区一区在线| 亚洲欧美日韩一区| 性做久久久久久| 国产日韩一区二区三区在线| 欧美中文字幕视频| 可以免费看不卡的av网站| 怡红院精品视频| 亚洲精品欧美| 欧美日韩一卡二卡| 亚洲视频免费| 久久av老司机精品网站导航| 国产一区二区| 亚洲福利视频一区| 欧美国产日本高清在线| 亚洲精品一区二区在线| 亚洲一卡二卡三卡四卡五卡| 国产精品羞羞答答| 欧美在线啊v| 欧美成人久久| 9i看片成人免费高清| 午夜精品视频| 黄色亚洲精品| 亚洲毛片在线观看.| 国产精品久久二区| 羞羞色国产精品| 欧美大片免费久久精品三p| 日韩视频在线观看免费| 午夜精品剧场| 在线精品观看| 亚洲系列中文字幕| 国产日产欧美精品| 亚洲经典三级| 国产精品a级| 久久成人综合网| 欧美日本在线视频| 亚洲欧美日韩精品久久亚洲区 | 国产欧美一区二区三区视频| 亚洲国产欧美日韩精品| 欧美日韩第一区日日骚| 亚洲在线一区二区三区| 久热精品视频在线免费观看| 亚洲美女尤物影院| 欧美一区日韩一区| 亚洲国产精品黑人久久久| 亚洲在线日韩| 激情成人av| 亚洲一区二区伦理| 国内精品久久久| 亚洲视频碰碰| 国产有码在线一区二区视频| 一区二区三区精密机械公司 | 国一区二区在线观看| 亚洲精品在线观| 国产精品自拍一区| 99国产精品私拍| 国产真实乱偷精品视频免| 夜夜爽av福利精品导航| 国产日韩专区在线| 一本色道久久综合狠狠躁篇怎么玩 | 欧美中文字幕在线| 国产精品二区三区四区| 91久久精品国产91久久| 国产精品一二| 日韩一级视频免费观看在线| 国产午夜精品视频免费不卡69堂| 99re6热在线精品视频播放速度| 国产麻豆精品视频| 中国亚洲黄色| 在线精品视频一区二区| 午夜亚洲影视| 亚洲人成在线播放网站岛国| 久久综合九色综合网站| 亚洲欧美激情视频在线观看一区二区三区 | 欧美日韩国产亚洲一区| 亚洲国产成人在线| 国产精自产拍久久久久久|