說明
指令“GET_DIAG”用于讀取硬件組件的診斷信息。硬件組件將通過 LADDR 參數(shù)進(jìn)行選擇。通過 MODE 參數(shù),選擇要讀取的診斷信息。MODE=0 時(shí),S7-1200 CPU 將忽略參數(shù) LADDR。
參數(shù)
下表列出了“GET_DIAG”指令的參數(shù):
參數(shù) | 聲明 | 數(shù)據(jù)類型 | 存儲(chǔ)區(qū) | 說明 |
---|---|---|---|---|
MODE | Input | UINT | I、Q、M、D、L 或常量 | 通過 MODE 參數(shù),選擇要輸出的診斷數(shù)據(jù)。 |
LADDR | Input | HW_ANY (UINT) | I、Q、M、L 或常量 | 硬件組件的的硬件 ID |
RET_VAL | Return | INT | I、Q、M、D、L | 指令的狀態(tài) |
CNT_DIAG | Output | UINT | I、Q、M、D、L | 預(yù)留(始終為“0”)。 |
DIAG | InOut | VARIANT | I、Q、M、D、L | 診斷信息與所選模式一致,請(qǐng)參見下表 |
DETAIL | InOut | VARIANT | I、Q、M、D、L | 參數(shù)被隱藏。不要使用此參數(shù)! |
參數(shù) MODE
根據(jù) MODE 參數(shù)中的值,在 DIAG、CNT_DIAG 和 DETAIL 輸出參數(shù)中輸出不同的診斷數(shù)據(jù)。
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(請(qǐng)參見下文描述): MaintenanceState ComponentStateDetail OwnState IOState OperatingState |
0 |
2 | 輸出所尋址硬件對(duì)象中所有從屬組件的狀態(tài)。 |
結(jié)構(gòu) DNN(請(qǐng)參見下文描述): SubordinateState SubordinateIOState DNNmode |
0 |
DIS 結(jié)構(gòu)
參數(shù) MODE = 1 時(shí),以 DIS 結(jié)構(gòu)輸出診斷信息。此時(shí),在變量聲明中輸入系統(tǒng)數(shù)據(jù)類型“DIS”作為數(shù)據(jù)類型。
說明 確定 OperatingState 確定標(biāo)準(zhǔn) CPU 的操作狀態(tài)時(shí),需要選擇 LADDR = 52(CPUExecUnit 的硬件標(biāo)識(shí)符)。 確定標(biāo)準(zhǔn) CPU 的操作狀態(tài)時(shí),需要選擇 LADDR = 65147(Local1~HCPUredCtrl 的硬件標(biāo)識(shí)符)或 LADDR = 65347(Local2~HCPUredCtrl 的硬件標(biāo)識(shí))。 確定 R/H 系統(tǒng)的系統(tǒng)狀態(tài)時(shí),需要選擇 LADDR = 34(Local1~RHSystem 的硬件標(biāo)識(shí)符)。 |
下表列出了各參數(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:Own - 硬件組件可用 1:Application Ready Pending - 無 I/O 訪問 2:Locked by Superordinated - 硬件組件不可訪問 3:Locked by IOController - 硬件組件不可訪問 4:Locked by IOSupervisor - 硬件組件不可訪問 |
- | ||
11 到 14(枚舉) |
0(位 11 = 0,位 12 = 0,位 13 = 0,位 14 = 0):OK - 元素正確。 1(位 11 = 1,位 12 = 0,位 13 = 0,位 14 = 0):Substitute - 該元素將替代為一個(gè)兼容元素。 2(位 11 = 0,位 12 = 1,位 13 = 0,位 14 = 0):Wrong - 該元素將替代為一個(gè)非兼容元素(該元素可訪問,但尚未就緒無法操作)。 3(位 11 = 1,位 12 = 1,位 13 = 0,位 14 = 0):No Submodule - 該元素不存在。 |
- | ||
15 | 預(yù)留(始終為“1”)。 | - | ||
16 到 31 |
CPU 生成的模塊狀態(tài)信息: 第 16 位 = 1:子模塊或模塊已禁用 第 17 位 = 1:激活 CiR 操作 位 18 = 1:輸入不可用 第 19 位 = 1:輸出不可用 位 20 = 1:診斷緩沖區(qū)溢出 位 21 = 1:診斷不可用 位 22 = 1:Partial device failure(帶有 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 | IO not available - 輸入/輸出不可用。 | 如果 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 | Hardware component not reachable - 硬件組件無法訪問。 |
如果 ComponentStateDetail 的位 11 到 14 的值為 3 如果 ComponentStateDetail 的位 7 到 10 的值為 3 或 4 如果位 5 = 1,則所有其它位均為 0。 |
||
位 6 = 1: | Qualified:位 6 = 1:至少一個(gè)合格診斷可用 |
如果 ComponentStateDetail 的位 3 為 1。 在這種情況下,將位 0、2 或 3 置位。 |
||
第 7 位 = 1: | I/O data not available - I/O 數(shù)據(jù)不可用 |
如果 ComponentStateDetail 的位 11 到 14 的值為 2 如果 ComponentStateDetail 的位 7 到 10 的值為 1 或 2 如果 ComponentStateDetail 的位 18 為 1 如果 ComponentStateDetail 的位 19 為 1 |
||
8 到 14 | 預(yù)留(始終為“0”) | - | ||
位 15 |
網(wǎng)絡(luò)/硬件故障 S7-1200:預(yù)留(始終為“0”) S7-1500:如果位 4 = 1 或位 5 = 1: 位 15 = 0:網(wǎng)絡(luò)錯(cuò)誤 位 15 = 1:硬件錯(cuò)誤 |
- | ||
OperatingState | UINT | 枚舉 | - | |
0 | Not Supported - 對(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) | - |
DNN 結(jié)構(gòu)
參數(shù) MODE = 2 時(shí),以 DNN 結(jié)構(gòu)輸出診斷的詳細(xì)信息。此時(shí),在變量聲明中輸入系統(tǒng)數(shù)據(jù)類型“DNN”作為數(shù)據(jù)類型。
下表列出了各參數(shù)值的含義:
參數(shù) | 數(shù)據(jù)類型 | 值 | 說明 |
---|---|---|---|
SubordinateState | UINT | Enum | 從屬組件的狀態(tài)(請(qǐng)參見 DIS 結(jié)構(gòu)的參數(shù) OwnState) |
SubordinateIOState | WORD | Bitarray | 從屬組件的輸入和輸出狀態(tài)(請(qǐng)參見 DIS 結(jié)構(gòu)的參數(shù) IO State) |
DNNmode | WORD | Bitarray |
第 0 位 = 0:診斷已啟用 位 0 = 1:診斷已禁用 位 1 至 15:預(yù)留 |
參數(shù) RET_VAL
錯(cuò)誤代碼* (W#16#...) |
說明 |
---|---|
0 | 無錯(cuò)誤 |
n | DETAIL 參數(shù)中的數(shù)據(jù)區(qū)域太小。未輸出診斷數(shù)據(jù)的所有詳細(xì)信息。 |
8080 | 不支持 MODE 參數(shù)中的值。 |
8081 | 所選模式(參數(shù) MODE)不支持 DIAG 參數(shù)中的類型。 |
8082 | 所選模式(參數(shù) MODE)不支持 DETAIL 參數(shù)中的類型。 |
8090 | LADDR 不存在 |
80C1 | 并行執(zhí)行的資源不足。 |
* 在程序編輯器中,錯(cuò)誤代碼將顯示為整數(shù)或十六進(jìn)制值。有關(guān)切換顯示格式的信息,請(qǐng)參見“另請(qǐng)參見”。 |
示例
在以下示例中,讀取 CPU 的診斷信息。
在全局?jǐn)?shù)據(jù)塊中創(chuàng)建四個(gè)變量和一個(gè)“myDIAG”結(jié)構(gòu)(數(shù)據(jù)類型為 DIS),用于存儲(chǔ)數(shù)據(jù)。
互連該指令的參數(shù),如下所示:
通過參數(shù) LADDR(“myLADDR”)使“GET_DIAG”指令了解 CPU 的硬件標(biāo)識(shí)符。根據(jù)參數(shù) MODE(“diagMODE”)的值“1”,以下幾點(diǎn)適用:
指令將讀取(CPU 的)所尋址硬件對(duì)象的狀態(tài)。
在參數(shù) DIAG(“myDIAG”)中,診斷信息將在結(jié)構(gòu)(DIS 數(shù)據(jù)類型)中輸出。
要了解診斷信息,必須將十六進(jìn)制值轉(zhuǎn)換為二進(jìn)制代碼。通過參數(shù) DIAG(“myDIAG”),指示以下信息:
MaintenanceState:根據(jù)值“0”,CPU 無需維護(hù)。
ComponentStateDetail:根據(jù)十六進(jìn)制值“0000_8000”,位 15 已激活。
OwnState:根據(jù)值“0”,無故障發(fā)生。
IOState:根據(jù)十六進(jìn)制值“0001”,無需維護(hù)。
OperatingState:輸出“0”。
輸出參數(shù) RET_VAL(“returnValue”)用于指示處理無錯(cuò)誤。通過輸出參數(shù) CNT_DIAG(“CountDiagDetails”),指示參數(shù) DETAIL 的“0”診斷詳情已輸出。
注:例如,可以從 ComponentStateDetail 變量單獨(dú)讀取位 3(通道診斷“是/否”)。
尋址該位,如下所示:ComponentStateDetail.%X3
審核編輯:劉清
-
cpu
+關(guān)注
關(guān)注
68文章
10854瀏覽量
211583 -
S7-1200
+關(guān)注
關(guān)注
11文章
331瀏覽量
17957
原文標(biāo)題:VASS06中使用GET_DIAG的用法
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論