一種在fpga平臺(tái)實(shí)現(xiàn)plc控制的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于微處理器控制技術(shù)領(lǐng)域,具體是一種在FPGA平臺(tái)實(shí)現(xiàn)PLC控制的方法 及裝置。
【背景技術(shù)】
[0002] 可編程邏輯控制器PLC(Programmable Logic Controller)已被廣泛應(yīng)用于制造 系統(tǒng)多年,傳統(tǒng)硬PLC經(jīng)過(guò)幾十年的發(fā)展,已經(jīng)成為一項(xiàng)成熟技術(shù),它以其高速度、高性能、 高可靠性在工業(yè)控制領(lǐng)域得到了廣泛的應(yīng)用。但是,傳統(tǒng)硬PLC有很大的缺點(diǎn):生產(chǎn)廠商之 間的產(chǎn)品相互不兼容,缺少明確一致的標(biāo)準(zhǔn),難以構(gòu)建開(kāi)放的硬件體系結(jié)構(gòu);各廠商產(chǎn)品的 編程方法差別很大,技術(shù)專有性較強(qiáng),工作人員必須經(jīng)過(guò)較長(zhǎng)時(shí)間的專業(yè)培訓(xùn)才能掌握某 一種產(chǎn)品的編程方法;傳統(tǒng)PLC的生產(chǎn)被幾家廠商所壟斷,導(dǎo)致PLC價(jià)格昂貴。為了改善傳統(tǒng) 硬PLC的缺點(diǎn)軟PLC誕生了,軟PLC是基于IPC或EPC的開(kāi)放結(jié)構(gòu)的控制系統(tǒng)。它具有硬PLC的 功能、開(kāi)放的體系結(jié)構(gòu)、遵循國(guó)際工業(yè)標(biāo)準(zhǔn)和事實(shí)上的工業(yè)標(biāo)準(zhǔn)(如IEC61131 -3標(biāo)準(zhǔn)和IEC 61491標(biāo)準(zhǔn))、能充分利用PC機(jī)的資源、更強(qiáng)的數(shù)據(jù)處理能力、友好的人機(jī)界面等特點(diǎn)。軟PLC 利用軟件技術(shù)可將標(biāo)準(zhǔn)的工業(yè)PC轉(zhuǎn)換成全功能的PLC過(guò)程控制器。軟PLC可綜合計(jì)算機(jī)和 PLC的開(kāi)關(guān)量控制、模擬量控制、數(shù)學(xué)運(yùn)算、數(shù)值處理、通信網(wǎng)絡(luò)等功能,通過(guò)一個(gè)多任務(wù)控 制內(nèi)核,可提供強(qiáng)大的指令集、準(zhǔn)確的掃描周期、可靠的操作和連接各種I/O系統(tǒng)及網(wǎng)絡(luò)的 開(kāi)放式結(jié)構(gòu)。軟PLC提供與硬PLC同樣的功能,同時(shí)具備了PC環(huán)境的各種優(yōu)點(diǎn),軟PLC相對(duì)傳 統(tǒng)PLC具有很多優(yōu)勢(shì)。但是,軟PLC有一個(gè)致命的缺點(diǎn):軟PLC是一種用軟件模擬實(shí)現(xiàn)傳統(tǒng)硬 件PLC控制功能的控制裝置,這導(dǎo)致軟PLC的實(shí)時(shí)性大不如傳統(tǒng)硬PLC,在很多高速工業(yè)控制 領(lǐng)域,軟PLC無(wú)法滿足實(shí)時(shí)性要求。
【發(fā)明內(nèi)容】
[0003] 針對(duì)現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明提供一種在FPGA平臺(tái)實(shí)現(xiàn)PLC控制的方法及裝置,該 方法克服軟PLC實(shí)時(shí)性低的缺點(diǎn),將符合IEC61131-3標(biāo)準(zhǔn)的嵌入式PLC嵌入到FPGA平臺(tái)上, 提高了 PLC的實(shí)時(shí)性和靈活性;本裝置利用FPGA可以并行執(zhí)行程序的特性,使得FPGA-PLC可 以串彳丁和并彳丁混合執(zhí)彳丁PLC程序以大幅提尚PLC的實(shí)時(shí)性。
[0004] 實(shí)現(xiàn)本發(fā)明目的的技術(shù)方案是:
[0005] -種在FPGA平臺(tái)實(shí)現(xiàn)PLC控制的方法,包括如下步驟:
[0006] 1)生成PLC梯形圖;
[0007] 2)生成IEC61131-3標(biāo)準(zhǔn)的結(jié)構(gòu)化文本文件;
[0008] 3)確定PLC每行結(jié)構(gòu)化文本中的邏輯依賴關(guān)系;
[0009] 分析步驟2得到的結(jié)構(gòu)化文本文件,得到PLC邏輯間的依賴關(guān)系;
[0010] 4)建立FPGA進(jìn)程的并發(fā)掃描模型;
[0011] 由步驟3產(chǎn)生的依賴關(guān)系得到FPGA進(jìn)程的并發(fā)掃描模型;
[0012] 5)實(shí)現(xiàn)結(jié)構(gòu)化文本到FPGA轉(zhuǎn)換;
[0013]根據(jù)步驟4的并發(fā)掃描模型實(shí)現(xiàn)結(jié)構(gòu)化文本到FPGA轉(zhuǎn)換;
[0014] 6)綜合生成FPGA固件;
[0015]使用FPGA工具集將步驟5)中聯(lián)合用FPGA模塊實(shí)現(xiàn)的IEC61131-3基本功能模塊庫(kù) 進(jìn)行
[0016] 綜合生成FPGA固件。
[0017] 步驟3)中依賴關(guān)系的定義:如果B(邏輯算術(shù)表達(dá)式)的輸入?yún)?shù)包含A(邏輯算術(shù) 表達(dá)式)的輸出參數(shù),那么B依賴于A,即A的輸出會(huì)影響B(tài)的輸出。掃描結(jié)構(gòu)化文本文件中所 有邏輯算術(shù)表達(dá)式語(yǔ)句就可得到邏輯算術(shù)表達(dá)式間的依賴關(guān)系,即PLC邏輯間的依賴關(guān)系:
[0018] Y1=X1 OR X2 (1)
[0019] Y2 = Y1 AND Χ3 (2)
[0020] Υ3=Χ2 OR Υ2 OR Χ4 (3)
[0021] 式中:(1)(2)(3)是抽象出來(lái)的3行結(jié)構(gòu)化文本邏輯算術(shù)表達(dá)式,(1)(2)(3)的'=' 左邊Y1、Y2、Y3表示的是輸出變量,'='右邊乂1、乂2、¥1、乂3、乂2、¥2、乂4表示的是輸入變量,(? 邏輯或運(yùn)算符、AND是邏輯與運(yùn)算符;
[0022] 每次提取結(jié)構(gòu)化文本文件中的一行邏輯算術(shù)表達(dá)式的輸入和輸出變量,每提取一 行邏輯算術(shù)表達(dá)式的輸入和輸出變量,就給新的輸入和輸出變量分配一個(gè)初始值為1的計(jì) 數(shù)器,通過(guò)該計(jì)數(shù)器的數(shù)值大小,來(lái)確定結(jié)構(gòu)化文本中的不同邏輯算術(shù)表達(dá)式之間的依賴 關(guān)系,第一次提取式(1)的輸入變量是:XI、X2,輸出變量是:Y1。因?yàn)槊啃羞壿嬎阈g(shù)表達(dá)式的 輸入變量只用一次,而輸出變量每次都要用,所以將Y1放到關(guān)鍵詞集合(關(guān)鍵詞集合就是邏 輯算術(shù)表達(dá)式的輸出變量的集合,后面統(tǒng)一稱作關(guān)鍵詞)中保存起來(lái),剛開(kāi)始關(guān)鍵詞集合為 空,
[0023]初始化:
[0024] Yl_Count = l,
[0025] Xl_Count = 1,
[0026] X2_Count = 1,
[0027] 這三個(gè)關(guān)鍵詞計(jì)數(shù)器值,就可以計(jì)算當(dāng)前行邏輯算術(shù)表達(dá)式ID(邏輯算術(shù)表達(dá)式 的編號(hào)值)的值,下面給出下面ID的計(jì)算公式:
[0028] ID = Yx_Count=MAX{Xl_Count,. . . ,Xn_Count} (4)
[0029] 式中,ID:當(dāng)前行邏輯算術(shù)表達(dá)式的編號(hào)值;Yx_Count:中的x代表1至Ijn的一個(gè)數(shù) 字;Xl_Count, · · ·,Xn_Count:代表輸入關(guān)鍵詞計(jì)數(shù)器的值;MAX{Xl_Count, · · ·,Xn_ Count}:中的MAX表示取出所有的關(guān)鍵詞計(jì)數(shù)值的最大值;
[0030] 用公式(4)計(jì)算:
[0031 ] ID = Yx_Count =MAX{Xl_Count,X2_Count} =MAX{ 1,1} = 1,所以第一行邏輯算術(shù) 表達(dá)式的ID = 1,此時(shí)可以保存式(1)的ID = 1,第二次提取式(2)關(guān)鍵詞時(shí),根據(jù)前面依賴的 定義,比較的是式(2)的輸入關(guān)鍵詞是否包含式(1)的輸出關(guān)鍵詞,由于式(1)的輸出關(guān)鍵詞 都放到了關(guān)鍵詞集合中,所以只需要提取式(2)的輸入關(guān)鍵詞和關(guān)鍵詞集合中保存的關(guān)鍵 詞比較,看式(2)的輸入關(guān)鍵詞是否包含有關(guān)鍵詞集合中的關(guān)鍵詞,如果有則表示有依賴關(guān) 系,現(xiàn)在關(guān)鍵詞集合已經(jīng)有一個(gè)關(guān)鍵詞Y1,式(2)的輸入關(guān)鍵詞包含關(guān)鍵詞集合中的Y1,所 以有依賴關(guān)系,此時(shí)需要用Yl_Count+l的值來(lái)代替Yl_Count的值來(lái)計(jì)算的_ID,這樣能保證 當(dāng)前行邏輯算術(shù)表達(dá)式計(jì)算出來(lái)的ID值比它所依賴的的ID值至少大1,從而保證按照依賴 的順序執(zhí)行;
[0032]下面用公式(4)來(lái)計(jì)算式(2)的ID值,提取式(2)的關(guān)鍵詞¥2、¥1、乂3,因?yàn)椋?已經(jīng)存 在于關(guān)鍵詞集合中,說(shuō)明有依賴關(guān)系,所以用Yl_Count+l來(lái)代替Yl_Count的值來(lái)計(jì)算當(dāng)前 行的ID值,ID = Y2_Count=MAX{Yl_Count+l,X3_Count} = {2,1} = 2,此時(shí)可以保存式(2)的 ID = 2,同理按照式(2)的計(jì)算過(guò)程可以計(jì)算出式(3)的ID = 3,用ID值就可以直接通過(guò)ID數(shù) 值確定每一行邏輯算術(shù)表達(dá)式的依賴關(guān)系:(1) ID = 1、(2) ID = 2、(3) ID = 3說(shuō)明邏輯算術(shù)表 達(dá)式執(zhí)行順序是(1) - (2) - (3)按順序執(zhí)行的,執(zhí)行順序是按照ID值從小到大的順序來(lái)執(zhí) 行。
[0033]步驟4)中,每一行邏輯算術(shù)表達(dá)式會(huì)映射到到一個(gè)單獨(dú)的FPGA進(jìn)程。每一個(gè)進(jìn)程 開(kāi)始處都是一個(gè)關(guān)于當(dāng)前進(jìn)程組號(hào)的判斷,只有在當(dāng)前進(jìn)程組號(hào)等于某個(gè)常數(shù)時(shí)該進(jìn)程才 開(kāi)始有效工作,該常數(shù)被視為一個(gè)ProcessJD,決定了一個(gè)FPGA進(jìn)程何時(shí)被執(zhí)行,本設(shè)計(jì)稱 之為進(jìn)程組序號(hào)值。ProcessJD和ID在數(shù)值上是相等的,只要ID確定了,ProcessJD就確定 了。Pr 〇CeSS_ID值相同的被視為同一進(jìn)程組,同一進(jìn)程組內(nèi)的進(jìn)程并行工作,也就是說(shuō) Process_ID值相同的會(huì)被同時(shí)并行執(zhí)行;
[0034]為了保證能夠正確合理的按照順序并發(fā)執(zhí)行進(jìn)程,使用一個(gè)單獨(dú)的進(jìn)程來(lái)實(shí)現(xiàn)上 述進(jìn)程組管理功能。此進(jìn)程主要對(duì)當(dāng)前進(jìn)程組號(hào)不停的循環(huán)遞增:程當(dāng)FPGA復(fù)位時(shí)cur_ pro_no(當(dāng)前進(jìn)程組號(hào))值為0,否則每當(dāng)上一個(gè)進(jìn)程組結(jié)束時(shí)cur_pro_no就自增,直至到達(dá) ma X_pr〇_n〇(最大進(jìn)程組號(hào))后回到0并重新循環(huán),F(xiàn)PGA-PLC的一個(gè)完整掃描周期等于所有 進(jìn)程組都被執(zhí)行的時(shí)間,通過(guò)這種進(jìn)程組號(hào)順序循環(huán)遞增的方式來(lái)實(shí)現(xiàn)PLC的順序并發(fā)掃 描執(zhí)行程序的功能。進(jìn)程組號(hào)遞增到的值和其中Pr 〇cesS_ID(數(shù)值上和ID值相等)值相等 時(shí),對(duì)應(yīng)的進(jìn)程就會(huì)被執(zhí)行。如果有多行進(jìn)程的ProcessJD值和進(jìn)程組遞增到的值相同, 那么這幾行ProcessJD值相同的進(jìn)程就被并行執(zhí)行。
[0035] 步驟5)中,結(jié)構(gòu)化文本使用布爾邏輯表達(dá)式和模塊邏輯表達(dá)式這兩種表達(dá)式,因 此轉(zhuǎn)化工作也按這兩種情況進(jìn)行;
[0036] 布爾邏輯表達(dá)式情況下只需把結(jié)構(gòu)化文本中的布爾邏輯運(yùn)算表達(dá)式符直接替換 為Verilog語(yǔ)言的邏輯運(yùn)算符即可,下表就是邏輯運(yùn)算符替換表,
[0037]
[0038] 結(jié)構(gòu)化文本中的模塊邏輯表達(dá)式被轉(zhuǎn)化為IEC61131-3基礎(chǔ)庫(kù)中某模塊的一個(gè)實(shí) 例,并通過(guò)線網(wǎng)傳遞所需的參數(shù),例如結(jié)構(gòu)化文本中計(jì)數(shù)器模塊ΤΟΝΟ (IN: = NOT (X1) AND (m0 OR x0),PT: =T#2000000ns)轉(zhuǎn)換Verilog語(yǔ)言就是TON T0N0(sys_clk,sys_rstn,T0N0_ IN0_WIRE,T0N0_0UT0_WIRE);其中Τ0Ν0是TON模塊的一個(gè)實(shí)例;
[0039] 此根據(jù)步驟4的并發(fā)掃描模型和步驟5結(jié)構(gòu)化文本到Verilog HDL規(guī)則,實(shí)現(xiàn)結(jié)構(gòu) 化文本到FPGA的轉(zhuǎn)換;
[0040] 步驟6)中使用FPGA工具集將步驟5)中聯(lián)合用FPGA模塊實(shí)現(xiàn)的IEC61131-3基本功 能模塊庫(kù)進(jìn)行綜合生成FPGA固件;
[00411 一種在FPGA平臺(tái)實(shí)現(xiàn)PLC控制裝置,包括輸出部分、芯片部分、輸入部分、端口部分 和串口部分;
[0042]芯片部分與輸