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

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 基于嵌入式的變電站蓄電池遠(yuǎn)程監(jiān)測(cè)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)

          基于嵌入式的變電站蓄電池遠(yuǎn)程監(jiān)測(cè)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2012-03-15 來源:網(wǎng)絡(luò) 收藏
          本文基于以上的硬件,對(duì)CM模塊和PC機(jī)端進(jìn)行軟件設(shè)計(jì),實(shí)現(xiàn)CM端與TM模塊和PC的通信以及PC機(jī)端與CM模塊的通信這兩大功能,如圖1虛線所框部分。

          2CM模塊端的通信軟件設(shè)計(jì)與實(shí)現(xiàn)

          軟件的設(shè)計(jì)主要是模塊之間數(shù)據(jù)的交換及處理,CM模塊端即ARM上的軟件設(shè)計(jì)包括兩大部分。一是與TM模塊的通信,采用傳統(tǒng)系統(tǒng)中的現(xiàn)場(chǎng)總線RS485進(jìn)行串口數(shù)據(jù)通信。接收單片機(jī)的檢測(cè)、報(bào)警、等數(shù)據(jù),并把接收到的PC機(jī)控制命令傳送至TM模塊。另一部分是與PC機(jī)的通信,通過Socket的UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸,兩者之間形成C/S結(jié)構(gòu)模式。應(yīng)用以太網(wǎng)通信(基于TCP/IP)的通信方式進(jìn)行數(shù)據(jù)傳輸共享,實(shí)現(xiàn)交互操作。系統(tǒng)通信流向如圖3所示。

          CM模塊端與單片機(jī)和PC機(jī)兩方數(shù)據(jù)通信采用多進(jìn)程方式來實(shí)現(xiàn),與單片機(jī)串口通信和PC機(jī)的套接口通信分別在CMTM和CMPC這兩個(gè)進(jìn)程中完成,兩進(jìn)程之間通過共享內(nèi)存和信號(hào)量實(shí)現(xiàn)數(shù)據(jù)的共享及進(jìn)程間的同步。

          2.1串口通信(CMTM進(jìn)程)

          利用串口進(jìn)行文件傳輸首先要打開和配置串口,按要求設(shè)置好速度和傳送方式之類的參數(shù);然后,選擇一定的傳送協(xié)議和方式,設(shè)置好傳送雙方的同步方式;接著就可以按照選擇的傳送協(xié)議和同步方式來傳送數(shù)據(jù)或文件了。Linux平臺(tái)下串口屬性參數(shù)全部反映在一個(gè)structtermios結(jié)構(gòu)體中,其結(jié)構(gòu)如下:

          structtermios{

          tcflag_tc_iflag;//輸入模式標(biāo)志

          tcflag_tc_oflag;//輸出模式標(biāo)志

          tcflag_tc_cflag//控制模式標(biāo)志

          tcflag_tc_lflag;//線路選項(xiàng)

          cc_tc_line;//行控制

          cc_tc_cc[NCCS];//控制字符

          };

          其中含有大約50個(gè)標(biāo)志位,這些標(biāo)志位在頭文件termios.h中定義。串口編程的關(guān)鍵是對(duì)串口的配置,為了編程方便,Linux系統(tǒng)還包含了一系列針對(duì)termios結(jié)構(gòu)的設(shè)置函數(shù),用來完成獲取和設(shè)置串口屬性[2]。Linux下串口設(shè)置很多,本設(shè)計(jì)主要的設(shè)置有如下幾方面:

          ①c_cflag的基本參數(shù)設(shè)置,如波特率(Baudrate)、數(shù)據(jù)位(Bits)、停止位(Stops)及校驗(yàn)方式(Parity)等。配置過程如下:

          struettermiosoptions;//termios的變量聲明

          optionsc_cflag|=B9600;//波特率為9600bps

          optionsc_cflag|=CS8;//采用8個(gè)數(shù)據(jù)位

          optionsc_cflag|=~CSTOPB;//使用1個(gè)停止位

          optionsc_cflag=~PARENB;//取消校驗(yàn)位

          ②輸入輸出方式設(shè)定。根據(jù)是否對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行預(yù)處理,可分為預(yù)處理方式(Canonical)和原始(Raw)方式。預(yù)處理方式常用于Modem通信。如果只是串口傳輸數(shù)據(jù),而不需要串口來處理,則使用原始模式(RawMode)方式來通訊,本文采用原始輸入方式:

          options.c_lflag=~(ICANON|ECHO|ECH-OE|ISIG);//RawModeforlnput

          options.c_oflag=~OPOST;//RawModeforOutput

          ③控制字選項(xiàng)

          c_cc包含一些控制字的定義和讀取等待定時(shí)器(ReadTimeoutTimer)配置選項(xiàng)。其中,VSTART和VSTOP參數(shù)設(shè)定軟件流控制的起始和停止字符(默認(rèn)是11H和13H)。VMIN和VTIME參數(shù)用來控制系統(tǒng)的讀操作,VMIN設(shè)置每次讀取的最少字節(jié)數(shù),VTIME設(shè)置讀取操作的等待時(shí)間(以0.1s為單位)。這2個(gè)參數(shù)的具體值影響了讀操作的行為。本文無軟件流的控制。所以設(shè)置如下:

          Optionsc_cc[VTIME]=150;

          Optionsc_cc[VMIN]=0;

          除了上述的配置,傳送協(xié)議和方式的設(shè)定也是很關(guān)鍵的一環(huán)。結(jié)合實(shí)際情況,基于modbus協(xié)議的RTU傳輸模式作了相應(yīng)的小變動(dòng)。由于數(shù)目較多,實(shí)現(xiàn)通信信息的識(shí)別,在發(fā)送包含自檢信息的字節(jié)前,先發(fā)送4個(gè)字節(jié)用于接收端的判斷,然后是幀長(zhǎng)度(1byte)、目標(biāo)地址(1byte)、源地址(1byte)、命令字(1byte)、標(biāo)志數(shù)據(jù)(2byte)、數(shù)據(jù)(n*3byte),最后是幀數(shù)據(jù)的CRC校驗(yàn)值(2byte)。這里通訊數(shù)據(jù)采用不定長(zhǎng)幀格式,便于后序功能的擴(kuò)展。串口配置、通訊協(xié)議和方式規(guī)定完成后,便可用read()和write()等函數(shù)進(jìn)行數(shù)據(jù)的接收和發(fā)送了。ARM與單片機(jī)串口數(shù)據(jù)交換實(shí)現(xiàn)在CMTM進(jìn)程中完成,其主流程圖如圖4(a)所示。進(jìn)程TMCM通過串口監(jiān)聽并接收單片機(jī)發(fā)送的檢測(cè)信號(hào)以及發(fā)送PC機(jī)的操作命令,負(fù)責(zé)將TM模塊發(fā)來的串口數(shù)據(jù)接收后存人相應(yīng)的反饋數(shù)據(jù)共享內(nèi)存SHM_TMCM中去,同時(shí)負(fù)責(zé)檢查共享內(nèi)存SHM_CMTM中是否有新的控制或操作命令到來,若有則將其轉(zhuǎn)發(fā)到串口。試運(yùn)行時(shí)編寫相關(guān)的串口軟件,手動(dòng)和自動(dòng)對(duì)CM模塊發(fā)送和接收數(shù)據(jù),此進(jìn)程能準(zhǔn)確實(shí)時(shí)地與軟件進(jìn)行數(shù)據(jù)交換,通信效果良好。



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


          關(guān)鍵詞: 嵌入式 變電站 蓄電池

          評(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); })();