DOCK之profinet的对接快换耦合V3.17

科技   科技   2024-11-17 20:18   吉林  

快换的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 信息窗口中没有故障信息
• 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[指数 ]=信息

指数
类型:INT
网络编号
 1 … 32
序列号会自动分配给总线驱动器。

信息

类型:Iobus_Info_T
包含网络信息信息的列表

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 重启总线系统

总线故障后,可在运行时在程序之内重启总线系统。为此,必须在程序中借助KRL 函数 IOCTL 编程一个重启总线系统的命令。

RET = IOCTL("PNIO-CTRL",12,0)

12用于重启总线系统的 IOCTL 命令


接网的程序方式分析:
   ;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
      ;ENDFOLD
      ;FOLD 2: A23 = AUS ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = AUS,3:BOASG
      ;ENDFOLD
      ;FOLD 3: WARTE BIS E23 ;%{SE}%MKUKATPVW %CVW_SPS %VWBOASG %P 2:WARTE BIS E23,3:WBOASG
      ;ENDFOLD
      ;FOLD 4: A23 = EIN ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = EIN,3:BOASG
      ;ENDFOLD
      ;FOLD 5: -- 快换故障复位 -- ;%{SE}%MKUKATPVW %CVW_COM %VCOMMENT %P 2:-- DK Fehler Reset --,3:VW_COMMENT
      ;ENDFOLD
      ;FOLD 6: SPSMAKRO422 = !E540 --没有准备就绪就复位快换设备;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO422 = !E540,3:MAKRO
      ;ENDFOLD
      ;FOLD 7: A539 = EIN ---快换头解锁气缸打开---;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A539 = EIN,3:BOASG
      ;ENDFOLD
      ;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
      ;ENDFOLD
      ;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
      ;ENDFOLD
   ;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
      ;ENDFOLD
      ;FOLD 2: A23 = AUS ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = AUS,3:BOASG
      ;ENDFOLD
      ;FOLD 3: F62 = AUS  用来在快换过程中接通水配合MAKRO421里的F283!;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:F62 = AUS,3:BOASG
      ;ENDFOLD
      ;FOLD 4: -- Makro422用来快换设备复位 --;%{SE}%MKUKATPVW %CVW_COM %VCOMMENT %P 2:-- DK Fehler Reset --,3:VW_COMMENT
      ;ENDFOLD
      ;FOLD 5: SPSMAKRO422 = !E540   没有准备就绪就复位快换设备;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO422 = !E540,3:MAKRO
      ;ENDFOLD
      ;FOLD 6: -- DK 快换设备接站--;%{SE}%MKUKATPVW %CVW_COM %VCOMMENT %P 2:-- DK andocken --,3:VW_COMMENT
      ;ENDFOLD
      ;FOLD 7: SPSMAKRO421 = EIN  ---快换头气缸抓取;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO421 = EIN,3:MAKRO
      ;ENDFOLD
      ;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
      ;ENDFOLD
      ;FOLD 9: WARTE ( EIN ) ZEIT 5 [1/10Sek]


;%{SE}%MKUKATPVW %CVW_SPS %VWTASG %P 2:WARTE ( EIN ) ZEIT 5 [1/10Sek],3:WTASG
      ;ENDFOLD
