官术网_书友最值得收藏!

3.2 程序組織單元

程序組織單元(Program Organization Unit,POU)是IEC 61131-3用戶程序執行模型里定義的一個單元。一個POU包括一個本地變量表和一個算法(也就是一系列編碼或邏輯),它是構成用戶程序的基本單元。NJ系列CPU單元里運行的用戶程序是由POU組合而成的。

POU按功能分為程序、功能塊和功能。POU的標準部分(如標準功能塊、標準功能等)由控制器制造商提供。用戶根據POU的定義設計用戶程序的POU,對POU調用和執行。

978-7-111-44136-6-Chapter03-31.jpg

圖3-23 層次關系

一個程序對應一個主路徑,這是形成算法的POU的主要類型。可以將任何指令、功能、或功能塊放置到程序算法中。

功能塊可以輸出不同的值,即使有相同的輸入。功能塊可以被程序或另一個功能塊調用。

在相同的輸入下,功能總是輸出相同的值。功能可以被程序、另一個功能或功能塊調用。

POU由這三種單元組合而成,可以生成許多POU。程序要分配給任務才能執行。

程序、功能塊、功能與任務的層次關系如圖3-23所示。

3.2.1 程序

程序由本地變量表和算法組成。在程序的算法里,可以使用任何功能塊和功能。不能從其他POU中調用程序。當程序所在的任務執行時,程序才能執行。一個任務可以分配128個程序。

圖3-24所示為程序結構。

在任務里,為所有的程序設置執行順序。在Sysmac Studio“任務設置”下的“程序分配設置”指定這個順序。

所有的程序在本地變量(也就是內部變量)中有下面3個系統定義的變量。

978-7-111-44136-6-Chapter03-32.jpg

圖3-24 程序結構

PFirstRunMode:第一次運行周期標志,BOOL型,只讀。從PROGRAM模式轉為RUN模式時,當CPU單元開始運行,只在第一次運行周期為TRUE,其他運行周期為FALSE,通常使用這個標志完成初始化處理。

PPRGER:指令錯誤標志,BOOL型,可讀可寫。當出現指令錯誤時,變為TRUE并保持。當這個標志變為TRUE時,一直保持直到程序將它變為FALSE。

PCY:進位標志,BOOL型,只讀。某些指令可以修改這個標志。

3.2.2 功能塊

功能塊作為一種程序組織單元,需要設置名稱,而且不同的功能塊要設置不同的名稱。功能塊具有靜態變量(即具有記憶功能),要占用內存區。當需要對一些狀態進行記憶,比如定時器、計數器指令,則使用功能塊。功能塊的輸出與內部變量和外部變量的狀態有關,因此,即使相同的輸入也能產生不同的輸出結果。

功能塊分為標準功能塊和用戶定義功能塊。標準功能塊由系統預先定義,可由其他功能塊和程序調用。用戶定義功能塊則由用戶根據需要自行創建,可以像標準功能塊一樣使用。

1.功能塊結構

功能塊可以用梯形圖或ST來表示。在梯形圖中,功能塊用一個方框來表示,圖3-25所示為梯形圖表示的一個功能塊。

功能塊結構如圖3-26所示。

978-7-111-44136-6-Chapter03-33.jpg

圖3-25 梯形圖表示的一個功能塊

978-7-111-44136-6-Chapter03-34.jpg

圖3-26 功能塊結構

功能塊定義由本地變量表和算法組成,如圖3-27所示。

功能塊各組成部分說明如下:

(1)功能塊名稱或指令名稱

生成功能塊時,在功能塊定義時,分配的功能塊名稱或指令名稱

(2)例程名稱

給程序中的功能塊例程一個例程名稱,以便能夠管理它。

(3)算法

可以用梯形圖或ST編寫一個算法。在算法中,可以使用任何指令、用戶定義的功能,或用戶定義的功能塊。

(4)本地變量表

本地變量表用來定義輸入變量、輸出變量、輸入-輸出變量、內部變量和外部變量。

(5)參數

輸入變量的輸入參數:當功能塊執行開始時,輸入參數把值傳給功能塊中的輸入變量。輸入參數可以是一個變量或常數。

978-7-111-44136-6-Chapter03-35.jpg

圖3-27 功能塊定義

輸出變量的輸出參數:當功能塊執行完畢后,輸出參數接收功能塊中輸出變量的值。

輸入-輸出變量共享的輸入-輸出參數:在功能塊中改變輸入-輸出參數的值,同一參數既可以用作輸入也可以用作輸出。

