羅克韋爾(AB)PLC講解,創(chuàng)建一個新的“Add On指令”
創(chuàng)建一個新的指令的工作流程包括:
? ? ?? 預先設計或技術規(guī)格-一個小計劃將促使長久的發(fā)展。
? ? ?? 創(chuàng)建指令框架-選擇指令邏輯的語言,預/后掃描行為,版本選擇等等。
? ? ?? 指令的固定標簽結構-參數(shù)與本地標簽。很顯然,此處做的選擇在不同語言環(huán)境下會影響外觀、條件和驗證要求。
? ? ? ? ?在本次實驗中,創(chuàng)建一個常規(guī)目的指令來模擬一個帶有變量滯后和時間常數(shù)的連續(xù)過程(適用于一階滯后)。
輸入為: 信號輸入(浮點型,固有單位) 滯后時間(浮點型,秒)
時間常數(shù)(浮點型,秒)
輸出為: 信號輸出(浮點型,固有單位)
1、在下拉菜單中,右鍵單擊‘Add-On Instructions’文件夾,然后選擇‘New Add-On Instruction…’。

2. 完成所示的Add-On 指令對話框。

值得注意的是一個Add-On指令能夠用以下任何一種語言來編寫:梯形圖、功能塊或結構化文本。
3. 單擊OK完成。
4. 許多新條目出現(xiàn)在控制器項目管理器中。

5. 右擊新創(chuàng)建的Add-On指令:‘Simulation_DT_1st’,然后在下拉菜單中選擇‘Open De?nition’。

6.現(xiàn)在‘Add-On Instruction De?nition’編輯器應該可以使用。

? ‘General’選項卡包括所有在指令創(chuàng)建時首先要輸入的條目。
? 以‘Revision Note’為形式的版本信息,其形式自由并且能由用戶單獨更新和強制,沒有版本自動跟蹤機制。
? 窗口底部有許多用戶經(jīng)常使用的條目?!甃ogic’按鍵可以立即打開該指令的邏輯例程。
? ‘Data Type Size’記錄了指令數(shù)據(jù)所使用的內(nèi)存數(shù)量(以字節(jié)為單位)。
7. 單擊參數(shù)選項卡,查看指令中的參數(shù)。

