黃仕林,李克儉,蔡啟仲
(廣西科技大學(xué)電氣與信息工程學(xué)院,廣西柳州 545006)
?
基于FPGA的PLC動態(tài)并行執(zhí)行定時器的設(shè)計
黃仕林,李克儉,蔡啟仲
(廣西科技大學(xué)電氣與信息工程學(xué)院,廣西柳州 545006)
PLC內(nèi)部設(shè)置有眾多的定時器,通常在工程應(yīng)用中只使用了部分定時器。因此應(yīng)用ARM-FPGA架構(gòu)的PLC系統(tǒng),設(shè)計FPGA定時器控制器的體系結(jié)構(gòu),1 ms作為基本定時單位,采用地址映射存儲器順序存儲被PLC用戶程序使用了的定時器的編號,只對被使用的定時器進(jìn)行定時操作,提高了PLC的定時計數(shù)處理速度。闡述了定時器控制器的各功能模塊的工作原理,以及與FPGA中央控制器的通信方式和通信的指令命令。經(jīng)過仿真與測試,定時誤差不大于0.1 ms,減少了PLC定時器執(zhí)行定時操作的時間,達(dá)到精確定時的目的。
可編程控制器;定時器;現(xiàn)場可編程門陣列;地址映射存儲器;通信協(xié)議
PLC(Programmable Logic Controller)可編程控制器是工業(yè)控制常用的重要控制器件,它采用了可編程的內(nèi)部存儲器存儲程序并執(zhí)行,輸入或輸出數(shù)字量或模擬量控制各類生產(chǎn)過程[1]。采用ARM-FPGA架構(gòu)的PLC系統(tǒng)可以很好的融合ARM高速低功耗和FPGA并行工作的優(yōu)點,該PLC系統(tǒng)的主控制器為ARM,F(xiàn)PGA則作為協(xié)處理器與ARM協(xié)同完成各種并行運算工作[2-3]。
通過對PLC定時器的運行特點的研究與分析,設(shè)計的動態(tài)并行執(zhí)行的定時器控制器可以根據(jù)具體工程應(yīng)用來重構(gòu)其內(nèi)部的定時器的總數(shù),實現(xiàn)對FPGA資源的靈活配置。并通過地址映射存儲器的使用,能夠在執(zhí)行定時操作時迅速地在所設(shè)計的256個定時器中找到需要進(jìn)行定時操作的定時器的相關(guān)數(shù)據(jù),跳過了對未使用定時器的數(shù)據(jù)的讀取和判斷操作,從而使定時器控制器的定時操作更加高效,提高了可編程控制器定時器的執(zhí)行效率。
定時器控制器的電路結(jié)構(gòu)如圖1所示,包含模塊有:端口讀寫控制器,地址映射存儲器,定時存儲器,1 kHz脈沖生成器,指令執(zhí)行器,定時控制器。定時結(jié)果上傳控制器。
圖1 定時器控制器結(jié)構(gòu)圖
1.1 端口讀寫控制器
定時器控制器通過端口讀寫控制器與中央控制器進(jìn)行數(shù)據(jù)通信。端口包括32位DATAC數(shù)據(jù)線,5位ADDRC模塊地址線,RDC讀信號線,WDC寫信號線;RST復(fù)位線,BUSY忙信號線,ASK定時器控制器讀請求信號線;,ANS中央控制器讀應(yīng)答信號線,CLK系統(tǒng)時鐘輸入線。其中RST復(fù)位線使用低電平復(fù)位,低電平的保持時間要大于20 ns。RDC和WDC為低電平使能,ASK與ANS線均為低電平有效。DATAC是使用組合邏輯三態(tài)門構(gòu)成的32位雙向I/O口。CE線是用以切換定時控制器、定時結(jié)果上傳控制器與指令執(zhí)行器的內(nèi)部信號線,保證指令執(zhí)行的優(yōu)先級高于定時操作和定時結(jié)果上傳。端口讀寫控制器可以存儲一條指令,當(dāng)存儲有指令即指令執(zhí)行時,置BUSY線和CE線為低電平,若從指令執(zhí)行器處接收到指令執(zhí)行結(jié)束信息時,置BUSY線和CE線為高電平。
1.2 地址映射存儲器
定時器當(dāng)前值和設(shè)定值在相應(yīng)存儲器中的存儲位置是與定時器本身的編號對應(yīng),即定時器的編號為定時當(dāng)前值和定時設(shè)置值在存儲器中的地址。為了達(dá)到動態(tài)執(zhí)行的目的,使用地址映射存儲器按初始化的順序存儲被使用的定時器的編號。當(dāng)進(jìn)行定時操作或者進(jìn)行定時結(jié)果上傳操作時,只需要從地址映射寄存器中的第一個地址開始順序讀取被使用的定時器的編號,以此編號為地址,便可以迅速地在定時存儲器中找到使用了的定時器的相關(guān)數(shù)據(jù)進(jìn)行操作。這樣就跳過了未使用的定時器,從而達(dá)到了提高系統(tǒng)執(zhí)行效率的目的。地址映射存儲器使用Libero8.3 IDE軟件提供的雙端口存儲器IP核生成,為9位×256的結(jié)構(gòu),D8位為使用標(biāo)志位,D7~D0位存儲被使用的定時器編號,若D8位為1,則D7~D0位定時器編號有效,否則代表該定時器定時到或此定時器未被使用。存儲數(shù)據(jù)格式如表1所示。
表1 地址映射存儲器存儲數(shù)據(jù)格式表
1.3 定時存儲器
定時存儲器分為定時當(dāng)前值存儲器、定時設(shè)置值存儲器、定時結(jié)果存儲器,用以實現(xiàn)定時器狀態(tài)信息、包括復(fù)位、定時器通斷電等定時相關(guān)信息以及定時結(jié)果的存儲。
定時器當(dāng)前值存儲器設(shè)計為27位×256的結(jié)構(gòu),用以存儲定時器的臨時計數(shù)數(shù)據(jù)、當(dāng)前狀態(tài)信息、定時當(dāng)前值和編號信息,定時器的編號即為其相關(guān)信息在定時當(dāng)前值存儲器中的地址。因為定時器控制器的定時時鐘是以1 ms為單位,設(shè)計8位的臨時計數(shù)區(qū)以實現(xiàn)10 ms和100 ms為定時單位的定時器的定時。定時當(dāng)前值存儲器存儲數(shù)據(jù)格式如表2所示。
表2 定時當(dāng)前值存儲器存儲數(shù)據(jù)格式表
定時器設(shè)置值存儲器設(shè)計為18位×256的結(jié)構(gòu),用以存儲定時器的定時設(shè)置值,定時器的編號即為其設(shè)置值在定時設(shè)置值存儲器中的地址。
定時結(jié)果存儲器設(shè)計為1位×256的結(jié)構(gòu),以定時器的編號為地址存儲定時器的定時結(jié)果信息,如果某一位的數(shù)值為1,則代表該位在定時結(jié)果存儲器中的地址對應(yīng)的編號的定時器定時已到。
1.4 1 kHz脈沖生成器
由于PLC常用的內(nèi)部定時器定時單位分別為1 ms、10 ms、100 ms,故采用1 kHz作為定時時鐘,以滿足常用定時單位中1 ms定時單位的設(shè)計要求。
1 kHz脈沖生成器是通過對50 MHz系統(tǒng)時鐘的計數(shù)生成占空比為90%的1 ms為周期的脈沖。計數(shù)器計數(shù)值在0~44 999之間輸出高電平,在45 000~49 999之間輸出低電平,而后計數(shù)值將歸0,重新開始計數(shù)。當(dāng)該脈沖為高電平時,定時控制器將會對每一個被使用了的且定時未到的定時器進(jìn)行定時操作,當(dāng)該脈沖為低電平時,定時器控制器將會判斷是否有定時器定時到,如果有則上傳定時到的定時器的編號信息,否則跳過此階段等待該脈沖的高電平進(jìn)行下一次定時操作。
1.5 指令執(zhí)行器
當(dāng)中央控制器對定時器控制器發(fā)送指令之后,指令通過端口讀寫控制器被送至指令執(zhí)行器。通過對中央控制器發(fā)送來的指令里的D31~D29這三位數(shù)據(jù)的檢測,判斷指令的類型,啟動指令執(zhí)行器內(nèi)部各個指令對應(yīng)的子模塊,執(zhí)行相關(guān)的數(shù)據(jù)操作。指令執(zhí)行結(jié)束后將發(fā)送指令結(jié)束信息至端口讀寫控制器,用以告知端口讀寫控制器指令執(zhí)行結(jié)束,使端口讀寫控制器置高BUSY線和CE線。流程圖如圖2所示。
圖2 指令執(zhí)行器流程圖
1.6 定時控制器
定時控制器負(fù)責(zé)對被使用的定時器每1ms進(jìn)行一次定時操作,告知定時結(jié)果上傳控制器在此定時時鐘周期內(nèi)是否有定時器定時結(jié)束。當(dāng)定時器控制器內(nèi)沒有指令執(zhí)行且定時操作結(jié)束標(biāo)志寄存器K1為0時,定時控制器將會執(zhí)行定時操作。定時操作分為三個步驟,第一步:兩個時鐘周期,通過從地址映射存儲器中讀取被使用了的定時器的編號,確定其是否定時結(jié)束以及其相關(guān)信息在定時存儲器中的地址;第二步:兩個時鐘周期,從定時存儲器中讀取出的定時器的信息;第三步:三個時鐘周期,對定時器的定時數(shù)據(jù)進(jìn)行判斷,包括是否通電,以及對定時當(dāng)前值進(jìn)行“加1”操作并與定時設(shè)定值進(jìn)行比較和判斷,是否需要寫入定時結(jié)束信息等。操作完畢后將相關(guān)信息寫入定時存儲器。如此即完成了對定時存儲器中的數(shù)據(jù)進(jìn)行“讀-改-寫”的定時操作。包括流程圖如圖3所示。
圖3 定時控制器流程圖
1.7 定時結(jié)果上傳控制器
定時結(jié)果上傳控制器負(fù)責(zé)將一個定時時鐘周期內(nèi)定時結(jié)束的定時器的編號信息上傳給中央控制器。當(dāng)定時器控制器內(nèi)沒有指令執(zhí)行,定時結(jié)束標(biāo)志寄存器sign為0時,定時結(jié)果上傳控制器將會執(zhí)行定時結(jié)果上傳操作。定時結(jié)果上傳控制器先從地址映射存儲器中順序讀取被使用了的定時器的編號信息,并以編號為地址,讀取定時結(jié)果存儲器中該定時器的定時結(jié)束信息,判斷是否需要上傳該定時器的編號。若定時結(jié)束標(biāo)志寄存器sign為1,則跳過上傳階段,等待下一次定時時鐘的低電平。流程圖如圖4所示。
圖4 定時結(jié)果上傳控制器流程圖
定時器控制器主要實現(xiàn)的功能就是接收中央控制器發(fā)來的經(jīng)過ARM編譯后的PLC指令,根據(jù)指令自主完成對定時器的相關(guān)復(fù)位、設(shè)定值修改、定時操作、定時結(jié)果上傳等操作[4-5]。
2.1 通信時序
定時器控制器與中央控制器的通信時序如圖5所示,BUSY線為忙信號線,當(dāng)BUSY線為高電平時才可以進(jìn)行寫操作,只有在接收到ASK低電平信號后才可進(jìn)行讀操作。
(a)寫時序
(b)讀時序圖5 定時器控制器數(shù)據(jù)讀寫時序圖
2.2 通信數(shù)據(jù)格式
根據(jù)PLC的實際使用情況,定時器的數(shù)量設(shè)計為256個,編號為T0~T255,其中T0~T199為通用型100 ms定時單位定時器、T200~T247為通用型10 ms定時單位定時器、T248~T251為積算型1 ms定時單位定時器、T252~T255為積算型100 ms定時單位定時器,定時設(shè)定值為18位,最大設(shè)定值為262143。假設(shè)使用100 ms為定時單位的定時器,則可定時100~218×100 ms,即最長可以實現(xiàn)7 h 16 min 54.3 s的定時。
為了實現(xiàn)PLC的定時功能,對中央控制器與定時器控制器通信的指令進(jìn)行了命令字格式的設(shè)計。
2.2.1 全局復(fù)位指令
該指令由中央控制器發(fā)送,將對所有定時器進(jìn)行復(fù)位,對定時器控制內(nèi)所有存儲的數(shù)據(jù)進(jìn)行清零。指令數(shù)據(jù)格式如表3所示。
表3 全局復(fù)位指令數(shù)據(jù)格式表
2.2.2 局部復(fù)位指令
該指令由中央控制器發(fā)送,將保留每個定時器的設(shè)置值的信息,定時器的其他信息將復(fù)位至初始化結(jié)束未開始進(jìn)行定時時的狀態(tài)。該復(fù)位指令對積算型定時器和地址映射存儲器不進(jìn)行操作。指令數(shù)據(jù)格式如表4所示。
表4 局部復(fù)位指令數(shù)據(jù)格式表
2.2.3 定時器初始化指令
該指令由中央控制器發(fā)送,是PLC用戶應(yīng)用程序第一次編譯或執(zhí)行全局復(fù)位指令后發(fā)送給定時器控制器的指令,用以初始化定時器。指令數(shù)據(jù)指令入表5所示。
表5 定時器初始化指令數(shù)據(jù)格式表
2.2.4 定時器狀態(tài)傳送指令
該指令由中央控制器發(fā)送,是執(zhí)行PLC用戶程序時發(fā)送的指令,當(dāng)PLC應(yīng)用程序執(zhí)行到某個定時器的輸出指令時,將該定時器的狀態(tài)信息發(fā)送給定時器控制器。指令數(shù)據(jù)指令如表6所示。
表6 定時器狀態(tài)傳送指令數(shù)據(jù)格式表
2.2.5 斷電保存指令
該指令由中央控制器發(fā)送,用于當(dāng)PLC斷電時中央控制器告知定時器控制器進(jìn)行斷電保存,接收到該指令后定時器控制器將發(fā)送正在使用的積算型定時器的編號以及該定時器的當(dāng)前值,用于保存至PLC再次通電時回傳。指令數(shù)據(jù)格式如表7所示。
表7 斷電保存指令數(shù)據(jù)格式表
2.2.6 通電數(shù)據(jù)回傳指令
該指令由中央控制器發(fā)送,用于PLC斷電后再次通電時的積算型定時器的數(shù)據(jù)回傳,包括斷電時正在使用的積算型定時器的定時當(dāng)前值和該積算型定時器的編號,在此指令發(fā)送之前必須完成對積算型定時器的初始化。指令數(shù)據(jù)格式如表8所示。
表8 通電數(shù)據(jù)回傳指令數(shù)據(jù)格式表
2.2.7 讀取定時器定時當(dāng)前值指令
該指令由中央控制器發(fā)送,定時器控制器接收到該指令后將上傳該指令內(nèi)所帶定時器編號的定時器的定時當(dāng)前值給中央控制器。指令數(shù)據(jù)格式如表9所示。
表9 讀取定時器定時當(dāng)前值指令數(shù)據(jù)格式表
2.2.8 定時器定時結(jié)束信息
該信息由定時器控制器發(fā)送,告知中央控制器該編號定時器定時結(jié)束信息。數(shù)據(jù)格式如表10所示。
表10 定時器定時結(jié)束信息數(shù)據(jù)格式表
2.2.9 定時器定時當(dāng)前值信息
該信息由定時器控制器發(fā)送,在接收到中央控制器讀取定時器定時當(dāng)前值指令后發(fā)送給中央控制器請求的定時當(dāng)前值信息。數(shù)據(jù)格式如表11所示。
表11 定時器定時當(dāng)前值信息數(shù)據(jù)格式表
2.2.10 積算型定時器斷電保存信息
該信息由定時器控制器發(fā)送,在接收到中央控制器斷電保存指令后發(fā)送此信息給中央控制器,用以保存正在使用的積算型定時器的當(dāng)前值及其對應(yīng)的定時器編號。數(shù)據(jù)格式如表12所示。
表12 積算型定時器斷電保存信息數(shù)據(jù)格式表
在使用Verilog HDL語言完成硬件描述方面的設(shè)計后,使用ModeSim軟件配合編寫的testbench.v文件模擬中央控制器對定時器控制器的輸入,然后觀察定時器控制器的輸出情況[6-8]。測試方法:先使用Synplify軟件綜合后,再進(jìn)行綜合后仿真,對定時控制器和定時結(jié)果上傳控制器進(jìn)行測試,測試定時控制器和定時結(jié)果上傳控制器是否能完成定時功能。
(a)初始化定時器指令
(b)定時器狀態(tài)傳送指令
(c)定時器控制器0.9 ms處輸出
(d)定時器控制器1.9 ms處輸出圖6 定時器控制器仿真結(jié)果圖
設(shè)計的定時器控制器模塊地址為00100,先模擬中央控制器寫入定時器初始化指令0x700001f9和0x600001fa初始化兩個編號為F9H(249)和FAH(250)的積算型1ms定時單位定時器,設(shè)定編號為FAH定時器定時設(shè)定值為1 ms,寄存器D傳送,設(shè)定編號為F9H定時器定時設(shè)定值為1 ms,非寄存器D傳送。然后模擬中央控制器寫入定時器狀態(tài)傳送指令0x980002f9修改定時器F9H從斷電至通電并將其設(shè)定值改為2 ms,模擬中央控制器寫入定時器狀態(tài)傳送指令0x880001fa修改定時器FAH從斷電至通電。分別在0.9 ms時和1.9 ms時觀察定時器控制器的輸出情況,仿真結(jié)果如圖6所示。
經(jīng)過測試,定時結(jié)果上傳控制器在0.9 ms處上傳編號FAH定時器的編號至中央控制器,在1.9 ms處上傳編號為F9H的定時器編號至中央控制器,證明指令執(zhí)行器、定時控制器和定時結(jié)果上傳控制器都能正常工作,定時誤差控制在0.1 ms以內(nèi)。
以FPGA為平臺設(shè)計了一種面向PLC的定時器控制器,設(shè)計了定時器控制器與中央控制器的通信協(xié)議和指令格式。不僅能夠?qū)崿F(xiàn)定時功能,并且設(shè)計使用了地址映射存儲器來存儲特定編號定時器的相關(guān)數(shù)據(jù)在定時存儲器中的地址,使得定時控制器的定時操作更加快速高效,能在設(shè)計的256個定時器中迅速找到被使用的定時器進(jìn)行定時操作,達(dá)到了只對被使用的定時器進(jìn)行定時操作,跳過未使用的定時器,從而提高定時操作效率的設(shè)計目的。
[1] 方承遠(yuǎn),張振國.工廠電氣控制技術(shù).3版.北京:機(jī)械工業(yè)出版社,2008.
[2] 侯鴻佳,蔡啟仲,陳文輝,等.ARM+FPGA組成的PLC結(jié)構(gòu)的通信系統(tǒng).廣西工學(xué)院學(xué)報,2012,23(1):60-64.
[3] 黎娜,蔡啟仲,黃捷峰.基于ARM7與FPGA組成的可編程控制器.微計算機(jī)信息,2008,24(4):54-58
[4] 張煒,李克儉,蔡啟仲,等.基于FPGA的PLC并行定時器的設(shè)計.計算機(jī)工程與設(shè)計,2013,34(4):1244-1249.
[5] 李靜,蔡啟仲,張煒,等.基于FPGA的并行操作邏輯運算控制器設(shè)計.計算機(jī)工程與設(shè)計,2013,34(4):1244-1249.
[6] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程.2版.北京:北京航空航天大學(xué)出版社,2008.
[7] 孫志雄,謝海霞.基于FPGA的高速串并/并串轉(zhuǎn)換器設(shè)計.現(xiàn)代電子技術(shù),2014(8):151-152.
[8] 李克儉,付杰,蔡啟仲,等.基于FPGA的串行定時器設(shè)計.廣西工學(xué)院學(xué)報,2012,23(3):61-65.
Design of PLC Dynamic Parallel Execution Timer Based on FPGA
HUANG Shi-lin,LI Ke-jian,CAI Qi-zhong
(College of Electronic and Information Engineering,Guangxi University of Science and Technology,Liuzhou 545006,China)
PLC is internally provided with numerous timers,and usually in engineering applications only uses a part of it.Using the PLC system of ARM-FPGA architecture,we designed the FPGA timer controller’s system structure.Taking 1ms as the basic timing unit,by using the memory of address mapping,we sequentially stored the timer number that be used by PLC user program,and only the timer that be used by PLC user program can be performed the timing operation,thus improved the processing speed of PLC timing.The working principle of each function module of the timer controller,and the communication mode and the communication command between the FPGA central controller and the timer controller were described.The simulation and testing shows that the timing error is within 1ms or less,which reduces the time of PLC timer perform the timing operation and achieves the purpose of precise timing.
PLC;timer;FPGA;memory of address mapping;communication protocol
廣西科學(xué)基金項目(2014GXNSFAA118392);廣西教育廳科研項目(2013LX092)
2014-10-09 收修改稿日期:2015-03-28
TP332
A
1002-1841(2015)08-0057-05
黃仕林(1988—),碩士研究生,研究方向為過程控制與自動化裝置。E-mail:gm2053462@aliyun.com 李克儉(1962—),教授,高級工程師,研究方向為電力電子技術(shù)與自動化裝置。E-mail:lijian6262@126.com