徐曉宇,李克儉,蔡啟仲,潘紹明,余 玲
(1.廣西科技大學(xué) 電氣與信息工程學(xué)院, 廣西 柳州 545006;2.廣西科技大學(xué)鹿山學(xué)院 電氣與計算機工程系, 廣西 柳州 545616)
?
基于FPGA的PLC并行執(zhí)行定時器/計數(shù)器的設(shè)計
徐曉宇1,李克儉1,蔡啟仲1,潘紹明1,余玲2
(1.廣西科技大學(xué) 電氣與信息工程學(xué)院, 廣西 柳州545006;2.廣西科技大學(xué)鹿山學(xué)院 電氣與計算機工程系, 廣西 柳州545616)
針對ARM+FPGA構(gòu)建的PLC系統(tǒng),分析PLC對定時器/計數(shù)器的功能需求,設(shè)計了可以并行執(zhí)行的定時器/計數(shù)器,構(gòu)建的定時器/計數(shù)器共用一個端口讀寫控制器與FPGA中央控制器進行數(shù)據(jù)通信,定時器/計數(shù)器內(nèi)部工作是相互獨立的,能夠并行的工作,并通過使用地址映射存儲器使得定時器/計數(shù)器的指令執(zhí)行更加高效;對中央控制器與定時器/計數(shù)器的通信時序和通信格式進行了設(shè)計,方便了中央控制器對定時器/計數(shù)器的控制與測試;通過仿真測試,該定時器/計數(shù)器能夠滿足PLC定時器/計數(shù)器的基本功能,并且達到了穩(wěn)定的定時/計數(shù)的設(shè)計要求。
PLC系統(tǒng) ;定時器/計數(shù)器 ;并行執(zhí)行;FPGA;通信格式
PLC的內(nèi)部資源包括內(nèi)部繼電器、專用繼電器、數(shù)據(jù)存儲區(qū)、定時器/計數(shù)器、保持繼電器等,其中,定時器與計數(shù)器是PLC中最重要的資源之一[1]。
設(shè)計的ARM與FPGA協(xié)同工作的PLC中,將使用高速低功耗的ARM作為PLC的主控制器。雙口RAM與ARM的快速GPIO端口相連接,作為ARM與FPGA之間的通信接口[2]。中央控制器主要用以完成對雙口RAM內(nèi)部ARM寫入的數(shù)據(jù)進行讀出、處理、整理和寫入操作。多操作位邏輯運算
控制模塊主要用以實現(xiàn)邏輯運算指令[3]。輸入存儲與讀取控制模塊主要用以讀取外部開關(guān)量的狀態(tài)信息[4]。數(shù)據(jù)輸出控制模塊主要用以將程序執(zhí)行結(jié)果處理后驅(qū)動外部負載[5]。
1.1定時器功能需求分析
定時器作為PLC重要的軟元件,根據(jù)PLC的實際使用情況,定時器的數(shù)量設(shè)計為256個,
編號為T0~T255,其中T0~T199為通用型100 ms定時單位定時器、T200~T247為通用型10 ms定時單位定時器、T248~T251為積算型1 ms定時單位定時器、T252~T255為積算型100 ms定時單位定時器。
1.2計數(shù)器功能需求分析
根據(jù)PLC的實際使用情況,計數(shù)器的數(shù)量設(shè)計為235個,編號為C0~C234,其中C0~C100為斷電復(fù)位型加計數(shù)器、C101~C200為斷電保持型加計數(shù)器、C201~C220為斷電復(fù)位型加減計數(shù)器、C221~C234為斷電保持型加減計數(shù)器。
1.3定時器/計數(shù)器的可重構(gòu)設(shè)計
基于FPGA的可重構(gòu)技術(shù),就是利用FPGA可以多次重復(fù)編程配置的特點,通過分時復(fù)用的方式利用FPGA內(nèi)部的邏輯資源,使在時間上離散的邏輯電路功能模塊能在同一FPGA中順序?qū)崿F(xiàn)的技術(shù)[6]。
設(shè)計的定時器/計數(shù)器為可重構(gòu)的設(shè)計,最多可設(shè)計有256個定時器,235個內(nèi)部計數(shù)器??梢愿鶕?jù)具體工程應(yīng)用來設(shè)計其內(nèi)部定時器/計數(shù)器的數(shù)量,以達到對FPGA資源的靈活配置。
2.1FPGA與定時器/計數(shù)器的通信端口設(shè)計
定時器、計數(shù)器通過總線的形式與FPGA中央控制器進行數(shù)據(jù)的交互,它們的工作是相互獨立的,能并行地工作,相互之間不影響。它們使用相同結(jié)構(gòu)和功能的端口讀寫控制器與中央控制器進行數(shù)據(jù)交互,在相同的時刻只能有一個模塊占用總線與中央控制器進行通信。FPGA與定時器/計數(shù)器通信框圖如圖1所示。
圖1 FPGA與定時器/計數(shù)器通信框圖
端口讀寫控制器主要實現(xiàn)與中央控制器的接口,定時器/計數(shù)器根據(jù)讀寫時序,通過端口讀寫控制器實現(xiàn)與中央控制器的數(shù)據(jù)交換。端口讀寫控制器結(jié)構(gòu)圖如圖2所示。RST復(fù)位線使用低電平復(fù)位;ADDRC是模塊地址線; RDC和WRC為低電平使能;ASK(1/2)與ANS(1/2)線均為低電平有效。讀寫控制模塊通過判斷RDC和WRC以及ADDRC的狀態(tài),控制組合邏輯三態(tài)門構(gòu)成的32位雙向I/O口DATAC進行數(shù)據(jù)的輸入或輸出。端口讀寫控制器的32位指令緩存可以存儲一條指令,由29位data_in線輸出對D28~D0即指令數(shù)據(jù),由3位code_in線輸出D31~D29即指令類型。CE指令執(zhí)行標志線。當(dāng)存儲有指令時,置BUSY(1/2)線和CE線為低電平。
圖2 端口讀寫控制器結(jié)構(gòu)圖
2.2定時器/計數(shù)器的讀寫時序設(shè)計
BUSY(1/2)線為忙信號輸出線,當(dāng)中央控制器檢測到BUSY(1/2)線為高電平時才可以對定時和計數(shù)器進行寫操作。當(dāng)定時和計數(shù)器需要中央控制器對其進行讀操作時,先通過定時和計數(shù)器讀請求信號線ASK(1/2)發(fā)送一個時鐘周期即20ns的請求脈沖,然后等待中央控制器讀應(yīng)答信號線ANS(1/2)上的應(yīng)答脈沖,通過置低讀信號線RDC同時選中定時和計數(shù)器地址即可從DATAC讀取3個時鐘周期即60 ns的數(shù)據(jù)。中央控制器同定時和計數(shù)控制模塊的寫時序、讀時序如圖3、圖4所示。
圖3 定時器/計數(shù)器寫時序圖圖4 定時器和計數(shù)器讀時序圖
由ARM與FPGA協(xié)同構(gòu)建的PLC控制系統(tǒng),ARM作為PLC主控制器通過數(shù)據(jù)總線、地址總線、控制總線向FPGA發(fā)送指令命令,F(xiàn)PGA接收到ARM的指令命令之后,通過FPGA中央控制器與計數(shù)器進行通信。
3.1定時器設(shè)計
定時器總體結(jié)構(gòu)圖設(shè)計如圖5所示,其中主要包含以下模塊:端口讀寫控制器,定時器地址映射存儲器,定時器存儲器,定時器指令執(zhí)行器,定時器控制器,1 kHz脈沖生成器。
圖5 定時器總體結(jié)構(gòu)圖
3.1.1定時器地址映射存儲器
定時器當(dāng)前值和設(shè)定值在相應(yīng)存儲器中的存儲位置與定時器本身的編號對應(yīng)。當(dāng)進行定時器操作或者進行定時器結(jié)果上傳操作時,只需要從定時器地址映射存儲器中的第一個地址開始順序讀取被使用的定時器的編號,以此編號為地址,便可以迅速地在定時存儲器中找到使用了的定時器的相關(guān)數(shù)據(jù)進行操作,達到了提高系統(tǒng)執(zhí)行效率的目的。
定時器地址映射存儲器的封裝如圖6所示。RWCLK為讀寫時鐘輸入端口,讀與寫共用一個時鐘;RESET為復(fù)位信號輸入端口;WEN為寫使能信號輸入端口;REN為讀使能信號輸入端口;WADDR為寫入地址輸入端口;RADDR為讀出地址輸入端口;WD為寫入數(shù)據(jù)輸入端口;RD為讀出數(shù)據(jù)輸出端口。定時器地址映射存儲器使用Libero8.3IDE提供的雙端口存儲器IP核生成。
圖6 定時器地址映射存儲器封裝圖
3.1.2定時器控制器
當(dāng)1 kHz脈沖上升沿到來時定時控制器將會啟動,當(dāng)指令寫入標志CE為高電平即定時器內(nèi)沒有指令且定時操作結(jié)束標志寄存器K1為0時,定時控制器將會執(zhí)行定時操作。先通過從地址映射存儲器中讀取被使用了的定時器的編號;兩個時鐘周期后,從定時存儲器中讀取出的定時器的信息;第3個時鐘周期后,對定時器的定時數(shù)據(jù)進行判斷。操作完畢后將相關(guān)信息寫入定時存儲器。定時器控制器程序流程圖如圖7所示。
圖7 定時器控制器程序流程圖
3.2計數(shù)器設(shè)計
根據(jù)功能需求分析所確定的計數(shù)器控制模塊的功能設(shè)計計數(shù)器控制模塊的功能模塊,計數(shù)器結(jié)構(gòu)設(shè)計如圖8所示,其中包含以下功能模塊:端口讀寫控制器,計數(shù)器地址映射存儲器,計數(shù)器指令執(zhí)行器,計數(shù)當(dāng)前值存儲器。
圖8 計數(shù)器總體結(jié)構(gòu)圖
3.2.1計數(shù)器地址映射存儲器
計數(shù)器地址映射存儲器與定時器設(shè)計原理相同,使用Libero8.3IDE提供的雙端口存儲器IP核生成。
3.2.2計數(shù)器指令執(zhí)行器
當(dāng)中央控制器對定時器控制器發(fā)送指令之后,指令通過端口讀寫控制器被送至指令執(zhí)行器。指令類型通過端口讀寫控制器的輸出線code_in線輸入指令執(zhí)行器,指令數(shù)據(jù)通過端口讀寫控制器的輸出 data_in線輸入指令執(zhí)行器,同時端口讀寫控制器置低CE線,啟動計數(shù)器指令執(zhí)行器。指令執(zhí)行結(jié)束后,使端口讀寫控制器置高BUSY線和CE線。計數(shù)器指令執(zhí)行器的結(jié)構(gòu)如圖9所示。
圖9 計數(shù)器指令執(zhí)行器結(jié)構(gòu)圖
設(shè)計的中央控制器與定時器/計數(shù)器通信的數(shù)據(jù)格式以指令及信息的形式,設(shè)計有5種指令,3種信息。
4.1中央控制器發(fā)送的指令數(shù)據(jù)格式
4.1.1復(fù)位指令
中央控制器發(fā)送給定時器或者計數(shù)器,當(dāng)D31~D29為001時,對所有定時器/計數(shù)器進行復(fù)位;當(dāng)D31~D29為010時,該復(fù)位命令對積算型的定時器、計數(shù)器和地址映射存儲器不進行操作,復(fù)位指令數(shù)據(jù)格式表如表1所示。
表1 復(fù)位指令數(shù)據(jù)格式表
4.1.2初始化指令
該指令由中央控制器發(fā)送,是PLC用戶應(yīng)用程序執(zhí)行復(fù)位指令后發(fā)送給定時器/計數(shù)器的指令。定時器初始化指令數(shù)據(jù)格式如表2所示。
表2 定時器初始化指令數(shù)據(jù)格式表
計數(shù)器初始化指令數(shù)據(jù)格式如表3所示。
表3 計數(shù)器初始化指令數(shù)據(jù)格式表
4.1.3斷電保存指令
該指令由中央控制器發(fā)送,用于當(dāng)PLC斷電時中央控制器告知定時器、計數(shù)器進入斷電保存階段。指令數(shù)據(jù)格式如表4所示。
表4 斷電保存指令數(shù)據(jù)格式表
4.1.4狀態(tài)傳送指令
該指令由中央控制器發(fā)送,將狀態(tài)信息發(fā)送到相應(yīng)的定時器計數(shù)器。定時器狀態(tài)傳送指令數(shù)據(jù)格式如表5所示。
表5 定時器狀態(tài)傳送指令數(shù)據(jù)格式表
計數(shù)器狀態(tài)傳送指令數(shù)據(jù)格式如表6所示。
表6 計數(shù)器狀態(tài)傳送指令數(shù)據(jù)格式表
4.1.5讀取當(dāng)前值指令
該指令由中央控制器發(fā)送,用來讀取定時器/計數(shù)器的當(dāng)前值。指令數(shù)據(jù)格式如表7所示。
表7 讀取當(dāng)前值指令數(shù)據(jù)格式表
4.2定時器/計數(shù)器發(fā)送的信息數(shù)據(jù)格式
4.2.1定時結(jié)束/計數(shù)到信息
該信息由定時器、計數(shù)器發(fā)送,告知中央控制器該定時器/計數(shù)器編號的定時器定時結(jié)束信息或計數(shù)器計數(shù)到信息。
表8 定時結(jié)束/計數(shù)到信息數(shù)據(jù)格式表
4.2.2定時/計數(shù)當(dāng)前值信息
該信息由定時器、計數(shù)器發(fā)送,在接收到中央控制器讀取當(dāng)前值指令后發(fā)送給中央控制器。定時/計數(shù)當(dāng)前值信息數(shù)據(jù)格式如表9所示。
表9 定時/計數(shù)當(dāng)前值信息數(shù)據(jù)格式表
4.2.3斷電保存信息
該信息由定時器、計數(shù)器發(fā)送,在接收到中央控制器斷電保存指令后發(fā)送此信息給中央控制器,用以保存正在使用的積算型定時器、積算型計數(shù)器的當(dāng)前值及其對應(yīng)的定時器/計數(shù)器編號。數(shù)據(jù)格式如表10所示。
表10 斷電保存信息數(shù)據(jù)格式表
在使用VerilogHDL語言完成硬件描述方面的設(shè)計后,使用ModelSim軟件配合編寫的testbench.v文件模擬中央控制器對定時器/計數(shù)器的輸入,然后觀察定時器/計數(shù)器的輸出情況[7-8]。
5.1定時器功能的仿真測試
設(shè)計的定時器模塊地址為00100,先根據(jù)之前設(shè)計的中央控制器同定時和計數(shù)控制模塊的通信協(xié)議初始化指令的數(shù)據(jù)格式,模擬中央控制器寫入定時器初始化指令0x600001f9和0x600001fa初始化兩個定時器。模擬中央控制器寫入狀態(tài)傳送指令0x980002f9修改定時器F9H從斷電至通電并將其設(shè)定值改為2 ms, 模擬中央控制器寫入狀態(tài)傳送指令0x880001fa修改定時器FAH從斷電至通電。分別在0.9 ms時和1.9 ms時觀察定時器的輸出情況。時序仿真的結(jié)果如圖10所示。
圖10 定時器時序仿真結(jié)果
5.2計數(shù)器功能的仿真測試
設(shè)計的計數(shù)器模塊地址為00010,模擬中央控制器寫入計數(shù)器初始化指令0x6000000f和0x600000fa初始化兩個編號為0FH(16)和FAH(250)的計數(shù)器。其中編號為0FH的計數(shù)器為通用型單增計數(shù)器,編號為FAH的計數(shù)器為積算型加減計數(shù)器。時序仿真的結(jié)果如圖11所示。
圖11 計數(shù)器時序仿真結(jié)果
由仿真測試可知,中央控制器通過狀態(tài)傳送指令告知計數(shù)器的驅(qū)動的通斷電,由計數(shù)器根據(jù)驅(qū)動的通斷電狀態(tài)對計數(shù)器進行計數(shù),計數(shù)器能正常工作。
本文以ARM+FPGA構(gòu)建了PLC系統(tǒng),對此PLC系統(tǒng)的FPGA構(gòu)建的定時器/計數(shù)器進行了介紹。然后對設(shè)計所使用的軟件平臺、硬件平臺和編程語言進行了說明。同時對定時和計數(shù)控制模塊的總體結(jié)構(gòu)進行了設(shè)計,重點對端口讀寫控制器及中央控制器與定時和計數(shù)控制模塊的時序進行了設(shè)計,設(shè)計了端口讀寫控制器的內(nèi)部結(jié)構(gòu)以及其讀寫控制的功能,設(shè)計的定時器/計數(shù)器具有可重構(gòu)的功能,可以根據(jù)需要來增減定時器/計數(shù)器的數(shù)量和種類。
[1]王成福.可編程序控制器及其應(yīng)用[M].北京:機械工業(yè)出版社,2007.
[2]孫培燕,李克儉,蔡啟仲,等. FPGA數(shù)據(jù)總線寬度不相等的雙口RAM的設(shè)計[J]. 科學(xué)技術(shù)與工程,2014,35:249-253.
[3]李靜,蔡啟仲,蔣玉新,等.基于FPGA 的多操作位邏輯運算控制器的設(shè)計[J].測控技術(shù), 2015(2):81-84.
[4]李靜,蔡啟仲,張煒,等.基于FPGA的PLC輸入存儲與讀取控制器的設(shè)計[J].儀表技術(shù)與傳感器,2014(6):33-36.
[5]周曙光,李克儉,蔡啟仲,等.基于FPGA的PLC位信息輸出控制器設(shè)計[J].計算機測量與控制,2014(6):1750-1753.
[6]谷鑾,徐貴力,王友仁. FPGA動態(tài)可重構(gòu)理論及其研究進展[J]. 計算機測量與控制,2007,11:1415-S1418.
[7] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M](第2版).北京:北京航空航天大學(xué)出版社,2008.
[8] 王金明.數(shù)字系統(tǒng)設(shè)計與Verilog HDL[M](第3版).北京:電子工業(yè)出版社,2009.
Design of Parallel Operated Timer /Counter in PLC Based on FPGA
Xu Xiaoyu1,Li Kejian1,Cai Qizhong1,Pan Shaoming1,Yu Ling2
(1.Guangxi University of Technology,Liuzhou545006,China;2.Lushan College,Guangxi University of Science and Technology, Liuzhou545616, China)
PLC system based on ARM and FPGA construction, analysis the functional requirements of the PLC to the timer / counter, design can be executed in parallel timer / counter, construct the timer / counter. And shared with a single port read write data communication controller and FPGA as the central controller, timer / counter for internal work is independent of each other, parallel work. And through the timer / counter instruction operation more efficient by the use of memory address mapping. The communication between the central controller and timer / counter is designed, and the control and testing of the timer / counter is convenient. Through the simulation test, the timer / counter can satisfy the basic function of PLC timer / counter, and achieve the design requirements of the stability of timing / counting.
PLC system; timer / counter; parallel operated; FPGA; communication format
2015-09-22;
2015-11-09。
廣西科學(xué)基金項目(桂科自2014GXNSFA118392);廣西教育廳科研項目(2013LX092)。
徐曉宇(1988-),男,河北唐山人,碩士研究生,主要從事嵌入式系統(tǒng)與自動化裝置方向的研究。
李克儉(1962-),女,湖北武漢人,教授,高級工程師,主要從事電力電子技術(shù)與自動化裝置方向的研究。
1671-4598(2016)01-0182-05
10.16526/j.cnki.11-4762/tp.2016.01.051
TP332
A