<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式Linux的無紙記錄儀通信設(shè)計(jì)

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

          ——
          作者: 時(shí)間:2010-01-13 來源:電子產(chǎn)品世界 收藏
          引言

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

          本文引用地址:http://www.ex-cimer.com/article/104913.htm

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

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

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

          ASCII報(bào)文幀格式

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

          RTU報(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格式,字符之間允許長達(dá)1s的時(shí)間間隔。

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

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

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

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

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

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

          串口通信功能框架圖

          圖3 串口通信功能框架圖

            設(shè)備注冊掃描模塊主要負(fù)責(zé)設(shè)備地址表的維護(hù),每間隔一定時(shí)間掃描在線設(shè)備,并記錄下設(shè)備地址和使用的報(bào)文幀格式,同時(shí)根據(jù)掃描得到信息動(dòng)態(tài)開辟ASCII和RTU數(shù)據(jù)緩存區(qū)。ASCII數(shù)據(jù)讀寫模塊負(fù)責(zé)打包和解碼ASCII數(shù)據(jù),RTU數(shù)據(jù)讀寫模塊負(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ù)的共存,首要問題是每次設(shè)備掃描注冊時(shí)對(duì)使用ASCII和使用RTU數(shù)據(jù)的設(shè)備加以區(qū)分。由ASCII和RTU的報(bào)文幀格式可知,傳輸數(shù)據(jù)首位是判斷數(shù)據(jù)類型的關(guān)鍵,所以使用RTU報(bào)文幀格式的設(shè)備地址需避開ASCII數(shù)據(jù)的起始位和結(jié)束符。在未知在線設(shè)備情況下,上位機(jī)將所有設(shè)備地址輪詢一遍,解析接收數(shù)據(jù)首位,如果是ASCII的起始位,則ASCII設(shè)備注冊,反之,則RTU設(shè)備注冊。

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

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

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          關(guān)鍵詞: 嵌入式 Linux 無紙記錄儀

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();