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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式PLC芯片構(gòu)建現(xiàn)場總線ETS

          嵌入式PLC芯片構(gòu)建現(xiàn)場總線ETS

          作者: 時間:2012-12-11 來源:網(wǎng)絡 收藏
          TSI系統(tǒng)(汽輪機狀態(tài)監(jiān)視和保護系統(tǒng))和系統(tǒng)(汽輪機危機跳閘系統(tǒng))是火力發(fā)電廠保證汽輪機和發(fā)電機正常運轉(zhuǎn)的重要設備,在火力發(fā)電企業(yè)運用十分普遍。在當前的大部分應用中,這兩套系統(tǒng)是互相獨立的,一般由專業(yè)的TSI設備供應商提供TSI系統(tǒng),而系統(tǒng)則用通用的來構(gòu)建。但事實上兩套系統(tǒng)之間存在著很多聯(lián)系,TSI系統(tǒng)的輸出往往是系統(tǒng)的輸入。如果能使兩套系統(tǒng)有機融合,不僅可以節(jié)省成本,更可以使系統(tǒng)結(jié)構(gòu)簡化,從而提高可靠性。

          針對以上情況,我公司選用科威公司的ESAY芯片構(gòu)建了ETS系統(tǒng)的核心控制模塊,通過CAN與我公司的TSI系統(tǒng)實現(xiàn)有機融合,相當完美地解決了當前ETS系統(tǒng)存在的諸多問題。

          一、總體設計

          EASY 芯片有兩個uart串口和一個CAN接口以及32個IO引腳。該芯片的CAN接口已經(jīng)加載科威公司的CAN應用層協(xié)議,這是一個主從式的協(xié)議,通訊速率160K。我公司的TSI系統(tǒng)使用的MVCAN-2 CAN應用層協(xié)議是一個多主結(jié)構(gòu)的協(xié)議,通訊速率可以是10K、125K、250K和500K。由于協(xié)議不同,TSI系統(tǒng)并不能直接使用EASY PLC 芯片的CAN接口與其通訊。為解決這個問題,將ETS控制模塊設計成雙CPU結(jié)構(gòu)。使用8位MCU P89V51RD2和獨立CAN控制器SJA1000擴展出另一個CAN通訊口,在該通訊口加載MVCAN-2協(xié)議,實現(xiàn)與TSI系統(tǒng)的連接。P89V51RD2和EASY 嵌入式PLC 芯片之間通過兩片IDT7202交換數(shù)據(jù)。IDT7202是一種雙端口的FIFO(先入先出)緩沖器,內(nèi)部有1024×9位FIFO RAM。

          二、硬件實現(xiàn)

          以下是主要硬件設計框圖:


          P89V51RD2通過地址、數(shù)據(jù)和寫信號線連接到其中一片IDT7202的寫入端口,并通過地址、數(shù)據(jù)和讀信號線連接到另一片IDT7202的讀出端口;嵌入式PLC 芯片只有通用IO引腳,沒有地址、數(shù)據(jù)和讀寫信號線,只能用通用IO來模擬讀寫操作。具體做法是將嵌入式PLC 芯片的P1口當作1個8位數(shù)據(jù)端口分別與兩個IDT7202的另一組讀取和寫入端口連接,P3.0、P3.1、P3.2用作讀、寫、使能信號,P4.0、P4.1、P4.2用作狀態(tài)判斷信號。用嵌入式PLC 芯片的P2口擴展了8個繼電器輸出,嵌入式PLC 芯片的其它接口和特性均按典型應用進行設計。將P89V51RD2的uart串口設計為rs232標準串口,該串口在設置時用于下載TSI系統(tǒng)的配置文件,運行時加載MODBUS協(xié)議用于與上位機或其它設備通信。最后完成的ETS控制器具有以下功能:八路繼電器輸出,1個CAN接口與TSI系統(tǒng)互聯(lián),另一個CAN接口可用于IO擴展和ETS控制器間互聯(lián),COM1串口用于梯形圖下載和PLC監(jiān)控,COM2用于CAN組態(tài)和PLC通訊,COM3(由P89V51RD2擴展)用于TSI配置下載和TSI數(shù)據(jù)監(jiān)控。

          三、軟件實現(xiàn)

          軟件由兩部分組成。一部分是運行于P89V51RD2中的軟件,另一部分是嵌入到嵌入式PLC芯片中的軟件。運行于P89V51RD2中的軟件使用C語言編寫。軟件被設計為兩種工作模式:設置模式和工作模式。在設置模式下,用戶使用PC通過串口將TSI系統(tǒng)的配置文件傳遞給P89V51RD2,P89V51RD2將文件存儲于內(nèi)部FLASH中;在工作模式下,P89V51RD2按照配置文件解析由SJA1000接收到的TSI系統(tǒng)數(shù)據(jù),并將數(shù)據(jù)按照一定格式通過IDT7202傳輸給嵌入式PLC。同時,由嵌入式PLC通過IDT7202發(fā)來的數(shù)據(jù)經(jīng)解析后通過SJA1000發(fā)送到TSI系統(tǒng)。

          嵌入到嵌入式PLC芯片中的軟件基于科威公司提供的匯編語言框架編寫。首先解決使用通用IO來模擬IDT7202的讀寫操作,以下是讀寫IDT7202的程序:

          FIFO_FF EQU P4.1
          FIFO_EF EQU P4.0
          C1_DIR EQU P3.3
          C1_EN EQU P3.2
          C1_WR EQU P3.1
          C1_RD EQU P3.0
          FIFO_PORT EQU P1
          WRITE_FIFO: MOV SFRPAGE,#0FH
          JNB FIFO_FF,WFIFO_L1
          CLR C1_DIR
          MOV FIFO_PORT,R7
          CLR C1_EN
          CLR C1_WR
          SETB C1_WR
          SETB C1_EN
          MOV R6,#1
          RET
          WFIFO_L1: MOV R6,#0
          RET
          READ_FIFO: MOV SFRPAGE,#0FH
          JNB FIFO_EF,RFIFO_L1
          SETB C1_DIR
          CLR C1_EN
          CLR C1_RD
          MOV FIFO_PORT,#0FFH
          MOV A,FIFO_PORT
          SETB C1_RD
          SETB C1_EN
          MOV R6,A
          MOV R7,#1
          RET
          RFIFO_L1: MOV R7,#0
          RET

          在嵌入式PLC的STEP函數(shù)和SCAN函數(shù)中讀取IDT7202的數(shù)據(jù),每次讀取兩幀。數(shù)據(jù)解析后存入對應的D寄存器,這樣就可以在梯形圖編程中使用這些數(shù)據(jù)。有一部分數(shù)據(jù)是可寫的(即允許由PLC向TSI方向傳遞)。對這部分數(shù)據(jù),在PLC的外部RAM開辟一塊內(nèi)存作為數(shù)據(jù)副本,初始化時將D寄存器與副本置為相同值,在運行中于STEP函數(shù)和SCAN函數(shù)中監(jiān)視D寄存器和副本的值是否相同,若不同則將D寄存器值向P89V51RD2發(fā)送。

          四、總結(jié)

          基于EASY 嵌入式PLC 芯片構(gòu)建的ETS控制器目前已經(jīng)在工業(yè)現(xiàn)場得到實際運用,總的情況良好。應該說EASY 嵌入式PLC 芯片是一款成功的產(chǎn)品。

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


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();