通過 KRL 解耦 PROFINET 設(shè)備
?? | IOCTL 命令 1060: |
? |
為了可以在不同的機(jī)器人上交替地運(yùn)行一個(gè)設(shè)備,需要 IOCTL 命 令 1060 進(jìn)行解耦。如果該設(shè)備僅在一個(gè)機(jī)器人上運(yùn)行,也可以使 用該命令。 設(shè)備輸出端設(shè)置在解耦后立即歸零。如果將設(shè)備短時(shí)間斷開電源后 又重新接上,則不會恢復(fù)輸出端設(shè)置。 |
? | IOCTL 命令 60: |
? |
只在該設(shè)備僅在一個(gè)機(jī)器人上運(yùn)行時(shí),才能使用該 IOCTL 命令。 只出于兼容性原因,該命令才仍可用。 在解耦時(shí),設(shè)備上的輸出端設(shè)置保持不變。如果將設(shè)備短時(shí)間斷開 電源后又重新接上,則會恢復(fù)輸出端設(shè)置。 |
?
?
?
始終可用 |
? 勾選:機(jī)器人控制器啟動時(shí)期待設(shè)備已被激活。若設(shè)備未被激活,將輸出故障信息。 ? 未勾選:機(jī)器人控制器在啟動時(shí)不檢查設(shè)備是否已被激活。 |
已解耦設(shè)備的屬性
? 若將解耦了的設(shè)備與總線或者電源分離開,這不會觸發(fā)故障。
? 在已解耦的設(shè)備上進(jìn)行的所有輸入/輸出操作都將保持無效。
? 已解耦的設(shè)備不能對讀/寫故障進(jìn)行處理。
? 解耦時(shí)設(shè)備的輸入端已被歸零。
? 解耦時(shí)設(shè)備的輸入端已被歸零。
選項(xiàng) 始終可用
對于帶工具更換系統(tǒng)的應(yīng)用程序,并非所有設(shè)備都持續(xù)耦合。在冷啟動或重新配置 I/O 驅(qū)動程序時(shí),解耦的設(shè)備將直接觸發(fā)總線故障。用選項(xiàng) 始終可用可以避免該情況:
? 勾選:錯(cuò)誤信息
未勾選:無故障信息
句法
? 在一臺機(jī)器人上使用該設(shè)備時(shí):
RET = IOCTL("PNIO-CTRL",60,用戶 ID)
? 在一臺或多臺機(jī)器人上使用該設(shè)備時(shí):
RET = IOCTL("PNIO-CTRL",1060,用戶 ID)
這里將根據(jù)所用的工具給 ID 為 3 的設(shè)備解耦:
...
IF (NEXT_TOOL == GRIPPER_1) THEN
RET = IOCTL("PNIO-CTRL",1060,3)
ENDIF
...
2.通過 KRL 耦合 PROFINET 設(shè)備
有 2 個(gè)具有不同應(yīng)用和效果的 IOCTL 命令用于耦合:
? IOCTL 命令 1050:為了使設(shè)備可以在不同的機(jī)器人上交替運(yùn)行,需要IOCTL 命令 1050 進(jìn)行耦合。如果該設(shè)備僅在一個(gè)機(jī)器人上運(yùn)行,也可以使用該命令。
? IOCTL 命令 50:只在該設(shè)備僅在一個(gè)機(jī)器人上運(yùn)行時(shí),才能使用該IOCTL 命令。只出于兼容性原因,該命令才仍可用。
句法
? 在一臺機(jī)器人上使用該設(shè)備時(shí):
RET= IOCTL("PNIO-CTRL",50,用戶 ID)
? 在一臺或多臺機(jī)器人上使用該設(shè)備時(shí):
RET= IOCTL("PNIO-CTRL",1050,用戶 ID)
這里將根據(jù)所用的工具給 ID 為 5 的設(shè)備耦合:
...
IF (NEXT_TOOL == GRIPPER_2) THEN
RET = IOCTL("PNIO-CTRL",1050,5)
ENDIF
...
3、通過 KRL 更改耦合 PROFINET 設(shè)備的等待時(shí)間
有些設(shè)備的耦合時(shí)間長于其他設(shè)備。因此,在機(jī)器人控制系統(tǒng)輸出錯(cuò)誤信息之前,要等待規(guī)定的時(shí)間。默認(rèn)情況下,規(guī)定的等待時(shí)間為 10 秒,可在運(yùn)行時(shí)于程序之內(nèi)更改。為此,必須在程序中借助 KRL 函數(shù) IOCTL 編程一個(gè)更改等待時(shí)間的命令。
句法
RET = IOCTL("PNIO-CTRL",32776,等待時(shí)間)
?
素 | 說明 |
RET | 用于保存 KRL 函數(shù) IOCTL 返回值的變量。該變量的數(shù)據(jù)類型為 INT,在使用之前必須在程序中聲明。 |
IOCTL | 用于向總線驅(qū)動程序發(fā)送命令的 KRL 函數(shù) |
PNIO-CTRL | 總線驅(qū)動程序的名稱 |
32776 | 用于更改等待時(shí)間的 IOCTL 命令 |
等待時(shí)間 | 在機(jī)器人控制器輸出錯(cuò)誤信息之前要等待的時(shí)間,單位:ms |
?
返回值:RET
?
0 | 已成功更改等待時(shí)間。 |
-1 | 由于無法訪問總線系統(tǒng),所以未能更改等待時(shí)間。 |
?
示例
在該示例中,將該值設(shè)為 15 s (= 15000 ms):
RET = IOCTL("PNIO-CTRL",32776,15000)
4.通過 KRL 查詢 PROFINET 設(shè)備的狀態(tài)
說明
運(yùn)行時(shí),可在一個(gè)程序之內(nèi)查詢 PROFINET 設(shè)備的狀態(tài)。為此,必須在程序中借助 KRL 函數(shù) IOCTL 編程一個(gè)查詢狀態(tài)的命令。
句法
RET = IOCTL("PNIO-CTRL",70,用戶 ID)
?
元素 | 說明 |
RET | 用于保存 KRL 函數(shù) IOCTL 返還值的變量。該變量的數(shù)據(jù)類型為 INT,在使用之前必須在程序中聲明。 |
IOCTL | 用于向總線驅(qū)動程序發(fā)送命令的 KRL 函數(shù) |
PNIO-CTRL | 總線驅(qū)動程序的名稱 |
70 | 用于查詢設(shè)備狀態(tài)的 IOCTL 命令 |
用戶識別號 | 要查詢其狀態(tài)的設(shè)備的用戶 ID |
?
返回值RET
?
值 | 說明 |
4 | 設(shè)備已解耦。 |
5 | 設(shè)備已耦合,但出現(xiàn)錯(cuò)誤。 |
6 | 設(shè)備已耦合且工作正常。 |
7 |
設(shè)備已解耦,但內(nèi)部仍在 PROFINET Controller 中激活。 提示:例如,當(dāng)用 IOCTL 命令 60 將設(shè)備解耦時(shí),會出現(xiàn)這種狀態(tài)。在這種情況下,PROFINET Controller 會通過 DCP 搜索設(shè)備。 |
?
5.通過 KRL 激活或停用總線故障
在默認(rèn)情況下激活總線故障。如果出現(xiàn)總線故障,這會導(dǎo)致停止和/或鎖定激活命令。借助 KRL 函數(shù) IOCTL 可停用并再次激活總線故障。激活或停用可以在運(yùn)行時(shí)于程序內(nèi)通過 KRL 執(zhí)行。
可為一個(gè)或多個(gè)總線實(shí)例停用總線故障。如果總線故障被停用,會有如下表現(xiàn):
? 總線故障:不停止和/或鎖定激活命令
? 總線故障:smartHMI 信息窗口中沒有故障信息
? smartHMI 信息窗口中會顯示以下信息:
KRC IO 總線錯(cuò)誤抑制針對下列總線實(shí)例激活:{總線實(shí)例}{總線實(shí)例}{總線實(shí)例}
? 如果總線實(shí)例中已出現(xiàn)故障,則無法再次激活總線故障。
該情況下可通過系統(tǒng)變量 $IOBUS_INFO 讀取是否出現(xiàn)總線故障。
句法
? 為了停用總線故障:
RET = IOCTL("KRC->PNIO-CTRL", 1, 1)
? 為了激活總線故障:
RET = IOCTL("KRC->PNIO-CTRL", 1, 0)
?
元素 | 說明 |
RET | 用于保存 KRL 函數(shù) IOCTL 返還值的變量。該變量的數(shù)據(jù)類型為 INT,在使用之前必須在程序中聲明。 |
IOCTL | 用于向總線驅(qū)動程序發(fā)送命令的 KRL 函數(shù) |
PNIO-CTRL | 總線驅(qū)動程序的名稱 |
1、1 | 用于停用總線故障的 IOCTL 命令 |
1、0 | 用于激活總線故障的 IOCTL 命令 |
?
返回值RET
?
值 | 說明 |
0 | IOCTL 命令成功執(zhí)行。 |
-1 | 未找到指定的總線驅(qū)動程序。 |
-3 | KRL 函數(shù) IOCTL 包含一個(gè)錯(cuò)誤參數(shù)。 |
-4 | 由于出現(xiàn)總線故障,不允許激活。 |
?
6.通過 KRL 查詢機(jī)器人控制器的節(jié)能模式
運(yùn)行時(shí),可在一個(gè)程序之內(nèi)查詢機(jī)器人控制器的節(jié)能模式。為此,必須在程序中借助 KRL 函數(shù) IOCTL 編程一個(gè)查詢節(jié)能模式的命令。
句法
RET = IOCTL("PNIO-DEV",1002,0)
?
元素 | 說明 |
RET | 用于保存 KRL 函數(shù) IOCTL 返回值的變量。該變量的數(shù)據(jù)類型為 INT,在使用之前必須在程序中聲明。 |
IOCTL | 用于向總線驅(qū)動程序發(fā)送命令的 KRL 函數(shù) |
PNIO-DEV | 總線驅(qū)動程序的名稱 |
1002 | 用于查詢機(jī)器人控制器節(jié)能模式的 IOCTL 命令 |
?
返回值RET
?
值 | 說明 |
-1 | 查詢時(shí)出現(xiàn)了一個(gè)錯(cuò)誤。 |
2 | 機(jī)器人控制器處于制動器已制動的狀態(tài)下。 |
240 | 機(jī)器人控制器處于 Energy_Saving_Disabled 狀態(tài)下。 |
255 | 機(jī)器人控制器處于 Ready_To_Operate 狀態(tài)下。 |
256 | PROFIenergy 未初始化。 |
257 | 機(jī)器人控制器處于過度狀態(tài)下 |
?
通過 KRL 重啟總線系統(tǒng)
總線故障后,可在運(yùn)行時(shí)在程序之內(nèi)重啟總線系統(tǒng)。為此,必須在程序中借助KRL 函數(shù) IOCTL 編程一個(gè)重啟總線系統(tǒng)的命令。
句法
RET = IOCTL("PNIO-CTRL",12,0)
?
元素 | 說明 |
RET | 用于保存 KRL 函數(shù) IOCTL 返還值的變量。該變量的數(shù)據(jù)類型為 INT,在使用之前必須在程序中聲明。 |
IOCTL | 用于向總線驅(qū)動程序發(fā)送命令的 KRL 函數(shù) |
PNIO-CTRL | 總線驅(qū)動程序的名稱 |
12 | 用于重啟總線系統(tǒng)的 IOCTL 命令 |
?
返回值RET
?
值 | 說明 |
0 | 重啟總線系統(tǒng)成功。 |
3 | 重啟總線系統(tǒng)失敗。 |
?
7.通過 KRL 查詢有故障的 PROFINET 設(shè)備數(shù)量
運(yùn)行時(shí),可在一個(gè)程序之內(nèi)查詢總線系統(tǒng)上有故障的 PROFINET 設(shè)備數(shù)量。為此,必須在程序中借助 KRL 函數(shù) IOCTL 編寫一個(gè)查詢故障設(shè)備的命令。
RET = IOCTL("PNIO-CTRL",32774,0)
?
元素 | 說明 |
RET | 用于保存 KRL 函數(shù) IOCTL 返回值的變量。該變量的數(shù)據(jù)類型為 INT,在使用之前必須在程序中聲明。 |
IOCTL | 用于向總線驅(qū)動程序發(fā)送命令的 KRL 函數(shù) |
PNIO-CTRL | 總線驅(qū)動程序的名稱 |
32774 | 用于查詢故障設(shè)備數(shù)量的 IOCTL 命令 |
?
返回值RET
?
值 | 說明 |
0 | 總線系統(tǒng)上的所有設(shè)備功能完好。 |
>0 | 故障設(shè)備的數(shù)量 |
?
8.通過 KRL 查詢已配置的 PROFINET 設(shè)備數(shù)量
運(yùn)行時(shí),可在一個(gè)程序之內(nèi)查詢總線系統(tǒng)上已配置的 PROFINET 設(shè)備數(shù)量。為此,必須在程序中借助 KRL 函數(shù) IOCTL 編寫一個(gè)查詢已配置設(shè)備的命令。
句法
RET = IOCTL("PNIO-CTRL",32775,0)
?
元素 | 說明 |
RET | 用于保存 KRL 函數(shù) IOCTL 返回值的變量。該變量的數(shù)據(jù)類型為 INT,在使用之前必須在程序中聲明。 |
IOCTL | 用于向總線驅(qū)動程序發(fā)送命令的 KRL 函數(shù) |
PNIO-CTRL | 總線驅(qū)動程序的名稱 |
32775 | 用于查詢已配置設(shè)備數(shù)量的 IOCTL 命令 |
?
返回值RET
?
值 | 說明 |
-1 | 執(zhí)行 IOCTL 命令時(shí)出錯(cuò)。 |
>0 | 已配置設(shè)備的數(shù)量 |
?
審核編輯:黃飛
評論
查看更多