通過任務的詳述說明,以下為我們所知一定包含在定義中的參數(shù)。
每個Add-On指令中‘EnableIn’和‘EnableOut’參數(shù)是預先確定而且為缺省值。‘EnableIn’由每種語言環(huán)境的特定因素決定,而且可以被用作特殊功能。這是一個高級主題,超出了本實驗范圍。‘EnableOut’通常與‘EnableIn’的狀態(tài)保持一致,但是也可以由用戶編程控制參數(shù)。
‘Parameters’選項卡是與該Add-On指令相關的標簽數(shù)據(jù)庫編輯器窗口,并包括一些已定義的特定字段:Usage、Alias For 、Default、Style 、Req、Vis、Description、External Access、Constant。
‘Usage’允許用戶指定參數(shù)為: ‘Input’指令的輸入?yún)?shù)(支持基本數(shù)據(jù)類型) ‘Output’ 指令的輸出參數(shù)(支持基本數(shù)據(jù)類型)
‘InOut’通過‘按參考方式’傳遞到指令的參數(shù)(任何數(shù)據(jù)類型包括用戶自定義結構類型、數(shù)組等等)
‘Alias For’ 允許用戶將該參數(shù)定義為本AOI的某local tag(或其下一級tag)的別名參數(shù)。可以通過下拉菜單進行選擇。只有‘Input’和‘Output’類型的參數(shù)才可定義別名。
‘Default’允許用戶為相關參數(shù)指定缺省值。這個數(shù)值是指令首次創(chuàng)建時指令調(diào)用實例標簽的參數(shù)值?!甋tyle’設定參數(shù)的顯示格式,如二進制、八進制、十進制、十六進制、日期/時間、指數(shù)、浮點數(shù)。
‘Req’-當在例程中使用指令實例時,點選‘Required’復選框的參數(shù)將強制用戶輸入一個標簽或者對這個參數(shù)進行一個功能塊連接。該修改符定義了本編程語言的校驗行為。缺省情況下,‘Required’參數(shù)也是‘Visible’的。
‘Vis’-當在例程中使用指令時,點選‘Visible’復選框的參數(shù)將可見。因為修改符的使用,導致了一些取決于指令示例中使用的數(shù)據(jù)類型和語言(LD、FB、ST)的結果不同。
‘Description’字段很重要,因為在此處使用的任何信息都將會‘傳遞’到用戶程序的任何一個指令實例中。這種‘自身文檔’可用于描述指令的使用情況、單位等等。不超過512個字符。
‘External Access’設定外部設備(如人機界面)訪問該參數(shù)的權限。有三種不同的權限:Read/Write(可讀寫)、Read Only(只讀)、None(不可訪問)。
‘Constant’設置該參數(shù)是否為常數(shù)。如果選擇了該項,則可避免參數(shù)值被AOI外部邏輯修改,但AOI內(nèi)部邏輯可以修改該參數(shù)值。
用戶可以隱藏或顯示某列,(在該列標題行點擊鼠標右鍵,根據(jù)出現(xiàn)的菜單操作)。
8.從任務規(guī)范中可以看出,下列是必須包含在定義中的參數(shù): 輸入:
? Name:SimInput
? Usage:輸入?yún)?shù)
? Data Type:實型
? Default:0.0
? Required*(選擇)
? Visible(選擇)
? Description:仿真輸入
? External Access:讀/寫
* 這個參數(shù)是‘Required’,因為仿真必須要有輸入。默認情況下,‘Visible’隨‘Required’變化而變化。另外,External Access設為讀/寫,這意味著外部設備(如人機界面)可以讀且可以改寫該參數(shù)。
? Name:SimDeadtime
? Usage:輸入?yún)?shù)
? Data Type:實型
? Default:0.0
? Not Required* (不選擇)
? Not Visible (不選擇)
? Description: 停滯秒數(shù)
? External Access:讀/寫
* 這個參數(shù)被認為是可選參數(shù)并且默認情況為不是‘Required’或‘Visible’,但是仍然可以訪問或者被用戶操控。
? Name: SimTimeConstant
? Usage:輸入?yún)?shù)
? Data Type : 實型
? Default:1.0
? Not Required* (不選擇)
? Visible (選擇)
? Description:時間常數(shù)(秒)
? External Access:讀/寫
* 這個參數(shù)被認為是可選參數(shù)并且為不是‘Required’,但是為了用戶輸入它應該為‘Visible’。
此指令的輸出:
? Name:SimOutput
? Usage:輸出參數(shù)
? Data Type: 實型
? Default:0.0
? Not Required (不選擇)
? Visible* (選擇)
? Description:仿真輸出
? External Access:只讀
* * 對于用戶連接來說,輸出應該為‘Visible’,但是不選擇‘Required’(它可以直接通過標簽數(shù)據(jù)庫訪問)。另外,External Access設為只讀,這意味著外部設備(如人機界面)只能讀該參數(shù),而無法更改該參數(shù)值。如果External Access設為‘None’,則外部設備看不到該參數(shù)。
9. 在定義參數(shù)表中輸入這些參數(shù)和規(guī)范。

‘Signature’選項卡允許用戶設置對AOI進行封裝和簽名,以防他人更改。該選項卡還顯示簽名歷史記錄。

10. 單擊Apply完成修改。
11.單擊一次Logic按鍵打開空白的功能塊例程(這是控制器項目管理器的Add-On指令文件夾中命名為‘Logic’ 的例程)。

Add-On指令中的‘Logic’例程與其他語言類型的例程一樣,只是功能塊額外在右上角(更多在其后)帶有‘Data Context’下拉菜單。
在‘Logic’中編寫邏輯遵循相同規(guī)則和約定,就好像在控制器中的任何地方編寫一個標準例程。
該指令的仿真邏輯會包括FB DeadTime Block(DEDT)和一個FB LeadLag Block(LDLG)
12. 將DEDT和LDLG功能塊加入到這頁上。

結果如下:

13. 雙擊DEDT功能塊上的問號然后輸入DA1,點Enter完成。

