出部分、輸入部分、端口部分和串口部分分別連接。
[0043] 輸出部分、包括輸出端口、繼電器隔離電路、輸出光親合隔離電路,輸出端口、繼電 器隔離電路、輸出光耦合隔離電路順序連接,輸入光耦合隔離電路還與芯片部分的FPGA芯 片相連接;
[0044] 芯片部分、包括FPGA芯片;
[0045] 輸入部分、包括輸入端口,輸入光親合隔離電路,輸入端口與輸入光親合隔離電路 相連接,輸入光耦合隔離電路還與芯片部分的FPGA芯片相連接;
[0046] 端口部分、包括調(diào)試端口;
[0047]串口部分、包括通信串口;
[0048] 有益效果:
[0049]本發(fā)明提供了一種在FPGA平臺實現(xiàn)PLC控制的方法及裝置,該方法不但能正確實 現(xiàn)PLC的輸入輸出邏輯,而且還可以在FPGA平臺并行運(yùn)行,從根本上改變了傳統(tǒng)PLC的只能 順序掃描執(zhí)行的方式,PLC執(zhí)行的時間與進(jìn)程的大小沒有關(guān)系,只和進(jìn)程有依賴層次有關(guān) 系,F(xiàn)PGA-PLC執(zhí)行效率是傳統(tǒng)PLC無法比擬的;該裝置將IEC-61131-3標(biāo)準(zhǔn)應(yīng)用在了 FPGA-PLC上,克服了傳統(tǒng)PLC的封閉性和兼容性差等缺點,有利于打破高端PLC廠家壟斷局面;還 利用FPGA并行執(zhí)行的特性,使得FPGA-PLC能并行執(zhí)行PLC進(jìn)程,大幅提升了 PLC的實時性, FPGA的處理是純硬件的實現(xiàn)過程,使得FPGA-PLC系統(tǒng)具有很高的穩(wěn)定性。
【附圖說明】
[0050] 圖1本裝置結(jié)構(gòu)框圖
【具體實施方式】
[0051] 以下結(jié)合附圖和實施例對本
【發(fā)明內(nèi)容】
作進(jìn)一步的闡述,但不是對本發(fā)明的限定
[0052] 實施例
[0053] -種在FPGA平臺實現(xiàn)PLC控制的方法,包括如下步驟:
[0054] 1)生成PLC梯形圖;
[0055] 2)生成IEC61131-3標(biāo)準(zhǔn)的結(jié)構(gòu)化文本文件;
[0056] 3)確定PLC每行結(jié)構(gòu)化文本中的邏輯依賴關(guān)系;
[0057] 分析步驟2得到的結(jié)構(gòu)化文本文件,得到PLC邏輯間的依賴關(guān)系;
[0058] 4)建立FPGA進(jìn)程的并發(fā)掃描模型;
[0059] 由步驟3產(chǎn)生的依賴關(guān)系得到FPGA進(jìn)程的并發(fā)掃描模型;
[0060] 5)實現(xiàn)結(jié)構(gòu)化文本到FPGA轉(zhuǎn)換;
[0061 ]根據(jù)步驟4的并發(fā)掃描模型實現(xiàn)結(jié)構(gòu)化文本到FPGA轉(zhuǎn)換;
[0062] 6)綜合生成FPGA固件;
[0063]使用FPGA工具集將步驟5)中聯(lián)合用FPGA模塊實現(xiàn)的IEC61131-3基本功能模塊庫 進(jìn)行
[0064] 綜合生成FPGA固件。
[0065]步驟3)中依賴關(guān)系的定義:如果B(邏輯算術(shù)表達(dá)式)的輸入?yún)?shù)包含A(邏輯算術(shù) 表達(dá)式)的輸出參數(shù),那么B依賴于A,即A的輸出會影響B(tài)的輸出。掃描結(jié)構(gòu)化文本文件中所 有邏輯算術(shù)表達(dá)式語句就可得到邏輯算術(shù)表達(dá)式間的依賴關(guān)系,即PLC邏輯間的依賴關(guān)系:
[0066] Y1=X1 OR X2 (1)
[0067] Y2 = Y1 AND Χ3 (2)
[0068] Υ3=Χ2 OR Υ2 OR Χ4 (3)
[0069] 式中:(1)(2)(3)是抽象出來的3行結(jié)構(gòu)化文本邏輯算術(shù)表達(dá)式,(1)(2)(3)的'=' 左邊Y1、Y2、Y3表示的是輸出變量,'='右邊乂1、乂2、¥1、乂3、乂2、¥2、乂4表示的是輸入變量,(? 邏輯或運(yùn)算符、AND是邏輯與運(yùn)算符;
[0070] 每次提取結(jié)構(gòu)化文本文件中的一行邏輯算術(shù)表達(dá)式的輸入和輸出變量,每提取一 行邏輯算術(shù)表達(dá)式的輸入和輸出變量,就給新的輸入和輸出變量分配一個初始值為1的計 數(shù)器,通過該計數(shù)器的數(shù)值大小,來確定結(jié)構(gòu)化文本中的不同邏輯算術(shù)表達(dá)式之間的依賴 關(guān)系,第一次提取式(1)的輸入變量是:XI、X2,輸出變量是:Y1。因為每行邏輯算術(shù)表達(dá)式的 輸入變量只用一次,而輸出變量每次都要用,所以將Y1放到關(guān)鍵詞集合(關(guān)鍵詞集合就是邏 輯算術(shù)表達(dá)式的輸出變量的集合,后面統(tǒng)一稱作關(guān)鍵詞)中保存起來,剛開始關(guān)鍵詞集合為 空,
[0071]初始化:
[0072] Yl_Count = l,
[0073] Xl_Count = 1,
[0074] X2_Count = 1,
[0075] 這三個關(guān)鍵詞計數(shù)器值,就可以計算當(dāng)前行邏輯算術(shù)表達(dá)式ID(邏輯算術(shù)表達(dá)式 的編號值)的值,下面給出下面ID的計算公式:
[0076] ID = Yx_Count=MAX{Xl_Count,. . . ,Xn_Count} (4)
[0077] 式中,ID:當(dāng)前行邏輯算術(shù)表達(dá)式的編號值;Yx_Count:中的x代表1至Ijn的一個數(shù) 字;Xl_Count, · · ·,Xn_Count:代表輸入關(guān)鍵詞計數(shù)器的值;MAX{Xl_Count, · · ·,Xn_Count}: 中的MAX表示取出所有的關(guān)鍵詞計數(shù)值的最大值;
[0078]用公式(4)計算:
[0079] ID = Yx_Count =MAX{Xl_Count,X2_Count} =MAX{ 1,1} = 1,所以第一行邏輯算術(shù) 表達(dá)式的ID = 1,此時可以保存式(1)的ID = 1,第二次提取式(2)關(guān)鍵詞時,根據(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)有一個關(guān)鍵詞Y1,式(2)的輸入關(guān)鍵詞包含關(guān)鍵詞集合中的Y1,所 以有依賴關(guān)系,此時需要用Yl_Count+l的值來代替Yl_Count的值來計算的_ID,這樣能保證 當(dāng)前行邏輯算術(shù)表達(dá)式計算出來的ID值比它所依賴的的ID值至少大1,從而保證按照依賴 的順序執(zhí)行;
[0080] 下面用公式(4)來計算式(2)的ID值,提取式(2)的關(guān)鍵詞¥2、¥1、乂3,因為¥1已經(jīng)存 在于關(guān)鍵詞集合中,說明有依賴關(guān)系,所以用Yl_Count+l來代替Yl_Count的值來計算當(dāng)前 行的ID值,ID = Y2_Count=MAX{Yl_Count+l,X3_Count} = {2,1} = 2,此時可以保存式(2)的 ID = 2,同理按照式(2)的計算過程可以計算出式(3)的ID = 3,用ID值就可以直接通過ID數(shù) 值確定每一行邏輯算術(shù)表達(dá)式的依賴關(guān)系:(1) ID = 1、( 2) ID = 2、( 3) ID = 3說明邏輯算術(shù)表 達(dá)式執(zhí)行順序是(1) - (2) - (3)按順序執(zhí)行的,執(zhí)行順序是按照ID值從小到大的順序來執(zhí) 行。
[0081]步驟4)中,每一行邏輯算術(shù)表達(dá)式會映射到到一個單獨的FPGA進(jìn)程。每一個進(jìn)程 開始處都是一個關(guān)于當(dāng)前進(jìn)程組號的判斷,只有在當(dāng)前進(jìn)程組號等于某個常數(shù)時該進(jìn)程才 開始有效工作,該常數(shù)被視為一個ProcessJD,決定了一個FPGA進(jìn)程何時被執(zhí)行,本設(shè)計稱 之為進(jìn)程組序號值。ProcessJD和ID在數(shù)值上是相等的,只要ID確定了,ProcessJD就確定 了。Pr 〇CeSS_ID值相同的被視為同一進(jìn)程組,同一進(jìn)程組內(nèi)的進(jìn)程并行工作,也就是說 Process_ID值相同的會被同時并行執(zhí)行;
[0082]為了保證能夠正確合理的按照順序并發(fā)執(zhí)行進(jìn)程,使用一個單獨的進(jìn)程來實現(xiàn)上 述進(jìn)程組管理功能。此進(jìn)程主要對當(dāng)前進(jìn)程組號不停的循環(huán)遞增:程當(dāng)FPGA復(fù)位時cur_ pro_no(當(dāng)前進(jìn)程組號)值為0,否則每當(dāng)上一個進(jìn)程組結(jié)束時cur_pro_no就自增,直至到達(dá) ma X_pr〇_n〇(最大進(jìn)程組號)后回到0并重新循環(huán),F(xiàn)PGA-PLC的一個完整掃描周期等于所有 進(jìn)程組都被執(zhí)行的時間,通過這種進(jìn)程組號順序循環(huán)遞增的方式來實現(xiàn)PLC的順序并發(fā)掃 描執(zhí)行程序的功能。進(jìn)程組號遞增到的值和其中Pr 〇cesS_ID(數(shù)值上和ID值相等)值相等 時,對應(yīng)的進(jìn)程就會被執(zhí)行。如果有多行進(jìn)程的Pr〇cesS_ID值和進(jìn)程組遞增到的值相同,那 么這幾行Process_ID值相同的進(jìn)程就被并行執(zhí)行。
[0083] 步驟5)中,結(jié)構(gòu)化文本使用布爾邏輯表達(dá)式和模塊邏輯表達(dá)式這兩種表達(dá)式,因 此轉(zhuǎn)化工作也按這兩種情況進(jìn)行;
[0084] 布爾邏輯表達(dá)式情況下只需把結(jié)構(gòu)化文本中的布爾邏輯運(yùn)算表達(dá)式符直接替換 為Verilog語言的邏輯運(yùn)算符即可,下表就是邏輯運(yùn)算符替換表,
[0085]
[0086] 結(jié)構(gòu)化文本中的模塊邏輯表達(dá)式被轉(zhuǎn)化為IEC61131-3基礎(chǔ)庫中某模塊的一個實 例,并通過線網(wǎng)傳遞所需的參數(shù),例如結(jié)構(gòu)化文本中計數(shù)器模塊ΤΟΝΟ (IN: = NOT (X1) AND (m0 OR x0),PT: =T#2000000ns)轉(zhuǎn)換Verilog語言就是TON T0N0(sys_clk,sys_rstn,T0N0_ IN0_WIRE,T0N0_0UT0_WIRE);其中Τ0Ν0是TON模塊的一個實例;
[0087]此根據(jù)步驟4的并發(fā)掃描模型和步驟5結(jié)構(gòu)化文本到Verilog HDL規(guī)則,實現(xiàn)結(jié)構(gòu) 化文本到FPGA的轉(zhuǎn)換;
[0088]步驟6)中使用FPGA工具集將步驟5)中聯(lián)合用FPGA模塊實現(xiàn)的IEC61131-3基本功 能模塊庫進(jìn)行綜合生成FPGA固件;
[0089] 一種在FPGA平臺實現(xiàn)PLC控制裝置,包括輸出部分、芯片部分、輸入部分、端口部分 和串口部分;
[0090]芯片部分與輸出部分、輸入部分、端口部分和串口部分分別連接。
[0091 ]輸出部分、包括輸出端口、繼電器隔離電路、輸出光親合隔離電路,輸出端口、繼電 器隔離電路、輸出光耦合隔離電路順序連接,輸入光耦合隔離電路還與芯片部分的FPGA芯 片相連接;
[0092] 芯片部分、包括FPGA芯片;
[0093]輸入部分、包括輸入端口,輸入光親合隔離電路,輸入端口與輸入光親合隔離電路 相連接,輸入光耦合隔離電路還與芯片部分的FPGA芯片相連接;
[0094]端口部分、包括調(diào)試端口;
[0095]串口部分、包括通信串口;
[0096] 如圖1所示:
當(dāng)前第2頁
1 
2 
3