0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文知道UP/MAKRO程序的调用

机器人及PLC自动化应用 来源:搜狐网 作者:搜狐网 2020-11-07 10:57 次阅读

UP/MAKRO程序调用

该指令可用于调用子程序并将子程序调用链接到条件(布尔操作数)。如果需要,可以链接多个操作数(最多11个)。

子程序的调用次数没有限制。

1 子程序号 0 ... 999
2 操作符_(
3 操作员。如果选择了操作数EIN(ON)和AUS(OFF),则输入框不可用。_,!
4 布尔操作数(条件)EIN(开),AUS(关),E,A,M,F,T,S
5 操作数的编号。如果选择了操作数EIN(ON)和AUS(OFF),则输入框不可用。
值的范围。取决于操作数
6 操作符_(

UP101 = F78 + F79 激活条件UP101

;%{SE}%MKUKATPVW %CVW_SPS %VUP %P 2:UP101 = F78 + F79,3:UP

;ENDFOLDSEL_RES=SELECT(#UP,101,$FLAG[78] OR $FLAG[79])

REPEAT UP101 N= 999 STOP= !F298 条件满足停止循环调用UP101

SEL_RES=SELECT (#CYC_UP,101,TRUE,#NUM,999,#NOT_F,298,FALSE)

;ENDFOLD

;ENDFOLD

DEFFCT INT SELECT

(SUB :IN,NO :IN,CALL_CND :IN,ARI_OP :IN,ARI_NUM :IN,BOOL_OP :IN,BOOL_NUM :IN,MAKRO_ADV :IN)

SUB : 选择调用的类型UP/makro

NO : 程序号

CALL_CND : 激活条件

ADV_RESULT = 0

IF NOT CALL_CND THEN ---如果不激活就跳步到最后

GOTO PEXIT -----跳步到退出

ENDIF

SWITCH SUB

CASE #UP 使用调用UP

CALLBYSELECT=TRUE

SWITCH NO ;调用UP程序号

CASE 101 ---程序号

UP101( ) 调用UP程序号

CASE 102

UP102( )

CASE 103

UP103( )

CASE 112

UP112( )

CASE 201

UP201( )

CASE 206

UP206( )

DEFAULT

$LOOP_MSG[]=" "

OFFSET = 0

---程序号不能被调用---

SWRITE($LOOP_MSG[],STATE,OFFSET,"UP%D ist nicht vorhanden",NO)

HALT ---程序号不能被调用---使得程序停止

$LOOP_MSG[]=" "

ENDSWITCH

CALLBYSELECT=FALSE

CASE #MAKRO

SWITCH NO ;开始调用MAKRO程序号 --

CASE 0 要激活的程序号

ADV_RESULT= MAKRO0 (MAKRO_ADV) 激活MAKRO0程序

CASE 1

ADV_RESULT= MAKRO1 (MAKRO_ADV) 激活MAKRO1程序

CASE 2

ADV_RESULT= MAKRO2 (MAKRO_ADV)

CASE 3

ADV_RESULT= MAKRO3 (MAKRO_ADV)

CASE 4

ADV_RESULT= MAKRO4 (MAKRO_ADV)

CASE 5

ADV_RESULT= MAKRO5 (MAKRO_ADV)

CASE 6

ADV_RESULT= MAKRO6 (MAKRO_ADV)

CASE 7

ADV_RESULT= MAKRO7 (MAKRO_ADV)

CASE 8

ADV_RESULT= MAKRO8 (MAKRO_ADV)

CASE 9

ADV_RESULT= MAKRO9 (MAKRO_ADV)

CASE 10

ADV_RESULT= MAKRO10 (MAKRO_ADV)

CASE 11

ADV_RESULT= MAKRO11 (MAKRO_ADV)

CASE 12

ADV_RESULT= MAKRO12 (MAKRO_ADV)

CASE 13

ADV_RESULT= MAKRO13 (MAKRO_ADV)

CASE 14

ADV_RESULT= MAKRO14 (MAKRO_ADV)

CASE 15

ADV_RESULT= MAKRO15 (MAKRO_ADV)

CASE 20

ADV_RESULT= MAKRO20 (MAKRO_ADV)

CASE 50

ADV_RESULT= MAKRO50 (MAKRO_ADV)

CASE 57

ADV_RESULT= MAKRO57 (MAKRO_ADV)

CASE 80

ADV_RESULT= MAKRO80 (MAKRO_ADV)

CASE 81

ADV_RESULT= MAKRO81 (MAKRO_ADV)

CASE 82

ADV_RESULT= MAKRO82 (MAKRO_ADV)

CASE 83

ADV_RESULT= MAKRO83 (MAKRO_ADV)

CASE 89

ADV_RESULT= MAKRO89 (MAKRO_ADV)

DEFAULT

$LOOP_MSG[]=" "

-------没有建立的Makro号被调用

OFFSET = 0

SWRITE($LOOP_MSG[],STATE,OFFSET,"Makro%D ist nicht vorhanden",NO)

用来模拟显示: 没有建立的Makro号被调用

HALT -----如果没有号需要停止

$LOOP_MSG[]=" "

ENDSWITCH 结束了MAKRO选择

CASE #CYC_UP -----循环执行UP程序

NR=0

WHILE NOT (CHECK_BOOL(BOOL_OP,BOOL_NUM) OR CHECK_ARI(NR,ARI_OP,ARI_NUM)) CHECK_BOOL/ CHECK_ARI启动功能条件开启

NR=NR+1 从0开始计数大于给定值将不执行循环程序

CALLBYSELECT=TRUE

SWITCH NO ; UP程序号调用

CASE 101

UP101( )

CASE 102

UP102( )

CASE 103

UP103( )

CASE 112

UP112( )

CASE 201

UP201( )

CASE 206

UP206( )

DEFAULT

$LOOP_MSG[]=" "

UP程序号没有被激活的程序号

OFFSET = 0

SWRITE($LOOP_MSG[],STATE,OFFSET,"UP%D ist nicht vorhanden",NO)

HALT 程序号没有使用程序停止

$LOOP_MSG[]=" "

ENDSWITCH

CALLBYSELECT=FALSE

ENDWHILE

CASE #CYC_MAKRO -----循环执行MAKRO程序

NR=0

WHILE NOT (CHECK_BOOL(BOOL_OP,BOOL_NUM) OR CHECK_ARI(NR,ARI_OP,ARI_NUM)) 大于给定值将不执行循环程序

NR=NR+1 从0开始计数大于给定值将不执行循环程序

SWITCH NO -----调用的程序号

CASE 0

ADV_RESULT= MAKRO0 (MAKRO_ADV) 调用执行MAKRO程序

CASE 1

ADV_RESULT= MAKRO1 (MAKRO_ADV)

CASE 2

ADV_RESULT= MAKRO2 (MAKRO_ADV)

CASE 3

ADV_RESULT= MAKRO3 (MAKRO_ADV)

CASE 4

ADV_RESULT= MAKRO4 (MAKRO_ADV)

CASE 5

ADV_RESULT= MAKRO5 (MAKRO_ADV)

CASE 6

ADV_RESULT= MAKRO6 (MAKRO_ADV)

CASE 7

ADV_RESULT= MAKRO7 (MAKRO_ADV)

CASE 8

ADV_RESULT= MAKRO8 (MAKRO_ADV)

CASE 9

ADV_RESULT= MAKRO9 (MAKRO_ADV)

CASE 10

ADV_RESULT= MAKRO10 (MAKRO_ADV)

CASE 11

ADV_RESULT= MAKRO11 (MAKRO_ADV)

CASE 12

ADV_RESULT= MAKRO12 (MAKRO_ADV)

CASE 13

ADV_RESULT= MAKRO13 (MAKRO_ADV)

CASE 14

ADV_RESULT= MAKRO14 (MAKRO_ADV)

CASE 15

ADV_RESULT= MAKRO15 (MAKRO_ADV)

CASE 20

ADV_RESULT= MAKRO20 (MAKRO_ADV)

CASE 50

ADV_RESULT= MAKRO50 (MAKRO_ADV)

CASE 57

ADV_RESULT= MAKRO57 (MAKRO_ADV)

CASE 80

ADV_RESULT= MAKRO80 (MAKRO_ADV)

CASE 81

ADV_RESULT= MAKRO81 (MAKRO_ADV)

CASE 82

ADV_RESULT= MAKRO82 (MAKRO_ADV)

CASE 83

ADV_RESULT= MAKRO83 (MAKRO_ADV)

CASE 89

ADV_RESULT= MAKRO89 (MAKRO_ADV)

DEFAULT

$LOOP_MSG[]=" "

Makro程序号没有被激活的程序号

OFFSET = 0

SWRITE($LOOP_MSG[],STATE,OFFSET,"Makro%D ist nicht vorhanden",NO)

HALT -----程序号没有使用程序停止

$LOOP_MSG[]=" "

ENDSWITCH ---结束选择程序

ENDWHILE ---结束条件

DEFAULT --- 没有UP,MAKRO,CYC_MAKRO,CYC_UP

ENDSWITCH ---结束选择程序

PEXIT: -------跳步退出

RETURN ADV_RESULT

ENDFCT

---检查位用于循环调用---

DEFFCT BOOL CHECK_BOOL(BOOLOP :IN,BOOLOP_NUM :IN)

INT BOOLOP_NUM 位号,数字

DECL BOOL_TYP BOOLOP 各种类型

BOOL STOP_BOOL

SWITCH BOOLOP

CASE #EIN

STOP_BOOL=TRUE ---激活

CASE #AUS

STOP_BOOL=FALSE ---关闭

CASE #E

STOP_BOOL=$IN[BOOLOP_NUM] ---用输入激活

CASE #NOT_E

STOP_BOOL= NOT $IN[BOOLOP_NUM] ---输入取反激活

CASE #A

STOP_BOOL=$OUT[BOOLOP_NUM] ---用输出激活

CASE #NOT_A

STOP_BOOL= NOT $OUT[BOOLOP_NUM] ---用输出的非激活

CASE #M

STOP_BOOL=$CYCFLAG[BOOLOP_NUM] ---用M量激活

CASE #NOT_M

STOP_BOOL= NOT $CYCFLAG[BOOLOP_NUM] ---用M量的非激活

CASE #F

STOP_BOOL=$FLAG[BOOLOP_NUM] 用F量激活

CASE #NOT_F

STOP_BOOL= NOT $FLAG[BOOLOP_NUM] 用F量的非激活

CASE #T

STOP_BOOL=$TIMER_FLAG[BOOLOP_NUM] 用时间量激活

CASE #NOT_T

STOP_BOOL= NOT $TIMER_FLAG[BOOLOP_NUM] 用时间量的非激活

CASE #S

STOP_BOOL=S[BOOLOP_NUM] S量一般不用

CASE #NOT_S

STOP_BOOL= NOT S[BOOLOP_NUM]

ENDSWITCH

RETURN (STOP_BOOL) 条件满足反馈

ENDFCT

-----用于输入数---

DEFFCT BOOL CHECK_ARI(ACT_NR :IN, ARIOP :IN ,ARIOP_NUM :IN)

INT ACT_NR, ARIOP_NUM, MAX_NR

DECL ARI_TYP ARIOP

SWITCH ARIOP

CASE #NUM 直接给入数

MAX_NR=ARIOP_NUM

CASE #COUNT 计数器

MAX_NR=$COUNT_I[ARIOP_NUM]

CASE #BIN 二进制

MAX_NR=$B_OUT[ARIOP_NUM]

CASE #BININ 二进制输入

MAX_NR=ARIOP_NUM

CASE #ANA 模拟量输出

MAX_NR=$ANOUT[ARIOP_NUM]*1000

CASE #ANAIN 模拟量输入

MAX_NR=$ANIN[ARIOP_NUM]*1000

CASE #TIMER 时间控制

MAX_NR=$TIMER[ARIOP_NUM]*0.01

CASE #PROCPAR P值控制

MAX_NR=PROCPAR[ARIOP_NUM]

ENDSWITCH

RETURN (ACT_NR>=MAX_NR) 计数大于给定值.

ENDFCT

;ENDFOLD

;ENDFOLD

责任编辑人:CC

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79552
  • 调用
    +关注

    关注

    0

    文章

    8

    浏览量

    3171

原文标题:KUKA的程序调用--VSS版本解析

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Labview里面使用Halcon的函数。 方法:直接调用Halcon的函数。

    本帖最后由 高顺周 于 2016-10-14 19:06 编辑 在Labview使用Halcon,有两种方式。种是创造个Halcon程序的运行环境,然后根据路径直接调用对应的
    发表于 08-15 14:14

    ARM linux系统调用的实现原理

    大家都知道linux的应用程序要想访问内核必须使用系统调用从而实现从usr模式转到svc模式。下面咱们看看它的实现过程。
    发表于 05-30 11:24 2181次阅读

    程序的创建与调用

    【LabVIEW从入门到精通】2.5 子程序的创建与调用
    发表于 01-08 15:43 0次下载

    应用程序调用底层驱动

    本片主要讲述了嵌入式linux操作系统的上层应用程序是如何调用底层驱动程序的。
    发表于 03-14 15:00 0次下载

    中断处理和子程序调用概念解析

    程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序。子程序在功能上具有相对的独立性,在执行主
    发表于 11-16 11:12 9493次阅读
    中断处理和子<b class='flag-5'>程序</b><b class='flag-5'>调用</b>概念解析

    一种动静结合的恶意程序函数调用图提取方法

    完整准确地提取函数调用图是基于函数调用图进行恶意程序相似性分析的基础。为此,提出一种动静结合的恶意程序函数调用图提取方法。在对
    发表于 02-24 13:52 0次下载
    一种动静结合的恶意<b class='flag-5'>程序</b>函数<b class='flag-5'>调用</b>图提取方法

    知道Arm Linux系统调用流程?

    系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行让用户程序陷入内核,该陷入动作由swi软中断
    发表于 05-15 16:19 2181次阅读
    你<b class='flag-5'>知道</b>Arm Linux系统<b class='flag-5'>调用</b>流程?

    知道Linux系统调用的原理

    系统调用是应用程序与操作系统内核之间的接口,它决定了程序如何与内核打交道的。无论程序是直接进行系统调用,还是通过运行库,最终还是会到达系统
    发表于 05-16 16:21 1324次阅读
    你<b class='flag-5'>知道</b>Linux系统<b class='flag-5'>调用</b>的原理

    KUKA的程序调用--VSS版本解析

    该指令可用于调用程序并将子程序调用链接到条件(布尔操作数)。如果需要,可以链接多个操作数(最多11个)。 子程序
    的头像 发表于 03-18 10:07 2815次阅读
    KUKA的<b class='flag-5'>程序</b><b class='flag-5'>调用</b>--VSS版本解析

    基于Labview的调用windows程序源码分享

    基于Labview的调用windows程序源码分享
    发表于 12-02 11:08 85次下载

    自动生成的程序程序调用

    本文介绍Motion Solution Wizard自动生成的程序程序调用,并简单介绍运动控制工程调用的运动控制库文件。 具体操作介绍 1.在项目树下双击“Motion Solut
    发表于 03-08 15:33 309次阅读

    ifconfig up后内核网络驱动做了什么?

    最近在排查一个网络问题,ifconfig eth0 up 后,网卡link up比较慢。因此,分析了下从ifconfig up 到网络驱动的调用流程。这里顺便作个记录。
    的头像 发表于 05-19 15:17 1257次阅读

    分享一下ABB机器人调用例行程序的方法

    在机器人的编程中例行程序调用是必不可少的,今天来分享一下例行程序调用的三种方法。
    发表于 05-25 16:21 7624次阅读
    分享一下ABB机器人<b class='flag-5'>调用</b>例行<b class='flag-5'>程序</b>的方法

    如何使用TSMaster调用外部DLL/LIB程序

    调用外部DLL/LIB程序在用户自定义开发过程中,常常会遇到需要调用外部DLL/LIB程序文件的需求,这些文件可能是用户自己编写的,也可能是其它供应商提供的。TSMaster支持
    的头像 发表于 08-16 09:36 720次阅读
    如何使用TSMaster<b class='flag-5'>调用</b>外部DLL/LIB<b class='flag-5'>程序</b>

    如何优雅地绕过函数调用链呢?

    在某次实践中碰到一个沙箱,在不知道沙箱强度的情况下只能一点点去探索,程序通过调用ShellCode弹出计算器。
    的头像 发表于 08-11 18:24 906次阅读
    如何优雅地绕过函数<b class='flag-5'>调用</b>链呢?