快换的Profinet对接使用方式
同一个设备可以在不同的机器人上交替运行。为此必须使用其他的 IOCTL 功能进行解耦和耦合。如果一个设备仅在一个机器人上运行,则也可以使用这些 IOCTL 功能。其他 IOCTL 功能只能为了兼容的原因而使用。
l 在带有工具更换系统的应用中,绝不能将总线用户持久地耦合在工业以太网上。
l 在冷启动或在一个输入 / 输出端配置时,在该情况下这将直接导致工业以太网故障。
l 关闭始终可用这一功能可以防止这些设备在冷启动后或者重新配置输入 /输出端后被逻辑耦合进工业以太网。
l 这些已被停用的设备可以在以后程序运行时毫无问题地重新耦合进来。
l 但是在项目设置时必须考虑到,将所有工具在物理和逻辑上集入进工业以太网项目。
解耦 --已解耦设备的属性:
l 若将已解耦的设备与工业以太网或者电源分离开,这不会触发故障。
l 在已解耦的设备上进行的所有 IO 操作都无效。
l 已解耦的设备不能对读 / 写故障进行处理。
l 解耦时设备的输入端已被归零。
耦合
IOCTL 函数是同步执行的。当设备重新可以使用并可写入时,该函数才返回。耦合的设备不可用时,例如因为它与总线或电源断开了,在超时 ( 默认 10 秒) 后显示一条提示信息。
菜单路径:项目结构 > ProfiNet > 用鼠标双击 > 设备设定
通过勾选将设备设置为始终可用或者取消此设置。
选项 “始终可用” 会影响机器人控制系统在冷启动或在重新配置 I/O 驱动程序时对于已解耦设备的反应。”始终可用”可在 WorkVisual 内的设备数据中设置。
如果设备没有勾选选项 始终可用,则设备在重启时或在重新配置 I/O 驱动程序时自动解耦。为了与设备建立连接,必须用 IOCTL 功能重新耦合设备。
通过 HMI 耦合和解耦现场总线用户
1.选择菜单序列显示 > 变量 > 单个。
2.2. 在 名称栏输入:
解耦时:
在一台机器人上使用该设备时:
=IOCTL("PNIO-CTRL",60,[ 用户识别号 ])
在一台或多台机器人上使用该设备时:
=IOCTL("PNIO-CTRL",1060,[ 用户识别号 ])
耦合时:
在一台机器人上使用该设备时:
=IOCTL("PNIO-CTRL",50,[ 用户识别号 ])
在一台或多台机器人上使用该设备时:
=IOCTL("PNIO-CTRL",1050,[ 用户识别号 ])
IOCTL :用于耦合和解耦的 系统变量
PNIO-CTRL :通过 ProfiNet 驱动程序名 调用
50/1050 = 调用耦合
60/1060 = 调用解耦
用户识别号 要耦合或解耦的模块的设备编号 / 用户识别号
在单个变量显示中,执行每个IOCTL 指令后,在当前值窗口内以数字的形式显示一个返还值。此数字有下列不同的含义:
l0 :IOCTL 已成功执行。
l1 :超时 — 设备未能在规定时间内耦合或解耦。
l2 :IOCTL 包含一个不正确的参数 — 请检查输入!
l-1 :故障 — 无法执行指令。
IOCTL 功能是同步执行的。当设备重新可以使用并可写入时,才能再次执行 IOCTL 功能。
若耦合的设备不可用,例如因为它与总线或电源断开了,则将在超时后显示一条信息。
若规定的用于耦合或解耦的时间设计得太短,可以重新设定超时。标准设置为 10 秒,即 10000 毫秒
RET = IOCTL("PNIO-CTRL",1001,10000)
询问设备状态:
用 IOCTL 函数 70 可以询问从属设备的状态。
RET = IOCTL("PNIO-CTRL",70,[ 用户 ID] )
RET 的返回值:
l4 :设备已解耦。
l5 :设备已耦合,但出现错误。
l6 :设备已耦合且无错误。
l7 :设备已解耦,但内部仍在 PROFINET Controller 中激活。
通过激活或停用总线故障
在默认情况下激活总线故障。如果出现总线故障,这会导致停止和/或锁定激活命令。借助 KRL 函数 IOCTL 可停用并再次激活总线故障。激活或停用可以在运行时于程序内通过 KRL 执行。可为一个或多个总线实例停用总线故障。如果总线故障被停用,会有如下表现:• 总线故障: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 命令 |
$IOBUS_INFO[]包含网络信息的结构
$IOBUS_INFO[指数 ]=信息
Iobus_Info_T STRUC Iobus_Info_T CHAR name[256], drv_name[256], BOOL bus_ok, bus_installed
name[] | 总线实例的名称,例如SYS-X44 |
drv_name[] | 网络驱动控制的名称,例如ECat.DRV |
bus_ok | TRUE:总线驱动器正常。 FALSE:总线驱动程序有故障或不兼容。 |
bus_installed | TRUE:总线驱动程序已安装。 FALSE:未安装总线驱动程序。 |
总线故障后,可在运行时在程序之内重启总线系统。为此,必须在程序中借助KRL 函数 IOCTL 编程一个重启总线系统的命令。
RET = IOCTL("PNIO-CTRL",12,0)
;FOLD PTP VB=100% VE=0% ACC=100% RobWzg=32 Base=0 SPSTrig=5[1/100s] P ;%{P}%MKUKATPVW,%CMOVE8,%VPTP,%P 1:1, 2: VB=, 3:100, 4:%, 5: VE=, 6:0, 7:%, 8: ACC=, 9:100, 10:%, 11: RobWzg=, 12:32, 13: Base=, 14:0, 15: SPSTrig=, 16:5, 17:[1/100s], 18: P, 19:5, 20:-1, 21:5 ;FOLD 1: FB PSPS = EIN ;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = EIN,3:FBPSPS ;FOLD 2: A23 = AUS ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = AUS,3:BOASG ;FOLD 3: WARTE BIS E23 ;%{SE}%MKUKATPVW %CVW_SPS %VWBOASG %P 2:WARTE BIS E23,3:WBOASG ;FOLD 4: A23 = EIN ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = EIN,3:BOASG ;FOLD 5: -- 快换故障复位 -- ;%{SE}%MKUKATPVW %CVW_COM %VCOMMENT %P 2:-- DK Fehler Reset --,3:VW_COMMENT ;FOLD 6: SPSMAKRO422 = !E540 --没有准备就绪就复位快换设备;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO422 = !E540,3:MAKRO ;FOLD 7: A539 = EIN ---快换头解锁气缸打开---;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A539 = EIN,3:BOASG ;FOLD 8: WARTE BIS !E538 & E539 & E540 & E552 & E553 ;%{SE}%MKUKATPVW %CVW_SPS %VWBOASG %P 2:WARTE BIS !E538 & E539 & E540 & E552 & E553,3:WBOASG ;FOLD 9: FB PSPS = !E538 & E539 & E540 & E552 & E553;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = !E538 & E539 & E540 & E552 & E553,3:FBPSPS ;FOLD LIN VB=150[mm/s] VE=0% ACC=100% RobWzg=32 Base=0 SPSTrig=5[1/100s] P ;%{P}%MKUKATPVW,%CMOVE8,%VLIN,%P 1:2, 2: VB=, 3:150, 4:[mm/s], 5: VE=, 6:0, 7:%, 8: ACC=, 9:100, 10:%, 11: RobWzg=, 12:32, 13: Base=, 14:0, 15: SPSTrig=, 16:5, 17:[1/100s], 18: P, 19:6, 20:-1, 21:6 ;FOLD 1: FB PSPS = EIN 初始化SPS过程诊断;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = EIN,3:FBPSPS ;FOLD 2: A23 = AUS ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = AUS,3:BOASG ;FOLD 3: F62 = AUS 用来在快换过程中接通水配合MAKRO421里的F283!;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:F62 = AUS,3:BOASG ;FOLD 4: -- Makro422用来快换设备复位 --;%{SE}%MKUKATPVW %CVW_COM %VCOMMENT %P 2:-- DK Fehler Reset --,3:VW_COMMENT ;FOLD 5: SPSMAKRO422 = !E540 没有准备就绪就复位快换设备;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO422 = !E540,3:MAKRO ;FOLD 6: -- DK 快换设备接站--;%{SE}%MKUKATPVW %CVW_COM %VCOMMENT %P 2:-- DK andocken --,3:VW_COMMENT ;FOLD 7: SPSMAKRO421 = EIN ---快换头气缸抓取;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO421 = EIN,3:MAKRO ;FOLD 8: TECH3_ PN-Docken ID-Nr =205 Zuschalten EIN 网络连接;%{SE}%MKUKATPVW %CVW_SPS %VUSER %P 2:TECH3_.PN-Docken P1= 205 P2= 50 P3= 1 P4= 1 P5= 1 P6= 1 P7=EIN P8=301,3:USER ;FOLD 9: WARTE ( EIN ) ZEIT 5 [1/10Sek];%{SE}%MKUKATPVW %CVW_SPS %VWTASG %P 2:WARTE ( EIN ) ZEIT 5 [1/10Sek],3:WTASG ;FOLD LIN VB=150[mm/s] VE=0% ACC=100% RobWzg=4 Base=0 SPSTrig=5[1/100s] P ;%{P}%MKUKATPVW,%CMOVE8,%VLIN,%P 1:2, 2: VB=, 3:150, 4:[mm/s], 5: VE=, 6:0, 7:%, 8: ACC=, 9:100, 10:%, 11: RobWzg=, 12:4, 13: Base=, 14:0, 15: SPSTrig=, 16:5, 17:[1/100s], 18: P, 19:6, 20:-1, 21:6 ;FOLD 1: FB PSPS = EIN ;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = EIN,3:FBPSPS ;FOLD 2: A23 = AUS ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = AUS,3:BOASG ;FOLD 3: F62 = EIN 用来在快换过程中关闭水配合MAKRO421里的F283!;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:F62 = AUS,3:BOASG ;ENDFOLD;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:F62 = EIN,3:BOASG ;ENDFOLD ;FOLD 4: TECH3_ PN-Docken ID-Nr =205 Abschalten EIN 网络断开 ;FOLD 5: WARTE ( EIN ) ZEIT 5 [1/10Sek] ;%{SE}%MKUKATPVW %CVW_SPS %VWTASG %P 2:WARTE ( EIN ) ZEIT 5 [1/10Sek],3:WTASG ;FOLD 6: WARTE BIS E23 & E551 ;%{SE}%MKUKATPVW %CVW_SPS %VWBOASG %P 2:WARTE BIS E23 & E551,3:WBOASG ;FOLD 7: A23 = EIN ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = EIN,3:BOASG ;FOLD 8: SPSMAKRO422 = !E540 没有准备就绪就复位快换设备;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO422 = !E540,3:MAKRO ;FOLD 9: SPSMAKRO420 = EIN DK 快换设备气缸打开;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO420 = EIN,3:MAKRO ;FOLD 10: FB PSPS = E547 & !E548 & E551 & M30 ;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = E547 & !E548 & E551 & M30,3:FBPSPS TRIGGER WHEN DISTANCE=1 DELAY=-50 DO SPS_TRIG(6) PRIO=-1 VW_USER (#USR_ADV,301,205,60,1,1,1,1,TRUE) VW_USR_R (#USR_ADV,301,205,60,1,1,1,1,TRUE) VW_USER (#USR_MAIN,301,205,60,1,1,1,1,TRUE) VW_USR_R (#USR_MAIN,301,205,60,1,1,1,1,TRUE) ;FOLD – 离开了放工具的问题 -- ;%{PSE}%MKUKATPVW,%CVW_COM,%VCOMMENT,%P 1:Comment:, 2:After Undock Position M_COMMENT("After Undock Position") ;FOLD LIN VB=150[mm/s] VE=100% ACC=100% RobWzg=32 Base=0 SPSTrig=0[1/100s] P ;%{P}%MKUKATPVW,%CMOVE8,%VLIN,%P 1:2, 2: VB=, 3:150, 4:[mm/s], 5: VE=, 6:100, 7:%, 8: ACC=, 9:100, 10:%, 11: RobWzg=, 12:32, 13: Base=, 14:0, 15: SPSTrig=, 16:0, 17:[1/100s], 18: P, 19:7, 20:-1, 21:7 ;FOLD 1: FB PSPS = EIN ;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = EIN,3:FBPSPS ;FOLD 2: A539 = AUS 关闭解锁气缸;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A539 = AUS,3:BOASG ;FOLD 3: FB PSPS = E547 & ! E548 & E551 & M30 ;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = E547 & ! E548 & E551 & M30,3:FBPSPS;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = E547 & !E548 & M30 & M81 & M174,3:FBPSPSTECH3_ PN-Docken ID-Nr =225 Abschalten EIN–断开网络VW_USR_R (#USR_ADV,301,225,60,1,1,1,1,TRUE)TECH3_ PN-Docken ID-Nr =225 Zuschalten EIN–接通网络VW_USR_R (#USR_ADV,301,225,50,1,1,1,1,TRUE) Ret=ioctl("PNIO-CTRL",50,par1)接通网络SWITCH DockBhf–快换站的工具检测(最多使用3个工具站!)CASE 'B000001' 1号快换站没有检测到有件IF DOCK_SZ THEN-使用快换伺服焊钳- $softplcint[1]=ActDockAx(1)-激活焊钳软PLC控制号=7 $softplcint[4]=ActDockAx(1)=7 $softplcint[6]=ActDockAx(1)=7CASE 'B000010' 2号快换站没有检测到有件IF DOCK_SZ AND NOT DOCK_SP AND NOT S_DockingTHEN $softplcint[1]=ActDockAx(2) 用于激活快换2号焊钳=8 ENDIF–带两把焊钳子,用两个站DOCK_SP-S_Docking不带抓持器 IF DOCK_SZ AND DOCK_SP AND NOT S_DockingTHEN $softplcint[2]=ActDockAx(2) 2号站是2号快换焊钳 =8 ENDIF–带两把焊钳子,用一个站-S_Docking不带抓持器IF DOCK_NZ AND NOT S_DockingTHEN 第二把伺服铆钳带钉 $softplcint[5]=ActDockAx(2) =8IF DOCK_CZ AND NOT S_DockingTHEN第二把伺服铆钳无钉 $softplcint[7]=ActDockAx(2) =8CASE 'B000100'-3号快换站没有检测到有件,IF DOCK_SZ AND NOT DOCK_SP AND NOT ReserveBool[49] AND NOT ReserveBool[50] THEN $softplcint[1]=ActDockAx(3) 用于激活快换3号焊钳 =9IF DOCK_SZ AND DOCK_SP AND NOT ReserveBool[49] AND NOT ReserveBool[50] THEN 使用第3把焊钳 $softplcint[3]=ActDockAx(3) =9 ENDIF
ENDSWITCH
CASE 60 60断开网络
SWITCHDockBhf
CASE 'B000000' -工具站上全是工具-头上在放工具
IF DOCK_SZ AND NOT DOCK_SP THEN-带2焊钳用2地址
SetPlcIntNull(1) 设置软PLC归0
ENDIF
IF DOCK_SZ AND DOCK_SP THEN-带3焊钳
SetPlcIntNull(1) 设置软PLC归0
SetPlcIntNull(2)
ENDIF
IF DOCK_NZ THEN 伺服铆钳带钉
SetPlcIntNull(4) 设置软PLC归0
SetPlcIntNull(5)
ENDIF
IF DOCK_CZ THEN 伺服铆钳无钉
SetPlcIntNull(6) 设置软PLC归0
SetPlcIntNull(7)
ENDIF
DEFAULT 工具站上在关网时没有检测到工具!则信息提示
SyncMoveMessage(8, #QuitMsg) 移动信息提示:”快换站:几个工具站没有被占用”
ENDSWITCH
Ret=ioctl("PNIO-CTRL",60,par1)-断开网络
DEFAULT 如果不是50和60
MLD(21,#QuitMsg); 提示信息P2设置错误
ENDSWITCH
SWITCH ret 接通关闭,反馈值
CASE0 ;
IF PAR2==50 THEN ------接通
IF $OUT[O_R_Hand] THEN-A11机器人手动
MLD(90,#NotifyMsg) -"PNIO Teilnehmer angedockt"提示90 PN设备连接上
ELSE
ENDIF
ENDIF
IF PAR2==60 THEN ------断开
IF $OUT[O_R_Hand] THEN
MLD(91,#NotifyMsg) -"PNIO Teilnehmer abgedockt"提示91 PN设备断开
ELSE
ENDIF
ENDIF
CASE1 ; ---连接超时
MLD(92,#QuitMsg) - "Timeout bei Docking" 快换头连接超时-
CASE2 ;
MLD(93,#QuitMsg)-"IOCTL falscher Parameter" IOCTL 参数设置错误-
DEFAULT
ENDSWITCH
ENDIF
;ENDFOLD
------------------------------END-----------------------------
每天进步一点点
Make small but daily progress