14. 右擊‘DA1’,然后從下拉菜單中選擇‘New Parameter‘DA1’…’。

15. 完成‘Parameter/Local Tag Prosperities’對話框如下:

16. 單擊OK完成。
‘InOut’是為指令指定該數(shù)據(jù)‘按參考方式’進行傳遞。這就等同于將‘數(shù)據(jù)的指針’傳到指令,代替?zhèn)鬟f‘數(shù)據(jù)的數(shù)值’。這是使用數(shù)組、預定義結構體或UDT作為Add-On指令輸入的合適方式?!?strong>InOut’參數(shù)將在‘使用新的指令’部分進一步討論。
17.打開DEDT的屬性,選擇‘Parameters’選項卡顯示DEDT功能塊的‘Dead Time’輸入?yún)?shù)和‘DeadtimeInv’ 輸出參數(shù)并‘點選’那些參數(shù)的可見性。

18. 單擊Apply和OK完成修改。
19.打開LDLG功能塊的屬性,顯示‘Lag’參數(shù),然后‘點選’參數(shù)的可見性。

20. 單擊Apply和OK完成更改。

21. 在此頁上放置3個輸入?yún)⒖?IREF)。
22. 連接如下:
? DEDT.In
? DEDT.Deadtime
? LDLG..Lag
顯示如下:

23. 將DEDT.Out連接到LDLG..In

24. 雙擊第一個IREF然后輸入‘SimInput’,既可以直接鍵入,也可以下拉選擇標簽。

25. 重復先前步驟,將輸入?yún)?shù)‘SimDeadtime’放置到第二個IREF。
26.再次重復,將輸入?yún)?shù)‘SimTimeConstant’放置到第三個IREF。邏輯應該如下所示:
27. 在此頁上放置一個輸出參考(OREF)。
28. 將它連到LDLG..Out上
29. 雙擊輸出參考(OREF),然后鍵入‘SimOutput’(輸出參數(shù)是以前定義的)。
考慮到FB滯后時間功能塊(DEDT)的特性,輸入的定時/延時時間值很可能使得100個元素數(shù)組不夠用,所以,比較適合的做法是,把相關的錯誤信息位(DEDT_01.DeadtimeInv)作為一個輸出參數(shù),這樣就能夠在指令外部監(jiān)視此錯誤狀況。
30. 在本頁上放置另一個輸出參考(OREF)并將其連到DEDT.DeadtimeInv上。
31. 雙擊一個新的輸出參考(OREF)然后鍵入‘SimDTInv’。單擊Enter接受。
32. 右擊‘SimDTInv’,然后從下拉菜單中選擇‘New Parameter‘SimDTInv…’。
33. 完成的‘New Parameter’對話框顯示如下:
34.單擊OK完成。
通過這種方式,可以在邏輯編輯器中創(chuàng)建新參數(shù),這與在定義參數(shù)中創(chuàng)建它們一樣容易。邏輯定義應該如下所示:
35. 關閉‘Logic’例程。
36. 如果在屏幕上還沒有存在,右擊控制器項目管理器中的Add-On指令 ‘Simulation_DT_1st’,打開AOI定義,然后從下拉菜單中選擇‘Open De?nition’。
37. 單擊Parameters選項卡查看指令中的參數(shù)。
38.單擊Local Tags選項卡:
確切地說,Local Tags是指令自己本身使用的標簽,而不是用戶使用的標簽。因此,當指令在例程中使用時,這些Local Tags標簽在數(shù)據(jù)結構中是不可見的。典型的使用是作為AOI的內(nèi)部標簽或者作為一些操作的中間變量使用。這些標簽只在指令內(nèi)部可見。
注意,功能塊標簽創(chuàng)建時默認為Local Tags。通常,支持標簽(backing tag)不作為參數(shù)來使用,而作為內(nèi)部標簽。這對于任何一個包含標簽結構的指令都是適用的,如:定時器、計數(shù)器、功能塊、嵌套的AOI等等。
使用內(nèi)部的指令幫助文件
1. 單擊Help選項卡:
‘Help’選項卡包含了指令幫助預覽,它由用戶提供的信息自動產(chǎn)生等。
2. 下拉滾動條找到‘Available Languages’部分。
這部分顯示了每種可用的語言(RLL、FB和ST)中指令的默認外觀。
3. 繼續(xù)下拉滾動條,可見顯示所有指令參數(shù)、用法、類型和修改符的表格。
再下面是可選的‘Extended Description’,它是在選項卡最頂部‘Extended Description’字段中由用戶定義的更詳細的使用說明,以及指令修改的歷史記錄。修改的歷史記錄會跟蹤上次編輯日期以及指令的創(chuàng)建時間。
這就是當訪問RSLogix5000指令幫助時,指令‘Help’的顯示外觀。
4. 關閉AOI定義編輯器窗口。
5.校驗整個控制器程序。
應該校驗控制器程序保證沒有任何問題。如果接收到一個錯誤,詢問指導教師查出項目哪里出錯了。
目前為止,我們已經(jīng)開始了一個新的RSLogix 5000工程并創(chuàng)建了一個Add-On指令,鍵入了必須的參數(shù)和將執(zhí)行的邏輯。我們還沒有真正地使用它。這即將在下一步。
使用新的指令
新的指令可以在梯形圖邏輯、功能塊或結構化文本語言(包括SFC Action中的結構化文本語言)中使用。指令的可見性遵循所處環(huán)境。在‘Parameter’定義中的參數(shù)屬性中選擇每種語言的輸入、校驗和可見性行為。
以前在功能塊語言中創(chuàng)建的Add-On指令能夠使用在任何標準指令編輯器中。
指令工具欄有一個‘Add-On’選項卡,上面列寫了全部的當前程序中可利用的Add-On指令。
梯形圖邏輯實例
1. 打開‘MainTask’中‘MainProgram’的‘MainRoutine’(默認情況下,這是一個梯形圖邏輯例程)。
2. 在一個空的梯級上單擊指令工具欄上Add-On選項卡中的Simulation按鍵,放置一個‘Simulation_DT_1st’指令。
后面帶一個問號(?)的參數(shù)需要鍵入一個標簽名。如下:
? Simulation_DT_1st
類型為‘Simulation_DT_1st’的標簽作為這個指令中不可重名的數(shù)據(jù)實例。這個非常像TON指令中提及的定時器結構體。
? SimInput 需要一個實型標簽作為輸入?yún)?shù)。
? DA1 需要一個實型數(shù)組暫存中間數(shù)據(jù),數(shù)組至少有100個元素。
后面帶有雙問號(??)的參數(shù)填寫的是標簽值。這些字段顯示那些參數(shù)的當前值。
3.雙擊第一個問號(?),然后鍵入‘LDsim1’作為指令的參數(shù)。單擊Enter完成。

