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