2.功能塊變量的指定

功能塊變量的指定如圖3-28所示。

978-7-111-44136-6-Chapter03-36.jpg

圖3-28 功能塊變量的指定

功能塊變量的說明見表3-8。

3-8 功能塊變量的說明

978-7-111-44136-6-Chapter03-37.jpg

(續)

978-7-111-44136-6-Chapter03-38.jpg

3.功能塊調用

功能塊既可用梯形圖,也可用ST調用。

從ST調用功能塊的方法如下

978-7-111-44136-6-Chapter03-39.jpg

輸入賦值使用“:=”;輸出賦值使用“=>”;輸入-輸出賦值時兩種都可以用,一般用“:=”。

圖3-29 所示為從POU調用功能塊的梯形圖。

ABC:功能塊例程名稱。

A和B:功能塊的輸入或輸入-輸出變量名稱。

x1和x2:調用功能塊的POU的輸入或輸入-輸出參數。

C:功能塊的輸出變量。

y1:調用功能塊的POU的輸出參數。

用ST調用功能塊的方法有兩種。

1)給出功能塊的變量名程和調用功能塊的POU的參數名程

ABC(A:=x1,B:=x2,C=>y1);

●括號內參數和返回值的順序任意。

●可以省略輸入變量的名稱和輸入參數名稱。如果省略這些名稱,上一次調用時分配給輸入變量的值又被分配給輸入變量。如果第一次調用功能塊,輸入變量置為它們的初始值。

●可以省略輸出變量的名稱和輸出參數名稱。如果它們被省略,輸出變量的值不被分配。

978-7-111-44136-6-Chapter03-40.jpg

圖3-29 從POU調用功能塊的梯形圖

2)省略功能塊的變量名稱,給出調用功能塊的POU的參數名稱

ABC(x1,x2,y1);

參數的順序基于功能塊定義。順序與功能塊本地變量定義相同,從頂部到底部。

ST調用功能塊的各種方式見表3-9。

3-9 ST調用功能塊的各種方式

978-7-111-44136-6-Chapter03-41.jpg

圖3-30所示為調用功能塊的梯形圖。

用ST調用此功能塊,兩種編寫方法如下。

方法1:

978-7-111-44136-6-Chapter03-42.jpg

方法2:

978-7-111-44136-6-Chapter03-43.jpg

978-7-111-44136-6-Chapter03-44.jpg

圖3-30 調用功能塊的梯形圖

4.功能塊的創建

除了系統提供的標準功能塊外,用戶可以創建自定義的功能塊,由程序或其他功能塊來調用。

下面創建一個時鐘脈沖發生器的功能塊,輸入參數為接通時間和斷開時間,根據輸入參數輸出不同占空比的脈沖。

操作步驟如下:

1)如圖3-31所示,右擊多視圖瀏覽器中“編程-POUs-程序”下的“功能塊”,從菜單中選擇“添加-梯形圖”,會默認生成一個叫做功能塊0的功能塊,如圖3-32所示。功能塊可以用梯形圖或ST來編寫,這里選用梯形圖。

978-7-111-44136-6-Chapter03-45.jpg

圖3-31 添加功能塊

978-7-111-44136-6-Chapter03-46.jpg

圖3-32 生成功能塊0

2)雙擊功能塊0,進入編程界面,上半部為變量表,有“內部”、“輸入/輸出”“外部”3個變量表,如圖3-33所示。

在內部變量表添加兩個BOOL變量a和b,如圖3-34所示。在輸入/輸出變量表添加timeon、timeoff、pulse、in 4個變量,如圖3-35所示。

3)在功能塊0的編程界面輸入梯形圖,如圖3-36所示。

BOOL變量in為控制輸入,控制時鐘脈沖的啟動/停止。

這樣就創建了一個自定義功能塊。

978-7-111-44136-6-Chapter03-47.jpg

圖3-33 功能塊0編程界面

978-7-111-44136-6-Chapter03-48.jpg

圖3-34 內部變量表

978-7-111-44136-6-Chapter03-49.jpg

圖3-35 輸入/輸出變量表

978-7-111-44136-6-Chapter03-50.jpg

圖3-36 功能塊0的梯形圖

創建自定義功能塊后,就可以在編程時調用它。現在回到主程序下,對內部變量進行定義,如圖3-37所示。

978-7-111-44136-6-Chapter03-51.jpg