4. 右擊 ‘LDsim1’ 條目,然后選擇‘New“LDsim1”…’。

5. 完成‘New Tag’對話框如下。

6. 單擊【OK】完成。
7. 在指令中鍵入另外兩個標簽并創(chuàng)建它們。
SimInput
? Name: RealValue1
? Type:Base
? Data Type: 實型
? Scope:MainProgram
DA1
? Name:deadarray1
? Type:Base
? Data Type:實型[100]
? Scope: MainProgram
8.校驗RLL例程:

RLL例程如下:

9. 回顧之前指令定義中創(chuàng)建的參數(shù)選項卡信息如下:

‘Visible’參數(shù)值顯示在指令上?!甀nOut’例外。
在梯形圖邏輯中,一個布爾型的輸出參數(shù)指定為‘Visible’(而不是‘Required’)在指令上會表現(xiàn)為‘位類型’引腳。這與‘SimDTInv’輸出參數(shù)的例子一樣。
‘Required’參數(shù)需要用戶在指令校驗前鍵入一個符合這個參數(shù)的正確標簽變量。
?考慮‘SimDeadTime’參數(shù)。利用以下的RLL MOV指令(或一些相似一個數(shù)值。

10.單擊屬性按鈕 ,查看指令的參數(shù)。


在這里
注意RLL指令中的可見性不能改變時,‘Visibility’列不起作用。
* 在指令定義中作為‘本地標簽’創(chuàng)建的標簽在哪?
11.按以下信息修改‘SimDeadtime’和‘SimTimeConstant’參數(shù)值:

12.單擊Apply和OK完成更改
功能塊實例
1. 在‘MainProgram’下創(chuàng)建一個名為‘FB1’功能塊例程。

2. 打開‘FB1’功能塊例程,顯示例程編程域。

3. 單擊Logix5000工具欄上的Add-On選項卡,在功能塊編程域內(nèi)放置一個‘Simulation_DT_1st’指令。

與參數(shù)相關的引腳已經(jīng)在指令定義中指定為‘Visible’,默認情況下在指令中可見。
指令的數(shù)據(jù)標簽‘Simulation_DT_1st_01’已經(jīng)創(chuàng)建完成。這與任何一個在功能塊語言環(huán)境下創(chuàng)建的指令一致。
4。 雙擊DA1對應的問號(?)并鍵入‘deadarray2’。按Enter完成。

5.右擊剛才創(chuàng)建的 ‘deadarray2’ 條目,然后選擇‘New “deadarray2”…’

6. 完成‘New Tag’對話框如下,注意Data Type。

7. 單擊OK完成。
8.此時校驗例程。

9. 注意報告的錯誤信息:

在指令定義中,‘SimInput’指定為‘Required’參數(shù)。在功能塊語言環(huán)境下,同樣要求連接另一個功能塊。觀察‘SimInput’參數(shù)的引腳。

輸入引腳末端的‘結點’指示該參數(shù)需要連接到其他功能塊。直到所有的‘required’參數(shù)都有連接(要求的輸入和輸出類似),該指令才會校驗無誤。
10. 在頁面上放置一個輸入?yún)⒖?IREF),然后將它與‘SimInput’連接在一起。