断网的程序方式分析:
   ;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
      ;ENDFOLD
      ;FOLD 2: A23 = AUS ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = AUS,3:BOASG
      ;ENDFOLD
      ;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
      ;ENDFOLD
      ;FOLD 6: WARTE BIS E23 & E551  ;%{SE}%MKUKATPVW %CVW_SPS %VWBOASG %P 2:WARTE BIS E23 & E551,3:WBOASG
      ;ENDFOLD
      ;FOLD 7: A23 = EIN ;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A23 = EIN,3:BOASG
      ;ENDFOLD
      ;FOLD 8: SPSMAKRO422 = !E540  没有准备就绪就复位快换设备;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO422 = !E540,3:MAKRO
      ;ENDFOLD
      ;FOLD 9: SPSMAKRO420 = EIN  DK 快换设备气缸打开;%{SE}%MKUKATPVW %CVW_SPS %VMAKRO %P 2:SPSMAKRO420 = EIN,3:MAKRO
      ;ENDFOLD
      ;FOLD 10: FB PSPS = E547 & !E548 & E551 & M30 ;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = E547 & !E548 & E551 & M30,3:FBPSPS
      ;ENDFOLD
      ;FOLD 

         VW_MPARA_ACT=P6_D
         Act_P1 = P6
         Act_P2 = P6
         VW(#MPARA,TRUE)
         SPS_FERTIG=FALSE
         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)
         LIN P6
         $ADVANCE=1
         WAIT FOR SPS_FERTIG
         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)
      ;ENDFOLD
   ;ENDFOLD
   ;FOLD 离开了放工具的问题 -- ;%{PSE}%MKUKATPVW,%CVW_COM,%VCOMMENT,%P 1:Comment:, 2:After Undock Position
      ;FOLD {H}
         M_COMMENT("After Undock Position")
      ;ENDFOLD
   ;ENDFOLD
   ;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
      ;ENDFOLD
      ;FOLD 2: A539 = AUS   关闭解锁气缸;%{SE}%MKUKATPVW %CVW_SPS %VBOASG %P 2:A539 = AUS,3:BOASG
      ;ENDFOLD
      ;FOLD 3: FB PSPS = E547 & ! E548 & E551 & M30 ;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = E547 & ! E548 & E551 & M30,3:FBPSPS
      ;ENDFOLD
;%{SE}%MKUKATPVW %CVW_SPS %VFBPSPS %P 2:FB PSPS = E547 & !E548 & M30 & M81 & M174,3:FBPSPS
      ;ENDFOLD


TECH3_ 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)
P1:-接通/关闭的地址
P2:-60断开/50接通

VW_USR_R---CASE 301
IF(PAR7==TRUE)THEN-
ret=99
SWITCH PAR2
CASE 50  50接通网络
      Ret=ioctl("PNIO-CTRL",50,par1)接通网络
SWITCH DockBhf快换站的工具检测(最多使用3个工具站!)

CASE 'B000001'  1号快换站没有检测到有件

IF DOCK_SZ THEN-使用快换伺服焊钳-
            $softplcint[1]=ActDockAx(1)-激活焊钳软PLC控制号=7
ENDIF
    IF DOCK_NZ THEN 伺服铆钳带钉
            $softplcint[4]=ActDockAx(1)=7
ENDIF
    IF DOCK_CZ THEN  伺服铆钳无钉
            $softplcint[6]=ActDockAx(1)=7
ENDIF
CASE '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) =8
ENDIF
IF DOCK_CZ AND NOT S_DockingTHEN第二把伺服铆钳无钉
            $softplcint[7]=ActDockAx(2) =8
ENDIF
CASE 'B000100'-3号快换站没有检测到有件,

IF DOCK_SZ AND NOT DOCK_SP AND NOT ReserveBool[49] AND NOT ReserveBool[50] THEN
            $softplcint[1]=ActDockAx(3) 用于激活快换3号焊钳 =9
ENDIF
IF 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  接通关闭,反馈值

CASE;

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

CASE;   ---连接超时

MLD(92,#QuitMsg) - "Timeout bei Docking"  快换头连接超时-

CASE;

MLD(93,#QuitMsg)-"IOCTL falscher Parameter"  IOCTL 参数设置错误-

DEFAULT

  ENDSWITCH   

ENDIF

;ENDFOLD


------------------------------END-----------------------------


每天进步一点点


Make small but daily progress



机器人及PLC自动化应用
机器人技术讲解,PLC程序分析讲解,PLC机器人自动化培训. 以工业自动化培训为主.也会有些个人喜爱的军事和休闲.
 最新文章