圖3-37 程序中內部變量定義

輸入調用功能塊的梯形圖程序,輸入到功能塊時,鍵入“功”,就發現剛才定義的功能塊0已經存在了,如圖3-38所示。

完整的調用功能塊梯形圖如圖3-39所示。

timeondata、timeoffdata和start為功能塊的輸入參數,testp為輸出參數。其中,timeondata為脈沖ON的時間,timeoffdata為脈沖OFF的時間,start控制脈沖發生器的啟動或停止,testp為脈沖發生器的輸出。

timeondata、timeoffdata的初值設為10,這是個振蕩周期2s的時鐘脈沖,開1s關1s,在線仿真調試后,如圖3-40所示。

可以通過更改timeondata、timeoffdata的值,改變脈沖的占空比。在監視選項卡中修改,如圖3-41所示,以上兩個參數改為30、10后,就變成一個4s周期的脈沖信號,其中導通3s、關斷1s。

978-7-111-44136-6-Chapter03-52.jpg

圖3-38 輸入功能塊0

978-7-111-44136-6-Chapter03-53.jpg

圖3-39 調用功能塊梯形圖

978-7-111-44136-6-Chapter03-54.jpg

圖3-40 仿真調試

978-7-111-44136-6-Chapter03-55.jpg

圖3-41 結果顯示

3.2.3 功能

功能(FUN)也是一種程序組織單元,但與功能塊不同,功能不需要設置名稱,因此輸入簡單。功能沒有靜態變量,即沒有記憶,不占用內存,當只需要簡單的操作運算不需要對狀態進行記憶的時候使用功能。功能一般只要輸入相同的值就會輸出一樣的結果。

功能分為標準功能和用戶定義功能。標準功能由系統預先定義,可由其他功能、功能塊和程序調用。用戶定義功能由用戶根據需要自行創建,可以像標準功能一樣使用。

978-7-111-44136-6-Chapter03-56.jpg

圖3-42 梯形圖表示的一個功能

978-7-111-44136-6-Chapter03-57.jpg

圖3-43 功能結構

978-7-111-44136-6-Chapter03-58.jpg

圖3-44 功能定義

1.功能結構

功能可以用梯形圖或ST來表示。在梯形圖中,功能表示為一個方框,圖3-42所示為梯形圖表示的一個功能。

功能結構如圖3-43所示。

功能定義由本地變量表和算法組成,如圖3-44所示。

功能各組成部分說明如下:

(1)功能名稱或指令名稱

生成功能時,在功能定義中分配功能名稱或指令名稱。

(2)例程名稱

功能沒有例稱名稱。

(3)算法

可以使用梯形圖或ST為算法編程。在功能的算法里,可以使用任何指令、功能或用戶定義的功能。不能使用任何FB指令或用戶定義的功能塊。也不能使用微分指令,例如,RTRIG或UP。

(4)本地變量表

本地變量表用來定義輸入變量、輸出變量、輸入-輸出變量、內部變量和外部變量。

(5)參數

輸入變量的輸入參數:當功能執行開始時,輸入參數把值傳給功能中的輸入變量,輸入參數可以是一個變量或常數。

輸出變量的輸出參數:當功能執行完畢后,輸出參數接收功能中輸出變量的值。

輸入-輸出變量共享的輸入-輸出參數:輸入-輸出參數的值在功能內改變,同一變量既用在輸入也用在輸出。

2.功能變量的指定

功能變量的指定如圖3-45所示。

978-7-111-44136-6-Chapter03-59.jpg

圖3-45 功能變量的指定

功能變量的說明見表3-10。

3-10 功能變量的說明

978-7-111-44136-6-Chapter03-60.jpg

(續)

978-7-111-44136-6-Chapter03-61.jpg

3.功能調用

功能既可用梯形圖,也可用ST調用。

從ST調用功能的方法如下

978-7-111-44136-6-Chapter03-62.jpg

978-7-111-44136-6-Chapter03-63.jpg

圖3-46 用梯形圖調用功能

圖3-46 所示為用梯形圖調用功能。

MyFUN:功能名稱。

x0:設定是否調用功能。

A和B:功能的輸入變量名稱。

x1和x2:功能的輸入參數。

C:功能的輸出變量。

y1:功能返回值的存儲位置。

y2:功能的輸出參數。

用ST調用功能的方法有兩種。

1)給出功能的變量名程和調用功能的POU的參數名程

IF(x0=TRUE)THEN

