西門子PLC模塊6ES7531-7NF00-0AB0
說明
上面提供了兩個 STL 示例。STL 程序員可使用組只能顯示在 STL 編輯器中的簡化
STL 指令。這是因為用作 LAD/FBD 能流輸入的 BOOL 參數(shù)不保存到 L 存儲器。
第二組編譯器生成的 STL 指令可顯示在 LAD、FBD 和 STL
編輯器中,因為程序編譯器使用 L 存儲器來保存在 LAD/FBD 中為能流輸入的 BOOL
輸入?yún)?shù)的狀態(tài)。
地址參數(shù)(例如,IN4 (&VB100))傳入子例程作為
DWORD(無符號雙字)值。對于調(diào)用例程中常數(shù)值前面有常數(shù)描述符的參數(shù),必須為其常數(shù)參數(shù)類型。例如:要傳送值為 12,345
的無符號雙字常數(shù)作為參數(shù),必須將常數(shù)參數(shù)為
DW#12345。如果參數(shù)中遺漏了對于常數(shù)的說明,則可將該常數(shù)認定為不同類型。
不對輸入或輸出參數(shù)自動執(zhí)行數(shù)據(jù)類型轉(zhuǎn)換。例如,如果變量表參數(shù)的數(shù)據(jù)類型為 REAL,但在調(diào)用例程中,為該參數(shù)雙字 (DWORD)
數(shù)據(jù)類型,則子例程中的參數(shù)值將是雙字?jǐn)?shù)據(jù)類型。
值傳遞到子例程后,存儲在子例程的局部存儲器中。變量表的左列顯示各傳遞參數(shù)的局部存儲器地址。調(diào)用子例程時,輸入?yún)?shù)值將到子例程的局部存儲器中。子例程執(zhí)行完成時,從子例程的局部存儲器將輸出參數(shù)值到輸出參數(shù)地址。
數(shù)據(jù)元素大小和類型用參數(shù)的編碼表示。參數(shù)值到子例程中的局部存儲器的分配如下所述
:
● 參數(shù)值按照帶參數(shù)的調(diào)用子例程指令的順序分配給局部存儲器,起始地址是 L
0.0。
● 一至八個連續(xù)位參數(shù)值分配給從 Lx.0 到 Lx.7 的單個字節(jié)。
● 字節(jié)、字和雙字值分配給以字節(jié)為邊界的局部存儲器(LBx、LWx 或 LDx)。
在帶參數(shù)的子例程調(diào)用指令中,必須按照一定的順序排列參數(shù),輸入?yún)?shù)在前面,其次是輸入/輸出參數(shù),然后是輸出參數(shù)。
如果使用 STL 編程,則 CALL 指令的格式是:
CALL 子例程編號, 參數(shù) 1, 參數(shù) 2, ... , 參數(shù) 16
示例:子例程和子例程返回指令
LAD | STL |
MAIN |
| 掃描時,調(diào)用子例程 0 進行初始化。 | Network 1 LD SM0.1 CALL SBR_0 |
SBR0 |
| 可以在后一個程序段前使用有條件返回指令來退出子例程 。 | Network 1 LD M14.3 CRET |
SBR0 |
| 如果 M14.3 接通,將跳過此網(wǎng)絡(luò)。 | Network 2 LD SM0.0 MOVB 10, VB0 |
示例:使用字符串參數(shù)的子例程調(diào)用
此示例根據(jù)給定輸入的狀態(tài)將不同字符串文字到地址。此字符串的地址被保存。然后,通過間接地址將字符串地址傳入子例程。子例程輸入?yún)?shù)的數(shù)據(jù)類型是字符串
。然后,子例程將字符串移到其它位置。
字符串文字也可傳入子例程。子例程內(nèi)的字符串引用始終相同
西門子PLC模塊6ES7531-7NF00-0AB0
使用Starter / SCOUT調(diào)試
如圖9所示:在SteP7項目中生成了兩個驅(qū)動項目“SINAMICS_S120_CU320"和"SINAMICSxS120xCBE20v1",分別是驅(qū)動在PROFIBUS DP和PROFINET IO網(wǎng)絡(luò)上生成的。本例中PC與CBE20之間通過網(wǎng)線連接,用如圖9的方式既可直接打開Starter 或SCOUT 及驅(qū)動項目。
圖 9.
可通過使用"configuration"對驅(qū)動裝置進行手動配置。配置結(jié)束后編譯保存。
本例中:在Scout中選擇同樣的報文結(jié)構(gòu),并與SteP7 HW Config中定義的報文結(jié)構(gòu)保持*,并單擊“Transfer to Hw Config"按鈕
圖 10.
注意:S120支持兩個周期性通訊接口IF1和IF2,分別通過CU參數(shù)P8839.0和P8839.1來定義IF1和IF2的通訊方式,在默認情況下P8839.0= P8839.1=99,就激活了這兩個接口的自動模式,如下表所示:
在這種方式下無法實現(xiàn)PROFIBUS DP和PROFINET IO的并行通訊,因此為了實現(xiàn)其并行通訊,需要按如下方式設(shè)置:
? P8839[0]=1和P8839[1]=2:PROFIBUS DP 用于同步,PROFINET IO用于周期性通訊
? P8839[0]=2和P8839[1]=1:PROFINET IO用于同步,PROFIBUS DP用于周期性通訊(本例中的設(shè)置)
兩個周期性通訊接口IF1和IF2的特性如上表所示:
注意:IF2不支持TM41,TM15,TM17,TM/TB,CU與CPU之間的通訊。
五、通過PROFIBUS DP或PROFINET IO總線來實現(xiàn)過程數(shù)據(jù)的傳輸
S7-300/400PLC通過PROFINET IO或PROFIBUS DP周期性通訊方式將控制字1(CTW1)和主設(shè)定值(NSETP_B)發(fā)送至驅(qū)動器。
(1) 控制字中Bit0做電機的起、??刂?。
(2) 主設(shè)定值為速度設(shè)定值,參數(shù)P2000中的值為頻率設(shè)定值和實際值的參考頻率,100% 對應(yīng)4000H(十六進制),發(fā)送的高頻率(大值)為7FFFH(200%)。
(3) 當(dāng)組態(tài)的報文結(jié)構(gòu) PZD=2或自由報文999時,在S7-300/400 中可用“MOVE" 指令進行數(shù)據(jù)傳送;當(dāng)組態(tài)的報文結(jié)構(gòu)PZD >2,在S7-300/400 中需調(diào)用SFC14和SFC15系統(tǒng)功能塊。
? SFC14(“DPRD_DAT")用于讀驅(qū)動裝置的過程數(shù)據(jù)。
? SFC15(“DPWR_DAT")用于將過程數(shù)據(jù)寫入驅(qū)動裝置。
例子(PROFINET IO):SERVO_02 控制字、主設(shè)定值的發(fā)送及狀態(tài)字、實際頻率的讀取程序見圖11。
圖11
通過讀取Servo_02的參數(shù)r2050和P2051可以判斷數(shù)據(jù)是否傳輸成功。
圖12
例子(PROFIBUS DP):SERVO_02 "控制字、主設(shè)定值的發(fā)送及狀態(tài)字、實際頻率的讀取程序見圖13。
圖13
通過讀取Servo_02的參數(shù)r8850和P8051可以判斷數(shù)據(jù)是否傳輸成功。
圖14
注意通過通訊接口IF1和IF2可以同時實現(xiàn)CPU與Servo_02的數(shù)據(jù)傳輸
六、驅(qū)動器參數(shù)的讀取及寫入
1.擴展PROFIDRIVE功能(DPV1)
非周期性數(shù)據(jù)傳送模式允許:
? 交換大量的用戶數(shù)據(jù)
? 用DPV1的功能 READ 和 WRITE可以實現(xiàn)非周期性數(shù)據(jù)交換。傳輸數(shù)據(jù)塊的內(nèi)容應(yīng)遵照 PROFIdrive參數(shù)通道(DPV1)數(shù)據(jù)集DS47(非周期參數(shù)通道結(jié)構(gòu))。
2. 參數(shù)請求及參數(shù)應(yīng)答的結(jié)構(gòu)
參數(shù)請求包括三部分:請求標(biāo)題、參數(shù)地址及參數(shù)值。
表1.參數(shù)請求格式
表2.參數(shù)應(yīng)答格式
表3.參數(shù)請求及應(yīng)答描述