在TIA STEP7 V16版本中,可以通過相應(yīng)的診斷指令去實(shí)現(xiàn)對(duì)S7-1200 CPU(固件版本V4.4)和擴(kuò)展模塊的診斷操作。
讀取LED狀態(tài)的操作。(LED)
讀取診斷信息的操作。(GET_DIAG)
讀取數(shù)據(jù)記錄的操作。(RDREC)
接收中斷的操作。 (RALRM)
生成用戶診斷報(bào)警的操作。 (Gen_UsrMsg)
常見問題
本文將詳細(xì)介紹上述各個(gè)指令的使用。
讀取LED狀態(tài)
1. 讀取LED狀態(tài)指令的調(diào)用,如圖1所示。
圖1. 讀取LED狀態(tài)指令
2. 讀取LED狀態(tài)指令的使用。
說明:可以使用“LED”指令,讀取CPU上面LED的狀態(tài)。
通過LADDR參數(shù),可以尋址CPU。
通過LED參數(shù),可以選擇要通過該指令讀取當(dāng)前狀態(tài)的模塊LED指示燈。
調(diào)用該指令時(shí),RET_VAL參數(shù)將輸出所選LED的狀態(tài)。根據(jù)所選的LED,將僅顯示指定的狀態(tài)信息。如表1所示:
表1 "LED"指令的參數(shù)
參數(shù) | 聲明 | 數(shù)據(jù)類型 | 說明 |
---|---|---|---|
LED | Input | UINT |
LED 的標(biāo)識(shí)號(hào): 1:STOP/RUN 2:ERROR 3:MAINT(維護(hù)) 5:Link(綠色) 6:Rx/Tx(黃色) |
RET_VAL | Return | INT |
LED 的狀態(tài): 0 = LED 不存在或狀態(tài)信息不可用 1 = 永久關(guān)閉 2 = 顏色 1(例如,對(duì)于 LED STOP/RUN:綠色)永久點(diǎn)亮 3 = 顏色 2(例如,對(duì)于 LED STOP/RUN: 橙色) 永久點(diǎn)亮 4 = 顏色 1 將以 2 Hz 的頻率閃爍 5 = 顏色 2 將以 2 Hz 的頻率閃爍 6 = 顏色 1 和 2 將以 2 Hz 的頻率交替閃爍 7 = LED 正在運(yùn)行,顏色 1 8 = LED 正在運(yùn)行,顏色 2 9 = LED 不存在或狀態(tài)信息不可用 |
示例:下面的示例中,顯示了如何讀取CPU上面的LED狀態(tài)。
在全局DB中創(chuàng)建兩個(gè)變量,用來保存數(shù)據(jù),如圖2所示:
圖2. 在全局DB中創(chuàng)建變量
在OB1中調(diào)用"LED"指令,并連接參數(shù),其中參數(shù)LADDR指向CPU的硬件標(biāo)識(shí)符(在"PLC變量->系統(tǒng)常量"中,名稱為"Local~Common"),如圖3所示:
圖3. 在OB1中調(diào)用"LED"指令
通過參數(shù)LED("LED")指向待監(jiān)視CPU的LED。示例一中參數(shù)LED("LED"=1)表示查詢CPU的LED(STOP/RUN)狀態(tài)。
如果CPU的操作模式從STOP轉(zhuǎn)入RUN,則在輸出參數(shù)RET_VAL("ReturnValue")中的值為"6"(綠色和橙色交替閃爍)。
如圖4所示:
圖4. "LED"指令執(zhí)行結(jié)果(示例一)
通過參數(shù)LED("LED")指向待監(jiān)視CPU的LED。示例二中參數(shù)LED("LED"=2)表示查詢CPU的LED(ERROR)狀態(tài)。
如果CPU中發(fā)生錯(cuò)誤,則在輸出參數(shù)RET_VAL("ReturnValue")中的值為"4"(紅色閃爍)。如圖5所示:
圖5. "LED"指令執(zhí)行結(jié)果(示例二)
讀取診斷信息
1. 讀取診斷信息指令的調(diào)用,如圖6所示。
圖6. 讀取診斷信息指令
2.讀取診斷信息指令的使用。
說明:GET_DIAG指令可以用來讀取硬件組件的診斷信息。例如:讀取S7-1200 CPU的診斷信息。
通過LADDR參數(shù),來選擇硬件組件。
通過MODE參數(shù),可以選擇要讀取的診斷信息。
通過DIAG參數(shù),根據(jù)不同的MODE參數(shù),輸出不同的診斷信息。如表2所示:
表2 GET_DIAG指令的MODE參數(shù)和DIAG參數(shù)對(duì)應(yīng)關(guān)系
MODE | 說明 | DIAG | CNT_DIAG |
---|---|---|---|
0 | 以 DWORD 格式輸出硬件組件所有支持的診斷信息,其中位 X=1 表示支持模式 X。 |
DWORD 數(shù)據(jù)類型的位: 位 0 = 1:支持 MODE 0。 位 1 = 1:支持 MODE 1。 位 2 = 1:支持 MODE 2。 位 3 到 31:不相關(guān) MODE=0 時(shí),S7-1200 CPU 將忽略參數(shù) LADDR。 |
0 |
1 | 輸出所尋址硬件組件的診斷狀態(tài)。 |
結(jié)構(gòu) DIS: MaintenanceState ComponentStateDetail OwnState IOState OperatingState |
0 |
2 | 輸出所尋址硬件對(duì)象中所有從屬組件的狀態(tài)。 |
結(jié)構(gòu) DNN: SubordinateState SubordinateIOState DNNmode |
0 |
當(dāng)參數(shù)MODE=1時(shí),參數(shù)DIAG以結(jié)構(gòu) DIS 輸出診斷信息。此時(shí),在變量聲明中輸入系統(tǒng)數(shù)據(jù)類型“DIS”作為數(shù)據(jù)類型。結(jié)構(gòu)DIS的內(nèi)容如表3所示:
表3 結(jié)構(gòu)DIS中各參數(shù)的含義
參數(shù) | 數(shù)據(jù)類型 | 值 | 說明 | 參數(shù)構(gòu)成規(guī)則 |
---|---|---|---|---|
MaintenanceState | DWORD | 枚舉 | MaintenanceState 取決于 ComponentStateDetail。 | |
0 | 良好 |
ComponentStateDetail 的位 15 始終為 1。 ComponentStateDetail 的位 11 到 14 的值可以是 0 或 1。 ComponentStateDetail 的位 3 可以是 1。 ComponentStateDetail 的所有其它位均為 0。 |
||
1 | 硬件組件已禁用。 |
如果 ComponentStateDetail 的位 16 為 1 如果 ComponentStateDetail 的位 17 為 1 |
||
2 | - | - | ||
3 | - | - | ||
4 | - | - | ||
5 | 需要維護(hù) | 如果 ComponentStateDetail 的位 4 為 1 | ||
6 | 要求維護(hù) | 如果 ComponentStateDetail 的位 5 為 1 | ||
7 | 錯(cuò)誤 | 如果 ComponentStateDetail 的位 6 為 1 | ||
8 | 上一級(jí)硬件組件的狀態(tài)為“未知/錯(cuò)誤” |
如果 ComponentStateDetail 的位 11 到 14 的值為 3 如果 ComponentStateDetail 的位 7 到 10 的值為 3 或 4 |
||
9 | - | - | ||
10 | 輸入/輸出不可用。 |
如果 ComponentStateDetail 的位 11 到 14 的值為 2 如果 ComponentStateDetail 的位 7 到 10 的值為 1 或 2 如果 ComponentStateDetail 的位 18 為 1 如果 ComponentStateDetail 的位 19 為 1 |
||
ComponentStateDetail | DWORD | 位數(shù)組 |
狀態(tài): 位 0 到 15:硬件組件的狀態(tài) 位 16 到 31:CPU 的狀態(tài) |
- |
0 到 2(枚舉) |
其它信息: 0:無其它信息 1:不允許傳送 |
- | ||
3 | 位 3 = 1:至少一個(gè)合格診斷可用 | - | ||
4 | 位 4 = 1:至少一個(gè)通道或組件需要維護(hù) | - | ||
5 | 位 5 = 1:至少一個(gè)通道或組件需要維護(hù) | - | ||
6 | 位 6 = 1:至少一個(gè)通道或組件錯(cuò)誤 | - | ||
7 到 10(枚舉) |
0:硬件組件可用 1:無 I/O 訪問 2:硬件組件不可訪問 3:硬件組件不可訪問 4:硬件組件不可訪問 |
- | ||
11 到 14(枚舉) |
0:元素正確。 1:該元素將替代為一個(gè)兼容元素。 2:該元素將替代為一個(gè)非兼容元素(該元素可訪問,但尚未就緒無法操作)。 3:該元素不存在。 |
- | ||
15 | 預(yù)留(始終為“1”)。 | - | ||
16 到 31 |
CPU 生成的模塊狀態(tài)信息: 第 16 位 = 1:子模塊或模塊已禁用 第 17 位 = 1:激活 CiR 操作 第 18 位 = 1:輸入不可用 第 19 位 = 1:輸出不可用 第 20 位 = 1:診斷緩沖區(qū)溢出 第 21 位 = 1:診斷不可用 第 22 位 = 1: 部分設(shè)備故障(帶有 PNIO,可用于共享設(shè)備) 第 23 到 31 位 :預(yù)留(始終為 0) |
- | ||
OwnState | UINT | 枚舉 | 維護(hù)狀態(tài) | OwnState 取決于 MaintenanceState。 |
0 | 良好 | 如果 MaintenanceState 的值為 0。 | ||
1 | 禁用 | 如果 MaintenanceState 的值為 1。 | ||
2 | 需要維護(hù) | 如果 MaintenanceState 的值為 5。 | ||
3 | 要求維護(hù) | 如果 MaintenanceState 的值為 6。 | ||
4 | 錯(cuò)誤 | 如果 MaintenanceState 的值為 7。 | ||
5 | 不可訪問 | 如果 MaintenanceState 的值為 8。 | ||
6 | 診斷狀態(tài)未知 | 未返回診斷事件的組件的默認(rèn)值。 | ||
7 | 輸入/輸出不可用。 | 如果 MaintenanceState 的值為 10。 | ||
IOState | WORD | 位數(shù)組 | 硬件組件的 I/O 狀態(tài) |
可設(shè)置一個(gè)或多個(gè)位。 IOState 取決于 ComponentStateDetail。 |
位 0 = 1 | 良好 |
ComponentStateDetail 的位 15 始終為 1。 ComponentStateDetail 的位 11 到 14 的值可以是 0 或 1。 ComponentStateDetail 的位 3 可以是 1。 ComponentStateDetail 的所有其它位均為 0。 如果位 0 = 1,則位 1 到 5 和位 7 = 0。 |
||
位 1 = 1 | 禁用 |
如果 ComponentStateDetail 的位 16 為 1 如果 ComponentStateDetail 的位 17 為 1 如果位 1 = 1,則所有其它位均為 0。 |
||
位 2 = 1 | 需要維護(hù) | 如果 ComponentStateDetail 的位 4 為 1 | ||
位 3 = 1 | 要求維護(hù) | 如果 ComponentStateDetail 的位 5 為 1 | ||
位 4 = 1 | 錯(cuò)誤 | 如果 ComponentStateDetail 的位 6 為 1 | ||
位 5 = 1 | 硬件組件無法訪問。 |
如果 ComponentStateDetail 的位 11 到 14 的值為 3 如果 ComponentStateDetail 的位 7 到 10 的值為 3 或 4 如果位 5 = 1,則所有其它位均為 0。 |
||
位 6 = 1: | 至少一個(gè)合格診斷可用 |
如果 ComponentStateDetail 的位 3 為 1。 在這種情況下,將位 0、2 或 3 置位。 |
||
位 7 = 1: | I/O 數(shù)據(jù)不可用 |
如果 ComponentStateDetail 的位 11 到 14 的值為 2 如果 ComponentStateDetail 的位 7 到 10 的值為 1 或 2 如果 ComponentStateDetail 的位 18 為 1 如果 ComponentStateDetail 的位 19 為 1 |
||
位 8 到 15 | 預(yù)留(始終為“0”) | - | ||
OperatingState | UINT | 枚舉 | - | |
0 | 不支持 - 對(duì)于 I/O 模塊,OperatingState 的值始終為“0”。 | - | ||
1 | STOP / 固件更新 | - | ||
2 | STOP / 存儲(chǔ)器復(fù)位 | - | ||
3 | STOP / 自啟動(dòng) | - | ||
4 | STOP | - | ||
5 | 存儲(chǔ)器復(fù)位 | - | ||
6 | 啟動(dòng) | - | ||
7 | - | - | ||
8 | RUN | - | ||
9 | RUN-Redundant | - | ||
10 | HOLD | - | ||
11 | - | - | ||
12 | - | - | ||
13 | DEFECT(注:僅在診斷緩沖區(qū)條目中可見) | - | ||
14 | - | - | ||
15 | 斷電(注:僅在診斷緩沖區(qū)條目中可見) | - | ||
16 | CiR | - | ||
17 | STOP,且無 ODIS | - | ||
18 | RUN ODIS | - | ||
19 | PgmTest | - | ||
20 | RunPgmTest(備用 CPU 處于測(cè)試模式時(shí)主 CPU 的狀態(tài)) | - | ||
21 | Run-Syncup(只有主 CPU 處于SYNCUP 系統(tǒng)狀態(tài)) | - | ||
22 | SYNCUP(僅備用 CPU 處于 SYNCUP 系統(tǒng)狀態(tài)) | - | ||
31 | 伙伴 CPU 的狀態(tài)未知(如,伙伴 CPU 不可用) | - | ||
32 | - | - | ||
33 | STOP 系統(tǒng)狀態(tài) | - | ||
34 | 預(yù)留 | - | ||
35 | STARTUP 系統(tǒng)狀態(tài) | - | ||
36 | 預(yù)留 | - | ||
37 | RUN-Solo 系統(tǒng)狀態(tài) | - | ||
38 | SYNCUP 系統(tǒng)狀態(tài) | - | ||
39 | 預(yù)留 | - | ||
40 | RUN-Redundant 系統(tǒng)狀態(tài) | - |
示例:在全局DB中創(chuàng)建三個(gè)變量和一個(gè)"Diag"結(jié)構(gòu)(數(shù)據(jù)類型為DIS),用來保存數(shù)據(jù),如圖7所示:
圖7. 在全局DB中創(chuàng)建變量
在OB1中調(diào)用GET_DIAG指令,并連接參數(shù),其中參數(shù)LADDR指向CPU的硬件標(biāo)識(shí)符(在"PLC變量->系統(tǒng)常量"中,名稱為"Local~Common"),如圖8所示:
圖8. 在OB1中調(diào)用GET_DIAG指令
根據(jù)參數(shù)MODE("Mode")的值"1",有以下幾點(diǎn)說明:
指令將讀取(CPU的)所尋址硬件對(duì)象的狀態(tài)。
在參數(shù)DIAG("Diag")中,診斷信息將在結(jié)構(gòu)(DIS數(shù)據(jù)類型)中輸出。
要了解診斷信息,必須將十六進(jìn)制值轉(zhuǎn)換為二進(jìn)制代碼。通過參數(shù)DIAG("Diag"),指示以下信息:
MaintenanceState:根據(jù)值"6",表示CPU要求維護(hù)。
ComponentStateDetail:根據(jù)十六進(jìn)制值"0000_8020",位15已激活(預(yù)留,始終為"1"),位5已激活(至少一個(gè)通道或組件需要維護(hù))。
OwnState:根據(jù)值"3",要求維護(hù)。
IOState:根據(jù)十六進(jìn)制值"0008",要求維護(hù)。
OperatingState:輸出"0"。
輸出參數(shù)RET_VAL("ReturnValue")用于指示處理無錯(cuò)誤。通過輸出參數(shù)CNT_DIAG("CNT_DIAG"),指示參數(shù)DETAIL的"0"診斷詳情已輸出。 如圖9所示:
圖9. GET_DIAG指令執(zhí)行結(jié)果
讀取數(shù)據(jù)記錄
1. 讀取數(shù)據(jù)記錄指令的調(diào)用,如圖10所示。
圖10. 讀取數(shù)據(jù)記錄指令
2. 讀取數(shù)據(jù)記錄指令的使用。
說明:RDREC讀取數(shù)據(jù)記錄指令,可以從使用ID尋址的模塊中讀取編號(hào)為INDEX的數(shù)據(jù)記錄。模塊必須是位于分布式模塊(PROFIBUS DP、PROFINET IO、AS-i)。
使用參數(shù) ID 選擇從中讀取數(shù)據(jù)記錄的模塊,使用模塊的硬件標(biāo)識(shí)符,在"PLC 變量 -> 系統(tǒng)常量“中。例如:ET200SP分布式IO 的 DQ模塊,將顯示為數(shù)據(jù)類型為"Hw_SubModule"的 IO_device_1~DQ_16x24VDC_0_5A_ST_1。
使用 INDEX 參數(shù),可選擇模塊待讀取的數(shù)據(jù)記錄。例如:”16#E00A“,表示讀取 IO 設(shè)備的診斷數(shù)據(jù)記錄。
使用 MLEN 指定要讀取的最大數(shù)據(jù)記錄字節(jié)數(shù)。如果參數(shù) MLEN 選擇了長(zhǎng)度”0“,則會(huì)在參數(shù) RECORD 中寫入完整的數(shù)據(jù)記錄。
目標(biāo)區(qū)域 RECORD用來保存數(shù)據(jù)記錄,在參數(shù) RECORD 中使用的結(jié)構(gòu)(例如:組態(tài)、數(shù)據(jù)類型和長(zhǎng)度)取決于由哪個(gè)模塊讀取哪條數(shù)據(jù)記錄。
輸出參數(shù) VALID 的值為 TRUE,表示數(shù)據(jù)記錄已成功傳送到目標(biāo)區(qū)域 RECORD 中。此時(shí),輸出參數(shù) LEN 包含所讀取數(shù)據(jù)的字節(jié)長(zhǎng)度。
如果在數(shù)據(jù)記錄的傳送過程中發(fā)生錯(cuò)誤,輸出參數(shù) ERROR 置 ”1“。輸出參數(shù) STATUS 中包含錯(cuò)誤信息。
示例:本例中,IO控制器為S7-1200 CPU1215C,帶有 DQ 模塊的 IO 設(shè)備 (ET 200SP IM 155-6 PN HF) 導(dǎo)致線路斷路。使用該 IO 設(shè)備前端模塊的硬件 ID,使用數(shù)據(jù)記錄16#E00A 進(jìn)行通道診斷。
在全局DB中創(chuàng)建七個(gè)變量和一個(gè)數(shù)組,用來保存數(shù)據(jù)。 如圖11所示:
圖11. 在全局DB中創(chuàng)建變量
在OB1中調(diào)用RDREC指令,連接參數(shù),在"PLC變量->系統(tǒng)常量"中的
如圖12所示:
圖12. 在OB1中調(diào)用RDREC指令
當(dāng)RDREC指令出錯(cuò)時(shí)要存儲(chǔ)錯(cuò)誤狀態(tài),可連接MW100("Status")變量,如圖13所示:
圖13. 在OB1中調(diào)用MOVE指令
診斷數(shù)據(jù)記錄的結(jié)構(gòu)16#E00A,版本號(hào)BlockVersion=16#0100,如表4所示:
表4 數(shù)據(jù)記錄結(jié)構(gòu)一
名稱 | 長(zhǎng)度 |
---|---|
BlockType | 2 bytes |
BlockLength | 2 bytes |
BlockVersion | 2 bytes |
SlotNumber | 2 bytes |
SubslotNumber | 2 bytes |
ChannelNumber | 2 bytes |
ChannelProperties | 2 bytes |
USI | 2 bytes |
USI=16#8000 | |
ChannelNumber | 2 bytes |
ChannelProperties | 2 bytes |
ChannelErrorType | 2 bytes |
USI=16#8002 | |
ChannelNumber | 2 bytes |
ChannelProperties | 2 bytes |
ChannelErrorType | 2 bytes |
ExtChannelErrorType | 2 bytes |
ExtChannelAddValue | 4 bytes |
USI=16#0000-16#7FFF | |
vendor-specific | X bytes |
診斷數(shù)據(jù)記錄的結(jié)構(gòu)16#E00A,版本號(hào)BlockVersion=16#0101,如表5所示:
表5 數(shù)據(jù)記錄結(jié)構(gòu)二
名稱 | 長(zhǎng)度 |
---|---|
BlockType | 2 bytes |
BlockLength | 2 bytes |
BlockVersion | 2 bytes |
API | 4 bytes |
SlotNumber | 2 bytes |
SubslotNumber | 2 bytes |
ChannelNumber | 2 bytes |
ChannelProperties | 2 bytes |
USI | 2 bytes |
USI=16#8000 | |
ChannelNumber | 2 bytes |
ChannelProperties | 2 bytes |
ChannelErrorType | 2 bytes |
USI=16#8002 | |
ChannelNumber | 2 bytes |
ChannelProperties | 2 bytes |
ChannelErrorType | 2 bytes |
ExtChannelErrorType | 2 bytes |
ExtChannelAddValue | 4 bytes |
USI=16#0000-16#7FFF | |
vendor-specific | X bytes |
輸入?yún)?shù) REQ("Req")返回信號(hào)狀態(tài)"TRUE"時(shí),啟動(dòng)指令RDREC。RDREC指令將通過輸入?yún)?shù)ID(本例中為"283",表示 IO 設(shè)備前端模塊的硬件 ID),調(diào)用該模塊。通過輸入?yún)?shù)INDEX(本例中為"16#E00A"),
系統(tǒng)將使用數(shù)據(jù)記錄16#E00A 進(jìn)行通道診斷,并通過參數(shù)RECORD("RecordDiag")進(jìn)行保存。
通過輸出參數(shù)LEN("Len"),可存儲(chǔ)所讀取數(shù)據(jù)記錄的長(zhǎng)度。根據(jù)輸入?yún)?shù)MLEN("Mlen")的值,值為"0"時(shí),待讀取的數(shù)據(jù)記錄信息將不受限制。
在執(zhí)行過程中,輸出參數(shù)BUSY("Busy")將置位為"TRUE";VALID("Valid")將置位為"FALSE"。在執(zhí)行完成后,將輸出成功讀取的結(jié)果("Valid"到"TRUE")。并在輸出參數(shù)STATUS("Status")處,顯示該塊的狀態(tài),
如果值為"16#0000_0000",表示過程成功執(zhí)行且無任何錯(cuò)誤。如圖14所示:
圖14. RDREC指令執(zhí)行結(jié)果
此外,數(shù)據(jù)記錄16#E00A中包含以下信息:
BlockType("RecordDiag[0]"):16#0010,表示診斷記錄;
BlockLength("RecordDiag[1]"):16#0016,表示包含診斷記錄的連續(xù)字節(jié)數(shù)為22個(gè)字節(jié);
BlockVersion("RecordDiag[2]"):16#0101,表示版本號(hào)為16#0101;
API("RecordDiag[3]和RecordDiag[4]"):0,表示應(yīng)用程序進(jìn)程標(biāo)識(shí)符,標(biāo)準(zhǔn)API為0;
SlotNumber("RecordDiag[5]"):16#0002,表示插槽號(hào)為2;
SubslotNumber("RecordDiag[6]"):16#0001,表示子模塊為1;
ChannelNumber("RecordDiag[7]"):16#8000,表示子模塊級(jí)別上的診斷;
ChannelProperties("RecordDiag[8]"):16#0800,表示診斷未決;
USI("RecordDiag[9]"):16#8000,表示用戶結(jié)構(gòu)標(biāo)識(shí)符;
ChannelNumber("RecordDiag[10]"):16#0003,表示通道3發(fā)生故障。
ChannelProperties("RecordDiag[11]"):16#4801,表示輸出位信號(hào)診斷未決。
ChannelErrorType("RecordDiag[12]"):16#0006,表示斷路故障。
參數(shù)RECORD("RecordDiag")中顯示了數(shù)據(jù)記錄信息,如圖15所示:
圖15. RDREC指令執(zhí)行結(jié)果(數(shù)據(jù)記錄信息"RecordDiag")
接收中斷
1. 接收中斷指令的調(diào)用,如圖16所示。
圖16. 接收中斷指令
2. 接收中斷指令的使用。
說明:RALRM接收中斷指令,可以從I/O模塊(集中式組態(tài))或DP從站/PROFINET IO設(shè)備的模塊中接收帶有所有相關(guān)信息的中斷,并在輸出參數(shù)中輸出該信息。
輸出參數(shù)中的信息包括所調(diào)用 OB 的信息。例如:輸出信息包含診斷錯(cuò)誤中斷OB82的啟動(dòng)信息和管理信息。
目標(biāo)范圍 AINFO 中的數(shù)據(jù)結(jié)構(gòu)包含標(biāo)頭信息和附加中斷信息。附加中斷信息取決于格式標(biāo)識(shí)符,例如:格式標(biāo)識(shí)符16#8000表示通道診斷。
RALRM指令可以在三種操作模式中調(diào)用(MODE 參數(shù)),如表6所示:
表6 RALRM指令的參數(shù)MODE
MODE | RALRM |
---|---|
0 | 表示輸出參數(shù) ID 中觸發(fā)中斷并將輸出參數(shù) NEW 設(shè)置為 TRUE 的組件。 |
1 | 寫入所有輸出參數(shù),而不考慮觸發(fā)中斷的組件。 |
2 |
檢查輸入?yún)?shù) F_ID 中指定的組件是否已觸發(fā)中斷。 如果沒有觸發(fā),則 NEW = FALSE 如果已觸發(fā),則 NEW = TRUE 且已寫入所有其它輸出參數(shù)。 |
示例:創(chuàng)建一個(gè)輸入模塊,在"PLC變量->系統(tǒng)常量"中,讀取輸入模塊的硬件標(biāo)識(shí)符。并通過輸入?yún)?shù)F_ID("F_ID")存儲(chǔ)該硬件標(biāo)識(shí)符。
為了產(chǎn)生一個(gè)中斷,該輸入通道需選擇"斷路"選項(xiàng)。該選項(xiàng)位于"模塊參數(shù)->通道模板->輸入"中。如圖17所示:
圖17 組態(tài)輸入模塊的診斷信息
在全局DB中創(chuàng)建七個(gè)變量,和結(jié)構(gòu)"Tinfo"和"Ainfo"進(jìn)行數(shù)據(jù)存儲(chǔ),創(chuàng)建數(shù)據(jù)類型為"TI_DiagnosticInterrupt"的結(jié)構(gòu)"Tinfo",如圖18所示:
圖18. 在全局DB中創(chuàng)建變量
創(chuàng)建診斷錯(cuò)誤中斷OB82,如圖19所示:
圖19. 創(chuàng)建OB82
在OB82中調(diào)用RALRM指令,并連接參數(shù),如圖20所示:
圖20. 在OB82中調(diào)用RALRM指令
發(fā)生斷路故障時(shí),輸入模塊將生成一個(gè)中斷。之后,將調(diào)用診斷錯(cuò)誤中斷OB82,并啟動(dòng)指令RALRM。
RALRM指令將通過輸入?yún)?shù)F_ID("F_ID")調(diào)用該輸入模塊。指令RALRM將根據(jù)輸入?yún)?shù)MODE("Mode")的值"2",檢查中斷是否由該輸入模塊產(chǎn)生。如果中斷來自該輸入模塊("F_ID"和"ID"相同),
則輸出參數(shù)NEW("New")將置位為"TRUE",并通過參數(shù)TINFO("Tinfo")和AINFO("Ainfo")保存該中斷信息。生成該中斷的模塊硬件標(biāo)識(shí)符將顯示在輸出參數(shù)ID("ID")處。已接收到的中斷信息長(zhǎng)度
將記錄在輸出參數(shù)LEN("Len")中。根據(jù)輸入?yún)?shù)MLEN("Mlen")的值,值為"0"時(shí),待讀取AINFO("Ainfo")的信息將不受限制。并在輸出參數(shù)STATUS("Status")處,顯示該塊的狀態(tài),
如果值為"16#0000_0000",表示過程成功執(zhí)行且無任何錯(cuò)誤。如圖21所示:
圖21.RALRM指令執(zhí)行結(jié)果
OB82的啟動(dòng)信息和管理信息均存儲(chǔ)在參數(shù)TINFO("Tinfo")中。生成的中斷包含以下信息:
OB82啟動(dòng)信息:
OB82使用優(yōu)化啟動(dòng)信息("SI_Format"和值"254")。
OB82管理信息:
讀取狀態(tài)為"錯(cuò)誤"(參見"IO_State"的值)的輸入模塊(參見"LADDR")。
最近記錄的通道"0"的中斷(參見"Channel"的值)。
最近記錄的站"1"的中斷(參見"address"的值)。
從站的配置文件(參見"slv_prfl"的值)。
由組態(tài)的分布式模塊觸發(fā)的中斷(參見"intr_type"的值)。如圖22所示:
圖22.TINFO參數(shù)的詳細(xì)信息
有關(guān)中斷的標(biāo)頭信息和附加信息,均存儲(chǔ)在參數(shù)AINFO("Ainfo")中。生成的中斷包含以下信息:
所用OB是一個(gè)診斷中斷OB("InterruptType",值為"1")。
系統(tǒng)報(bào)告模塊在插槽"2"("SlotNumber")處和子模塊插槽"1"處發(fā)生中斷("SubSlotNumber")。
對(duì)于子模塊("InterruptSpecifier",值為"16#A89C"),為中斷指示符。
在本示例中,使用通道診斷的結(jié)構(gòu)("FormatIdentifier",值為"16#8000")。
觸發(fā)該中斷的組件通道編號(hào)將分配給該子模塊("ChannelNumber",值為"16#0000")。
診斷輸入通道的一個(gè)到達(dá)錯(cuò)誤("ChannelErrorType",值為"16#28")。
所用的數(shù)據(jù)格式為一個(gè)位("DataFormat",值為"16#01")。
診斷一個(gè)斷路故障("ErrorCode",值為"16#0006")。如圖23所示:
圖23.AINFO參數(shù)的詳細(xì)信息
注:AINFO變量建議使用非優(yōu)化數(shù)據(jù)塊,如使用優(yōu)化塊,需要使用BYTE類型的數(shù)組,以免數(shù)據(jù)發(fā)生錯(cuò)亂。
生成用戶診斷報(bào)警
1. 生成用戶診斷報(bào)警指令的調(diào)用,如圖24所示。
圖24. 生成用戶診斷報(bào)警指令
2. 生成用戶診斷報(bào)警指令的使用。
說明:Gen_UsrMsg生成用戶診斷報(bào)警指令,可以生成在診斷緩沖區(qū)中輸入的報(bào)警。
可以使用 Mode 參數(shù)選擇生成到達(dá)的報(bào)警還是離去的報(bào)警。
當(dāng) Mode = 1 時(shí):創(chuàng)建到達(dá)的報(bào)警。
當(dāng) Mode = 2 時(shí):創(chuàng)建離去的報(bào)警。
無論生成到達(dá)的報(bào)警還是離去的報(bào)警,報(bào)警始終具有”僅信息“屬性。
條目在診斷緩沖區(qū)中同時(shí)創(chuàng)建,而報(bào)警將進(jìn)行異步傳送。
如果指令在執(zhí)行過程中出錯(cuò),則將在參數(shù) RET_VAL 處輸出錯(cuò)誤信息。
示例:在全局DB中創(chuàng)建五個(gè)變量和一個(gè)"AssocValues"結(jié)構(gòu)(數(shù)據(jù)類型為AssocValues),用來保存數(shù)據(jù),如圖25所示:
圖25. 在全局DB中創(chuàng)建變量
在OB1中調(diào)用Gen_UsrMsg指令,并連接參數(shù),如圖26所示:
圖26. 在OB1中調(diào)用Gen_UsrMsg指令
使用"PLC報(bào)警文本列表->文本列表"條目為報(bào)警創(chuàng)建文本列表和文本列表?xiàng)l目。
在參數(shù)TextListID("TextListID")中應(yīng)用文本列表的ID。
在參數(shù)TextID("TextID")中應(yīng)用文本列表?xiàng)l目的ID(范圍...)。
分配報(bào)警參數(shù),如圖27所示:
圖27. 分配報(bào)警參數(shù)
如果常開觸點(diǎn)("En")的信號(hào)狀態(tài)為"TRUE",則執(zhí)行"Gen_UsrMsg"指令。
根據(jù)參數(shù)Mode("Mode")的值,生成到達(dá)的報(bào)警。使用參數(shù)TextListID("TextListID")和TextID("TextID")使指令指向待輸出的報(bào)警。使用參數(shù)
AssocValues("AssocValues")傳送報(bào)警的關(guān)聯(lián)值。
生成報(bào)警時(shí),將按下列方式解釋報(bào)警文本中包含的字符串"@7I%5d@":
編號(hào)為"7"的關(guān)聯(lián)值以INT數(shù)據(jù)類型讀取。該編號(hào)對(duì)應(yīng)于"AssocValues"結(jié)構(gòu)的參數(shù)Value[5]。
關(guān)聯(lián)值將作為一個(gè)十進(jìn)制數(shù)輸出。十進(jìn)制數(shù)被限制為五位數(shù)。
通過輸出參數(shù) Ret_Val("ReturnValue"),值為"0",指示該指令的處理無錯(cuò)誤。如圖28所示:
圖28. Gen_UsrMsg指令執(zhí)行結(jié)果
要輸出報(bào)警,對(duì)于S7-1200系列的CPU,請(qǐng)打開條目"在線與診斷->診斷緩沖區(qū)",如圖29所示:
圖29. 診斷緩沖區(qū)中輸入的報(bào)警
注:關(guān)于診斷指令的更多信息請(qǐng)參考TIA STEP7 V16軟件中的幫助文檔。
常見問題
通過"LED"指令讀取擴(kuò)展模塊的指示燈狀態(tài)報(bào)錯(cuò)?
在設(shè)備視圖中組態(tài)S7-1200的擴(kuò)展模塊SM1231 AI4(訂貨號(hào):6ES7 231-4HD32-0XB0),硬件標(biāo)識(shí)符為279。通過"LED"指令診斷擴(kuò)展模塊SM1231 AI4的DIAG指示燈的狀態(tài),輸出參數(shù)RET_VAL("ReturnValue")
為-32622,如圖30所示。該輸出對(duì)應(yīng)16#8092,表示由參數(shù)LADDR尋址的硬件組件不會(huì)返回所需信息。因此,無法通過"LED"指令診斷擴(kuò)展模塊SM1231 AI4。
圖30. "LED"指令執(zhí)行結(jié)果
S7-1200 CPU可以同時(shí)激活多少個(gè)RDREC/WRREC指令?
最多可以同時(shí)使用四條RDREC指令和四條WRREC指令。
RALRM指令必須要在中斷OB中調(diào)用嗎?
由于要檢查的I/O中斷,因此僅在CPU操作系統(tǒng)啟動(dòng)的中斷OB內(nèi)調(diào)用RALRM指令。如果在啟動(dòng)事件不是I/O中斷的OB中調(diào)用RALRM指令,則該指令將在其輸出中提供相應(yīng)精簡(jiǎn)的信息。
需要確保在不同OB中調(diào)用RALRM指令時(shí)使用不同的背景數(shù)據(jù)塊。
使用Gen_UsrMsg指令如何定義文本列表中的相關(guān)值?
在文本列表?xiàng)l目中,可通過添加以下信息定義相關(guān)值:@<關(guān)聯(lián)值的數(shù)量><元素類型><格式規(guī)范>@,如圖31所示:
圖31. 文本列表中定義相關(guān)值
相關(guān)值中的<元素類型>可以通過下表定義,如圖32所示:
圖32. 相關(guān)值中的<元素類型>
相關(guān)值中的<格式規(guī)范>可以通過下表定義,如圖33所示:
圖33. 相關(guān)值中的<格式規(guī)范>
審核編輯:劉清
-
plc
+關(guān)注
關(guān)注
5036文章
13906瀏覽量
474427 -
LED指示燈
+關(guān)注
關(guān)注
2文章
94瀏覽量
13367 -
S7-1200
+關(guān)注
關(guān)注
11文章
333瀏覽量
18620
原文標(biāo)題:西門子: LED、GET_DIAG、RDREC、RALRM、Gen_UsrMsg診斷指令的使用
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
S7-1200與S7-1200/S7-1500不同項(xiàng)目下UDP通信
西門子PLC S7-1200的診斷功能
基于S7-1200的PLC的編程及擴(kuò)展
S7-1200運(yùn)動(dòng)控制的結(jié)構(gòu)及原理

你必須知道的S7-1200 PLC擴(kuò)展模塊
使用DeviceStates指令對(duì)分布式IO子站進(jìn)行診斷

關(guān)于S7-1200和S7-1200之間UDP的通信與仿真

如何利用指令讀取S7-1200 PLC的系統(tǒng)時(shí)間?
S7-1200 CPU與S7-300 CP STEP7 UDP通信
S7-1200 CPU與S7-300 CP TIA UDP通信
S7-1200與S7-300的選型區(qū)別

S7-1200下載項(xiàng)目程序步驟詳解

西門子S7-1200與S7-300PLC之間的區(qū)別有哪些?

評(píng)論