11. 雙擊IREF,然后鍵入RealValue1(這個輸入標簽與在RLL部分使用過的標簽一樣)。按Enter完成。

12.校驗例程(這時例程應該顯示無誤)。
13.單擊屬性按鈕,顯示指令參數(shù)。

注意‘Visible’列生效。這個適合功能塊語言環(huán)境,在此環(huán)境下,可以增加可選參數(shù)的功能性。
14. 按以下信息修改‘SimDeadtime’和‘SimTimeConstant’參數(shù)的值。
15.單擊Apply和OK完成更改。
結構化文本實例
1. 在‘MainProgram’下創(chuàng)建一個新的名為‘ST1’的結構化文本例程。

2. 打開‘ST1’結構化文本例程顯示編程域。

3. 從指令工具欄、插入/選擇或只是簡單的鍵入, 添加一個‘Simulation_DT_1st’指令。

工具提示框顯示了指令中所必需的參數(shù),以實現(xiàn)校驗無誤。注意只有指令的支持標簽(backing tag)和在定義中指定為‘Required’的參數(shù)是唯一在結構化文本執(zhí)行過程中出現(xiàn)的。
4. 右擊‘Simulation_DT_1st’,然后從下拉菜單中選擇‘Argument List…’。

5. 按如下變量完成‘Argument List’。

6.單擊Apply和OK完成更改。

7.完成帶有如下標簽的結構化文本指令。在標簽上右擊,然后選擇‘NewTag’創(chuàng)建標簽。
? Name: stsim1
? Type: 基本型
? Data Type:Simulation_DT_1st
? Scope:MainProgram
? Name: RealValue1 *‘RealValue1’ 已經(jīng)存在了。
? Type: Base
? Data Type:實型
? Scope:MainProgram
? Name: deadarray3
? Type:Base
? Data Type:實型[100]
? Scope:MainProgram
* 在每行的末端使用分號終止結構化文本。

若要直接修改支持標簽(backing tag)值,則必須通過指令屬性或標簽數(shù)據(jù)庫視圖完成。
8.校驗ST例程。

9. 右擊指令,然后在下拉菜單中選擇‘Prosperities’。

10. 在指令屬性選項卡中,修改‘SimDeadtime’和‘SimTimeConstant’的參數(shù)如下:

11. 單擊Apply和OK完成更改。
正如上三部分所示,在Add-On指令設計階段,參數(shù)的Visible和Required修改符的使用必須要考慮在其中。語言類型應該總在考慮范圍之內(nèi)。