嵌入式PLC芯片構(gòu)建現(xiàn)場總線ETS
針對以上情況,我公司選用科威公司的ESAY嵌入式PLC芯片構(gòu)建了ETS系統(tǒng)的核心控制模塊,通過CAN現(xiàn)場總線與我公司的現(xiàn)場總線TSI系統(tǒng)實現(xiàn)有機融合,相當完美地解決了當前ETS系統(tǒng)存在的諸多問題。
一、總體設計
EASY 嵌入式PLC 芯片有兩個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)建的現(xiàn)場總線ETS控制器目前已經(jīng)在工業(yè)現(xiàn)場得到實際運用,總的情況良好。應該說EASY 嵌入式PLC 芯片是一款成功的產(chǎn)品。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論