历史上的今天
今天是:2026年03月21日(星期六)
2023年03月21日 | DOCK之profinet的对接快换耦合编程
2023-03-21 来源:机器人及PLC自动化应用
快换的Profinet对接使用方式
同一个设备可以在不同的上交替运行。为此必须使用其他的 IOCTL 功能进行解耦和。如果一个设备仅在一个机器人上运行,则也可以使用这些 IOCTL 功能。其他 IOCTL 功能只能为了兼容的原因而使用。
- 在带有工具更换系统的应用中,绝不能将总线用户持久地耦合在上。
- 在冷启动或在一个输入 / 输出端配置时,在该情况下这将直接导致工业以太网故障。
- 关闭始终可用这一功能可以防止这些设备在冷启动后或者重新配置输入 /输出端后被逻辑耦合进工业以太网。
- 这些已被停用的设备可以在以后程序运行时毫无问题地重新耦合进来。
- 但是在项目设置时必须考虑到,将所有工具在物理和逻辑上集入进工业以太网项目。
解耦 --已解耦设备的属性:
若将已解耦的设备与工业以太网或者分离开,这不会触发故障。
在已解耦的设备上进行的所有 IO 操作都无效。
已解耦的设备不能对读 / 写故障进行处理。
解耦时设备的输入端已被归零。
耦合
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 命令 |
通过 KRL 重启总线系统
总线故障后,可在运行时在程序之内重启总线系统。为此,必须在程序中借助KRL 函数 IOCTL 一个重启总线系统的命令。
RET = IOCTL("PNIO-CTRL",12,0)
| 12 | 用于重启总线系统的 IOCTL 命令 |
ENDIF
ENDSWITCH
CASE 60 60断开
SWITCHDockBhf
CASE 'B000000' -工具站上全是工具-头上在放工具
IF DOCK_SZ AND NOT DOCK_SP THEN-带2焊钳用2地址
SetIntNull(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,#NofyMsg) -"PNIO ilnehmer 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 Paeter" IOCTL 参数设置错误-
DEFAULT
ENDSWITCH
ENDIF
;ENDFOLD
编辑:黄飞
史海拾趣
|
在当前数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式系统已经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术以及人们的日常生活等方方面面中。随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术越来越 ...… 查看全部问答> |
|
我做了一个TMS320F28023片子的系统,基本上仿的USB的MiniStick的那个F28027的小板子。程序也用MiniStick套件的附带LED程序,只是在仿真器器件选择的时候是28023,然后也可以正常下载和运行,LED频率和28027的板子是一样的。不过片子有点烫。后来把D ...… 查看全部问答> |
|
在下要用AT89c52做一个小车,要给舵机输出PWM波,可是网上说89C52好像没有PCA功能,那怎么给舵机输PWM呢? 在下菜鸟,多多包涵。。。;P ;P ;P… 查看全部问答> |
|
请教下,现在有两个窗口,一个主窗口A,一个弹出窗口B,按下A窗口的按钮会弹出B窗口,现在的问题是,按下按钮时显示B窗口没问题,但是抬起按钮后隐藏B窗口的时候会将B覆盖A的那部分窗口重绘,重绘的那部分会瞬间变白然后再显示出A窗 ...… 查看全部问答> |
|
上海站:嵌入式专业畅销书作者任侨伟、宋宝华老师专题讲座 Linux内核和设备驱动是嵌入式开发中非常重要的部分,学习方法和选择平台非常重要。为答谢广大读者一直以来的支持与鼓励,华清远见上海中心特举办“嵌入式专业畅销书作者任桥伟、宋宝华老 ...… 查看全部问答> |
|
$(_SYSGENOAKROOT)...指的是那个目录? 如:$(_SYSGENOAKROOT)\\lib\\$(_CPUINDPATH)\\ceddk.lib $(_COMMONSDKROOT)...指的是哪个目录? 如:$(_COMMONSDKROOT)\\lib\\$(_CPUINDPATH)\\coredll.lib \\ _ISVINCPATH=$(_WINCEROOT)\\public\\comm ...… 查看全部问答> |
|
DriverWork3.2的向导生成的程序在Visual c++ 2003下的编译问题 通过DriverWork3.2的向导DriverWork3.2生成的程序在Visual c++ 2003下的编译发现以下问题,郁闷中,有没有人帮我解决,问题如下: error LNK2001:unresolved external symbol@__securtity_check_cookie@4 error LNK2001:unresolved external symbol@_ ...… 查看全部问答> |