y1:=MyFUN(A:=x1,B:=X2,C=>y2);

ENDIF

●參數的順序任意。

●可以省略輸入變量的名稱和輸入參數名稱。如果省略這些名稱,輸入變量置為它們的初始值。

●也可以省略EN,如果省略,EN分配的值為TRUE。

2)省略功能的變量名稱,給出調用功能的POU的參數名稱

IF(x0=TRUE)THEN

Y1:=MyFUN(x1,x2,y2);

ENDIF

參數的順序基于功能塊定義。順序與功能塊本地變量定義相同,從頂部到底部。

ST調用功能的各種方式見表3-11。

3-11 ST調用功能的各種方式

978-7-111-44136-6-Chapter03-64.jpg

圖3-47 所示為梯形圖調用功能。

978-7-111-44136-6-Chapter03-65.jpg

圖3-47 梯形圖調用功能

用ST調用此功能,兩種編寫方法如下。

方法1:

978-7-111-44136-6-Chapter03-66.jpg

978-7-111-44136-6-Chapter03-67.jpg

方法2:

978-7-111-44136-6-Chapter03-68.jpg

4.功能的創建

除了系統提供的標準功能外,用戶可以創建自定義的功能,用戶定義的功能同樣可由程序、功能塊、功能來調用。

978-7-111-44136-6-Chapter03-69.jpg

圖3-48 添加功能

978-7-111-44136-6-Chapter03-70.jpg

圖3-49 生成功能0

下面創建一個用戶定義功能,將角度轉換為弧度,輸入參數為角度數,輸出參數為弧度數。

操作步驟如下:

1)如圖3-48所示,右擊多視圖瀏覽器中“編程-POUs”下的“功能”,從菜單中選擇“添加-梯形圖”,會默認生成一個叫功能0的功能,如圖3-49所示。功能可以用梯形圖或ST來編寫,這里選用梯形圖。

2)雙擊功能0,進入編程界面,如圖3-50所示,上半部為變量表,有“內部”、“輸入/輸出”、“外部”和“返回值”4個變量表。

在內部變量表添加一個LREAL變量internals1,如圖3-51所示。在輸入/輸出變量表添加兩個LREAL變量deg和rag,deg為輸入變量,rag為輸出變量,如圖3-52所示。

978-7-111-44136-6-Chapter03-71.jpg

圖3-50 功能0編程界面

978-7-111-44136-6-Chapter03-72.jpg

圖3-51 內部變量表

978-7-111-44136-6-Chapter03-73.jpg

圖3-52 輸入/輸出變量表

3)在功能0的編程界面輸入梯形圖,如圖3-53所示。

這樣就創建了一個用戶定義功能。

創建自定義功能后,就可以在編程時調用它。現在回到主程序下,對內部變量進行定義,如圖3-54所示。

978-7-111-44136-6-Chapter03-74.jpg

圖3-53 功能0編程

編寫調用功能的梯形圖程序,當輸入到功能時,鍵入“功”,就發現剛才定義的功能0已經存在了,如圖3-55所示。

完整的調用功能的梯形圖如圖3-56所示。

degtest為角度,是功能的輸入參數。radtest為弧度,是功能的輸出參數。

開始仿真測試,對a選擇設置,如圖3-57所示。

978-7-111-44136-6-Chapter03-75.jpg

圖3-54 程序中內部變量定義

978-7-111-44136-6-Chapter03-76.jpg

圖3-55 輸入功能0

978-7-111-44136-6-Chapter03-77.jpg

圖3-56 調用功能的梯形圖

978-7-111-44136-6-Chapter03-78.jpg

圖3-57 仿真測試

如圖3-58所示,對degtest輸入180,則radtest為3.141592,結果正確。

978-7-111-44136-6-Chapter03-79.jpg

圖3-58 顯示結果

主站蜘蛛池模板: 类乌齐县| 闽清县| 安顺市| 富川| 肃北| 邢台市| 昌乐县| 宿松县| 平陆县| 蕉岭县| 瓮安县| 恩施市| 稷山县| 永仁县| 黔江区| 政和县| 平陆县| 铜梁县| 盐城市| 安西县| 贵州省| 呼玛县| 额尔古纳市| 洮南市| 都昌县| 富裕县| 商丘市| 冕宁县| 道孚县| 太谷县| 大渡口区| 淅川县| 伊春市| 壤塘县| 萝北县| 中西区| 五莲县| 苗栗县| 辽源市| 平凉市| 民丰县|