[技術(shù)領(lǐng)域]
本發(fā)明涉及可編程邏輯控制器,尤其涉及一種plc指令執(zhí)行器。
[
背景技術(shù):
]
plc(可編程邏輯控制器)是一種專用于工業(yè)控制的計(jì)算機(jī),其硬件結(jié)構(gòu)基本上與微型計(jì)算機(jī)相同,執(zhí)行邏輯運(yùn)算、順序控制、定時(shí)、計(jì)數(shù)與算術(shù)運(yùn)算、通信、運(yùn)動(dòng)控制等面向用戶的指令,并通過數(shù)字或模擬式輸入/輸出控制各種類型的機(jī)械或生產(chǎn)過程。目前,已形成了plc控制器典型結(jié)構(gòu)、編程語言、通信、用戶使用導(dǎo)則等系列國際標(biāo)準(zhǔn)(iec61131)。其中,以編程語言標(biāo)準(zhǔn)(iec61131-3)最為廣泛應(yīng)用,包括il、st、ld、fbd和sfc。plc編程軟件在編譯以該五種語言編成的程序時(shí),會(huì)將程序均轉(zhuǎn)換成中間代碼??梢詫⒅虚g代碼下載到plc中按句進(jìn)行解釋并執(zhí)行(解釋型),也可以將中間代碼直接編譯成plc內(nèi)部處理器(mcu)可執(zhí)行的機(jī)器指令(編譯型)。
plc指令按復(fù)雜程度可以分為基本指令和復(fù)雜指令兩種?;局噶钪饕婕拔辉牟僮?,其執(zhí)行結(jié)果主要影響程序能流和數(shù)字量輸出,單條基本指令通常需要占用5至20個(gè)mcu指令周期,基本指令在用戶程序中的占比通常在百分之三十以上;復(fù)雜指令分為邏輯運(yùn)算、算術(shù)運(yùn)算、程序流控制、數(shù)據(jù)處理、通信、定位等,根據(jù)復(fù)雜程度不同需要占用的mcu指令周期從20至2000不等。通常plc用戶程序越大,程序掃描時(shí)間就越長。無論是解釋型plc還是編譯型plc,都是采用單一的mcu來執(zhí)行基本指令和復(fù)雜指令。
對(duì)于編譯執(zhí)行方式,plc的編程者需要提前將plc程序針對(duì)指定的mcu處理器型號(hào)用指定的編譯器和編譯環(huán)境參數(shù)進(jìn)行編譯方能正確下載運(yùn)行,即只能用特定的編程軟件才能對(duì)plc進(jìn)行編程。替換一種mcu處理器芯片,或僅升級(jí)一個(gè)plc內(nèi)部組件,原有的組態(tài)編程軟件可能就無法再適用。所以其通用性差,產(chǎn)品的應(yīng)用和升級(jí)成本高。此外,與解釋執(zhí)行方式類似的是,編譯型執(zhí)行方式雖然將plc程序編譯為本地代碼,但仍需要采用通用處理器的精減指令集格式,每一條il指令可能需要3-10條本地匯編指令;即使由其它plc語言(如fbd、st)直接編譯為本地匯編指令(不經(jīng)由il中間代碼),本地匯編畢竟非面向plc程序的指令集結(jié)構(gòu),仍不可避免地有效率的損失。對(duì)于解釋執(zhí)行方式,它的每一條plc程序在執(zhí)行前都需要進(jìn)行復(fù)雜的軟件解釋工作,一條il指令需要約5句至20句c語言程序來進(jìn)行解釋,進(jìn)一步需要約20條至100條精簡指令集指令(以arm指令集為例)。另一方面,在以mcu為處理核心的plc控制器結(jié)構(gòu)中,無論解釋型還是編譯型,都需要占用大量mcu的工作,而mcu通常還需要完成其它重要任務(wù)(如通訊、中斷響應(yīng)等),plc任務(wù)的執(zhí)行和響應(yīng)速度受mcu其它工作的影響,難以保障其實(shí)時(shí)性和可靠性。
[
技術(shù)實(shí)現(xiàn)要素:
]
本發(fā)明要解決的技術(shù)問題是提供一種能夠提高plc執(zhí)行速度、實(shí)時(shí)性和可靠性好的plc指令執(zhí)行器。
為了解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案是,一種plc指令執(zhí)行器,包括mcu、基本指令執(zhí)行器和外部sram,基本指令執(zhí)行器作為協(xié)處理器通過mcu的外部總線與mcu相連,mcu負(fù)責(zé)復(fù)雜指令的執(zhí)行,基本指令執(zhí)行器負(fù)責(zé)簡單指令的執(zhí)行。
以上所述的plc指令執(zhí)行器,基本指令執(zhí)行器包括主要模塊和其他模塊,主要模塊包括外部ram讀寫控制器、指令譯碼模塊、多路選擇器、alu控制單元和核心控制單元,其他模塊包括片內(nèi)ram、寄存器堆,指令解析模塊,地址合成模塊,流水線寄存器,能流寄存器和輸入輸出棧。
以上所述的plc指令執(zhí)行器,
外部ram讀寫控制器產(chǎn)生外部sram讀寫信號(hào)、地址信號(hào)、片選信號(hào);從外部sram讀取ucode編碼,放入流水寄存器中;
指令譯碼模塊根據(jù)流水寄存器鎖存的指令代碼實(shí)現(xiàn)指令譯碼;
多路選擇器中的第一多路選擇器選擇能流寄存器的輸入,結(jié)合核心控制單元的信號(hào),向能流寄存器寫入新的指令執(zhí)行結(jié)果;多路選擇器中的第二多路選擇器選擇寫入片內(nèi)ram中的數(shù)據(jù),根據(jù)控制單元的信號(hào)和能流寄存器的輸出產(chǎn)生輸出信號(hào);
alu控制單元(算術(shù)邏輯控制單元)按照核心控制單元的信號(hào)選擇算術(shù)邏輯運(yùn)算。
核心控制單元:產(chǎn)生使能、控制信號(hào);
mcu配置指令的執(zhí)行部分包括寄存器堆中的第一指令寄存器,特殊指令寄存器,命令寄存器;如遇復(fù)雜指令,核心控制單元通過中斷信號(hào)通知mcu,mcu讀取寄存器堆中的第二指令寄存器和核心控制單元中存儲(chǔ)的內(nèi)存復(fù)雜指令偏移地址,然后結(jié)合起始地址去mcu片內(nèi)的sram中讀取復(fù)雜指令繼續(xù)執(zhí)行,直到執(zhí)行到簡單指令后交由基本指令執(zhí)行器執(zhí)行。
以上所述的plc指令執(zhí)行器,
mcu復(fù)位系統(tǒng)后,開始配置寄存器堆中指令部分的寄存器,包括第一指令寄存器和位處理指令寄存器,配置完成后,向命令寄存器寫入啟動(dòng)命令,指令基本指令執(zhí)行器開始工作;
mcu將指令起始地址寫入第一指令寄存器內(nèi),當(dāng)命令寄存器中寫入啟動(dòng)命令后,基本指令執(zhí)行器將按照mcu給出的起始地址對(duì)外部sram進(jìn)行讀取,基本指令執(zhí)行器每讀一條指令首先判斷指令的類別,如為簡單指令,則按照簡單指令的要求進(jìn)行操作,操作對(duì)象存儲(chǔ)于基本指令執(zhí)行器的內(nèi)部ram中;如為復(fù)雜指令,則通知mcu,并將總線使用權(quán)交出,同時(shí)將此時(shí)指令的地址存儲(chǔ)于第二指令寄存器中,并置中斷標(biāo)志位和總線切換標(biāo)志位。
以上所述的plc指令執(zhí)行器,基本指令執(zhí)行器采用fpga芯片,fpga芯片的內(nèi)部ram存儲(chǔ)plc的位元件和指令執(zhí)行結(jié)果。
以上所述的plc指令執(zhí)行器,plc的用戶程序以u(píng)code編碼的形式存儲(chǔ)在外部sram中,ucode編碼包含4個(gè)字節(jié),單字簡單指令占用ucode編碼的第一字節(jié)和第二字節(jié);第一字節(jié)為指令代碼,第二字節(jié)為8位位元件地址。
以上所述的plc指令執(zhí)行器,基本指令執(zhí)行器檢測指令到指令第一字節(jié)的指令代碼不在可執(zhí)行之列時(shí),則判斷該指令為復(fù)雜指令,基本指令執(zhí)行器停止執(zhí)行該條指令,然后記錄此指令地址,并產(chǎn)生中斷信號(hào)通知mcu。
本發(fā)明的plc指令執(zhí)行器克服現(xiàn)有以mcu為處理核心的plc指令執(zhí)行器指令執(zhí)行周期長,執(zhí)行用戶程序時(shí)其他重要任務(wù)無法及時(shí)響應(yīng)的問題,運(yùn)行速度快,實(shí)時(shí)性和可靠性好。
[附圖說明]
下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。
圖1是本發(fā)明實(shí)施例plc指令執(zhí)行器的系統(tǒng)框圖。
圖2是本發(fā)明實(shí)施例基本指令執(zhí)行器的內(nèi)部結(jié)構(gòu)框圖。
[具體實(shí)施方式]
本發(fā)明實(shí)施例的plc指令執(zhí)行器如圖1和圖2所示,包括主要模塊和其他模塊。
主要模塊包括外部ram讀寫控制器、指令譯碼模塊、多路選擇器、alu控制單元和核心控制單元。
其他模塊包括寄存器堆,指令解析模塊,地址合成模塊,流水線寄存器,能流寄存器以及輸入輸出棧。
1)外部ram讀寫控制器主要用來產(chǎn)生外部sram讀寫信號(hào)、地址信號(hào)、片選信號(hào),根據(jù)起始地址利用狀態(tài)機(jī)產(chǎn)生訪問外部sram的信號(hào),從外部sram讀取ucode編碼,并將其放入兩級(jí)流水寄存器中;此處產(chǎn)生信號(hào)包括:外部sram地址線,讀信號(hào)oe,寫流水線寄存器信號(hào)reg_flag,節(jié)拍t0,t1;ram地址線在系統(tǒng)啟動(dòng)(start)之后,直接獲取指令寄存器內(nèi)地址,然后每指令周期遞增一次,地址線寬度為17位;reg_flag上升沿將外部sram數(shù)據(jù)線上數(shù)據(jù)打入流水線寄存器1;指令執(zhí)行模塊需要訪問片內(nèi)雙口ram,安排在節(jié)拍t0時(shí)間內(nèi)讀雙口ram,節(jié)拍t1時(shí)間內(nèi)寫雙口ram;依據(jù)不同指令,利用兩個(gè)節(jié)拍需要產(chǎn)生輸入棧片選,輸出棧片選,能流寄存器片選,雙口ram時(shí)鐘使能和讀寫信號(hào),所有指令在兩個(gè)指令周期內(nèi)完成;
2)指令譯碼模塊根據(jù)流水寄存器鎖存的指令代碼實(shí)現(xiàn)指令譯碼,每種指令對(duì)應(yīng)譯碼器一路輸出有效,總共17條指令,分別對(duì)應(yīng)coder信號(hào)的17位;指令譯碼模塊產(chǎn)生coder(17位)、comp_inst和state信號(hào),coder信號(hào)用來區(qū)別不同的指令,comp_inst和state用來告知控制單元是否簡單指令,是否可執(zhí)行;
3)多路選擇器中的mux1(多路選擇器1)選擇能流寄存器的輸入,輸入對(duì)象包括雙口ram輸出(di)和alu輸出(aluout2),結(jié)合控制單元的sel_mux1信號(hào),向能流寄存器寫入新的指令執(zhí)行結(jié)果;mux2(多路選擇器2)選擇寫入片內(nèi)ram中的數(shù)據(jù),可輸入雙口ram的數(shù)據(jù)包括當(dāng)前能流值0或1,根據(jù)控制單元的sel_mux2信號(hào)和能流寄存器的輸出c產(chǎn)生mux_out2信號(hào);
4)alu控制單元(算術(shù)邏輯控制單元)按照控制單元信號(hào)選擇算術(shù)邏輯運(yùn)算,包括與、取反、或、移位等運(yùn)算;針對(duì)不同操作,編碼不同,異步實(shí)現(xiàn),接受核心控制單元根據(jù)指令而編碼的控制信號(hào),選擇合適的alu功能。指令中需要進(jìn)行入棧、出棧操作的指令有mps,mpp,ld。為了滿足指令需要alu設(shè)計(jì)了兩個(gè)棧:ins和outs。s0,s1表示左移或者右移,輸出為aluout1。
5)核心控制單元:作為整個(gè)指令模塊的控制單元,產(chǎn)生一切使能、控制信號(hào);
6)mcu配置指令執(zhí)行部分,主要配置寄存器有指令寄存器1,特殊指令寄存器,命令寄存器;如遇復(fù)雜指令,核心控制單元通過中斷信號(hào)通知mcu,mcu需要讀取指令寄存器2和核心控制單元中存儲(chǔ)的內(nèi)存復(fù)雜指令偏移地址,然后結(jié)合起始地址去mcu片內(nèi)的sram中讀取復(fù)雜指令繼續(xù)執(zhí)行,直到執(zhí)行到簡單指令后交由基本指令執(zhí)行器執(zhí)行。
初始狀態(tài)下mcu首先需要復(fù)位系統(tǒng),然后開始配置指令部分的各個(gè)寄存器,包括指令寄存器1,位處理指令寄存器,配置完成后,向命令寄存器寫入啟動(dòng)命令,指令執(zhí)行器開始工作。
指令執(zhí)行器接收到啟動(dòng)命令后,首先執(zhí)行位處理指令寄存器中的指令,同時(shí)按照指令寄存器1中的地址開始讀取外部sram的指令。執(zhí)行結(jié)果直接輸出。
由于采用雙執(zhí)行器結(jié)構(gòu),復(fù)雜指令執(zhí)行器和基本指令執(zhí)行器并行執(zhí)行,在執(zhí)行基本指令期間mcu處理通信任務(wù)、響應(yīng)用戶中斷,大大提高了實(shí)時(shí)性。
本發(fā)明實(shí)施例的plc指令執(zhí)行器的工作流程為:
mcu首先復(fù)位系統(tǒng),然后開始配置指令部分的各個(gè)寄存器,包括指令寄存器1,位處理指令寄存器,配置完成后,向命令寄存器寫入啟動(dòng)命令,指令執(zhí)行器開始工作。
系統(tǒng)上電初始化后,mcu將指令起始地址寫入指令寄存器1(ins_reg1)內(nèi),當(dāng)命令寄存器com_reg中寫入啟動(dòng)命令0x50后,fpga芯片將按照mcu給出的起始地址對(duì)外部sram進(jìn)行讀取,外部sram內(nèi)存儲(chǔ)ucode,fpga芯片每讀一條指令首先判斷指令的類別,如為簡單指令,則按照指令要求進(jìn)行操作,操作對(duì)象存儲(chǔ)于fpga芯片內(nèi)部雙口ram中;如為復(fù)雜指令則通知mcu并將總線使用權(quán)交出,同時(shí)將此時(shí)指令的地址存儲(chǔ)于指令寄存器2(ins_reg2)中,并置中斷標(biāo)志位和總線切換標(biāo)志位。
外部用戶程序以u(píng)code形式存儲(chǔ)在外部sram中,ucode格式如下:
單字簡單指令占用byte1和byte2兩個(gè)字節(jié);
fpga芯片讀取外部sram時(shí)數(shù)據(jù)寬度為16,每次讀取數(shù)據(jù)放入fpga芯片內(nèi)部緩存中。每種指令不同的指令代碼如上表所示,fpga芯片的指令執(zhí)行模塊的輸入是ucode代碼,輸出是指令執(zhí)行結(jié)果:能流、執(zhí)行器狀態(tài)標(biāo)志和中斷源。
fpga芯片檢測到第一個(gè)字節(jié),如第一個(gè)字節(jié)為0xf0,指令為復(fù)雜指令,fpga芯片將停止執(zhí)行該條指令,然后記錄此時(shí)指令地址,并產(chǎn)生中斷信號(hào)通知mcu。fpga芯片檢測到第一個(gè)字節(jié)數(shù)據(jù)不在可執(zhí)行之列時(shí),全部認(rèn)為為復(fù)雜指令,fpga芯片將此條指令交給mcu處理。
本發(fā)明實(shí)施例的基本指令執(zhí)行器基于fpga(現(xiàn)場可編程邏輯門陣列)技術(shù)實(shí)現(xiàn),fpga芯片作為協(xié)處理器通過mcu的外部總線與mcu相連,mcu負(fù)責(zé)復(fù)雜指令的執(zhí)行,fpga芯片下掛外部sram,外部sram存儲(chǔ)plc的用戶程序(ucode),fpga的內(nèi)部ram存儲(chǔ)plc的位元件和指令執(zhí)行結(jié)果。
本發(fā)明以上實(shí)施例將plc簡單指令剝離出來,主處理器負(fù)責(zé)復(fù)雜指令執(zhí)行,基本指令執(zhí)行器負(fù)責(zé)簡單指令執(zhí)行,取指令、譯碼、尋址、運(yùn)算、結(jié)果回寫等單指令周期即可完成,大大提升了指令執(zhí)行速度;由于采用雙執(zhí)行器結(jié)構(gòu),在執(zhí)行簡單指令期間mcu還可以處理用戶中斷、通信任務(wù)等,所以整體用戶程序執(zhí)行速度得到了很大提升,plc的實(shí)時(shí)性也比原先增強(qiáng);因此本發(fā)明有以下優(yōu)點(diǎn):
1.克服現(xiàn)有基于mcu的解釋型執(zhí)行方式運(yùn)行速度慢的問題;
2.克服現(xiàn)有基于mcu的編譯型執(zhí)行方式通用性差,應(yīng)用和升級(jí)成本高的問題;
3.克服現(xiàn)有以mcu為處理核心的plc指令執(zhí)行器指令執(zhí)行周期長,執(zhí)行用戶程序時(shí)其他重要任務(wù)無法及時(shí)響應(yīng)的問題,實(shí)時(shí)性和可靠性好。