通过 KRL 解耦 PROFINET 设备
• IOCTL 命令 1060: ‒ 为了可以在不同的机器人上交替地运行一个设备,需要 IOCTL 命
令 1060 进行解耦。如果该设备仅在一个机器人上运行,也可以使
用该命令。
设备输出端设置在解耦后立即归零。如果将设备短时间断开电源后
又重新接上,则不会恢复输出端设置。• IOCTL 命令 60: ‒ 只在该设备仅在一个机器人上运行时,才能使用该 IOCTL 命令。
只出于兼容性原因,该命令才仍可用。
在解耦时,设备上的输出端设置保持不变。如果将设备短时间断开
电源后又重新接上,则会恢复输出端设置。始终可用 • 勾选:机器人控制器启动时期待设备已被激活。若设备未被激活,将输出故障信息。
• 未勾选:机器人控制器在启动时不检查设备是否已被激活。
已解耦设备的属性
• 若将解耦了的设备与总线或者电源分离开,这不会触发故障。
• 在已解耦的设备上进行的所有输入/输出操作都将保持无效。
• 已解耦的设备不能对读/写故障进行处理。
• 解耦时设备的输入端已被归零。
• 解耦时设备的输入端已被归零。
选项 始终可用
对于带工具更换系统的应用程序,并非所有设备都持续耦合。在冷启动或重新配置 I/O 驱动程序时,解耦的设备将直接触发总线故障。用选项 始终可用可以避免该情况:
• 勾选:错误信息
未勾选:无故障信息
句法
• 在一台机器人上使用该设备时:
RET = IOCTL("PNIO-CTRL",60,用户 ID)
• 在一台或多台机器人上使用该设备时:
RET = IOCTL("PNIO-CTRL",1060,用户 ID)
这里将根据所用的工具给 ID 为 3 的设备解耦:
...
IF (NEXT_TOOL == GRIPPER_1) THEN
RET = IOCTL("PNIO-CTRL",1060,3)
ENDIF
...
2.通过 KRL 耦合 PROFINET 设备
有 2 个具有不同应用和效果的 IOCTL 命令用于耦合:
• IOCTL 命令 1050:为了使设备可以在不同的机器人上交替运行,需要IOCTL 命令 1050 进行耦合。如果该设备仅在一个机器人上运行,也可以使用该命令。
• IOCTL 命令 50:只在该设备仅在一个机器人上运行时,才能使用该IOCTL 命令。只出于兼容性原因,该命令才仍可用。
句法
• 在一台机器人上使用该设备时:
RET= IOCTL("PNIO-CTRL",50,用户 ID)
• 在一台或多台机器人上使用该设备时:
RET= IOCTL("PNIO-CTRL",1050,用户 ID)
这里将根据所用的工具给 ID 为 5 的设备耦合:
...
IF (NEXT_TOOL == GRIPPER_2) THEN
RET = IOCTL("PNIO-CTRL",1050,5)
ENDIF
...
3、通过 KRL 更改耦合 PROFINET 设备的等待时间
有些设备的耦合时间长于其他设备。因此,在机器人控制系统输出错误信息之前,要等待规定的时间。默认情况下,规定的等待时间为 10 秒,可在运行时于程序之内更改。为此,必须在程序中借助 KRL 函数 IOCTL 编程一个更改等待时间的命令。
句法
RET = IOCTL("PNIO-CTRL",32776,等待时间)
素 | 说明 |
RET | 用于保存 KRL 函数 IOCTL 返回值的变量。该变量的数据类型为 INT,在使用之前必须在程序中声明。 |
IOCTL | 用于向总线驱动程序发送命令的 KRL 函数 |
PNIO-CTRL | 总线驱动程序的名称 |
32776 | 用于更改等待时间的 IOCTL 命令 |
等待时间 | 在机器人控制器输出错误信息之前要等待的时间,单位:ms |
返回值:RET
0 | 已成功更改等待时间。 |
-1 | 由于无法访问总线系统,所以未能更改等待时间。 |
示例
在该示例中,将该值设为 15 s (= 15000 ms):
RET = IOCTL("PNIO-CTRL",32776,15000)
4.通过 KRL 查询 PROFINET 设备的状态
说明
运行时,可在一个程序之内查询 PROFINET 设备的状态。为此,必须在程序中借助 KRL 函数 IOCTL 编程一个查询状态的命令。
句法
RET = IOCTL("PNIO-CTRL",70,用户 ID)
元素 | 说明 |
RET | 用于保存 KRL 函数 IOCTL 返还值的变量。该变量的数据类型为 INT,在使用之前必须在程序中声明。 |
IOCTL | 用于向总线驱动程序发送命令的 KRL 函数 |
PNIO-CTRL | 总线驱动程序的名称 |
70 | 用于查询设备状态的 IOCTL 命令 |
用户识别号 | 要查询其状态的设备的用户 ID |
返回值RET
值 | 说明 |
4 | 设备已解耦。 |
5 | 设备已耦合,但出现错误。 |
6 | 设备已耦合且工作正常。 |
7 | 设备已解耦,但内部仍在 PROFINET Controller 中激活。 提示:例如,当用 IOCTL 命令 60 将设备解耦时,会出现这种状态。在这种情况下,PROFINET Controller 会通过 DCP 搜索设备。 |
5.通过 KRL 激活或停用总线故障
在默认情况下激活总线故障。如果出现总线故障,这会导致停止和/或锁定激活命令。借助 KRL 函数 IOCTL 可停用并再次激活总线故障。激活或停用可以在运行时于程序内通过 KRL 执行。
可为一个或多个总线实例停用总线故障。如果总线故障被停用,会有如下表现:
• 总线故障:不停止和/或锁定激活命令
• 总线故障:smartHMI 信息窗口中没有故障信息
• smartHMI 信息窗口中会显示以下信息:
KRC IO 总线错误抑制针对下列总线实例激活:{总线实例}{总线实例}{总线实例}
• 如果总线实例中已出现故障,则无法再次激活总线故障。
该情况下可通过系统变量 $IOBUS_INFO 读取是否出现总线故障。
句法
• 为了停用总线故障:
RET = IOCTL("KRC->PNIO-CTRL", 1, 1)
• 为了激活总线故障:
RET = IOCTL("KRC->PNIO-CTRL", 1, 0)
元素 | 说明 |
RET | 用于保存 KRL 函数 IOCTL 返还值的变量。该变量的数据类型为 INT,在使用之前必须在程序中声明。 |
IOCTL | 用于向总线驱动程序发送命令的 KRL 函数 |
PNIO-CTRL | 总线驱动程序的名称 |
1、1 | 用于停用总线故障的 IOCTL 命令 |
1、0 | 用于激活总线故障的 IOCTL 命令 |
返回值RET
值 | 说明 |
0 | IOCTL 命令成功执行。 |
-1 | 未找到指定的总线驱动程序。 |
-3 | KRL 函数 IOCTL 包含一个错误参数。 |
-4 | 由于出现总线故障,不允许激活。 |
6.通过 KRL 查询机器人控制器的节能模式
运行时,可在一个程序之内查询机器人控制器的节能模式。为此,必须在程序中借助 KRL 函数 IOCTL 编程一个查询节能模式的命令。
句法
RET = IOCTL("PNIO-DEV",1002,0)
元素 | 说明 |
RET | 用于保存 KRL 函数 IOCTL 返回值的变量。该变量的数据类型为 INT,在使用之前必须在程序中声明。 |
IOCTL | 用于向总线驱动程序发送命令的 KRL 函数 |
PNIO-DEV | 总线驱动程序的名称 |
1002 | 用于查询机器人控制器节能模式的 IOCTL 命令 |
返回值RET
值 | 说明 |
-1 | 查询时出现了一个错误。 |
2 | 机器人控制器处于制动器已制动的状态下。 |
240 | 机器人控制器处于 Energy_Saving_Disabled 状态下。 |
255 | 机器人控制器处于 Ready_To_Operate 状态下。 |
256 | PROFIenergy 未初始化。 |
257 | 机器人控制器处于过度状态下 |
通过 KRL 重启总线系统
总线故障后,可在运行时在程序之内重启总线系统。为此,必须在程序中借助KRL 函数 IOCTL 编程一个重启总线系统的命令。
句法
RET = IOCTL("PNIO-CTRL",12,0)
元素 | 说明 |
RET | 用于保存 KRL 函数 IOCTL 返还值的变量。该变量的数据类型为 INT,在使用之前必须在程序中声明。 |
IOCTL | 用于向总线驱动程序发送命令的 KRL 函数 |
PNIO-CTRL | 总线驱动程序的名称 |
12 | 用于重启总线系统的 IOCTL 命令 |
返回值RET
值 | 说明 |
0 | 重启总线系统成功。 |
3 | 重启总线系统失败。 |
7.通过 KRL 查询有故障的 PROFINET 设备数量
运行时,可在一个程序之内查询总线系统上有故障的 PROFINET 设备数量。为此,必须在程序中借助 KRL 函数 IOCTL 编写一个查询故障设备的命令。
RET = IOCTL("PNIO-CTRL",32774,0)
元素 | 说明 |
RET | 用于保存 KRL 函数 IOCTL 返回值的变量。该变量的数据类型为 INT,在使用之前必须在程序中声明。 |
IOCTL | 用于向总线驱动程序发送命令的 KRL 函数 |
PNIO-CTRL | 总线驱动程序的名称 |
32774 | 用于查询故障设备数量的 IOCTL 命令 |
返回值RET
值 | 说明 |
0 | 总线系统上的所有设备功能完好。 |
>0 | 故障设备的数量 |
8.通过 KRL 查询已配置的 PROFINET 设备数量
运行时,可在一个程序之内查询总线系统上已配置的 PROFINET 设备数量。为此,必须在程序中借助 KRL 函数 IOCTL 编写一个查询已配置设备的命令。
句法
RET = IOCTL("PNIO-CTRL",32775,0)
元素 | 说明 |
RET | 用于保存 KRL 函数 IOCTL 返回值的变量。该变量的数据类型为 INT,在使用之前必须在程序中声明。 |
IOCTL | 用于向总线驱动程序发送命令的 KRL 函数 |
PNIO-CTRL | 总线驱动程序的名称 |
32775 | 用于查询已配置设备数量的 IOCTL 命令 |
返回值RET
值 | 说明 |
-1 | 执行 IOCTL 命令时出错。 |
>0 | 已配置设备的数量 |