前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >P00程序解析1

P00程序解析1

作者头像
用户4442670
发布2023-09-02 11:21:59
1.3K0
发布2023-09-02 11:21:59
举报
文章被收录于专栏:机器人小农

大家好!今天我们来说说P00这个程序

P00程序与外部自动配置息息相关,外部自动所配置的这些变量在P00里面都有详细的检查和执行

P00,是KUKA出厂自带的一个程序,主要使用用于Cell中。这个模块在R1/TP中

既然在系统中那就说明这个程序是可以被用户调用的,所以要知道其中包含了哪些模块,都是什么功能,下图就是P00程序中所包含的模块

接下来一个一个分析

主程序P00

主程序是一个功能调用程序,仅包含一个switch。用于提供外部调用。

其中包含了几个参数:

COMMAND:枚举类型参数,在config中声明了P00_COMMAND枚举,包含四个元素INIT_EXT,EXT_PGNO,CHK_HOME,EXT_ERR,正对应了SWITCH中的4个CASE。

PGNO_FUNCT:同样是config中声明的枚举类型,包含了3个元素,PGNO_GET,PGNO_ACKN,PGNO_FAULT,用于作为EXT_PGNO( )程序的参数进行传递。

P_ID[ ]和E_NO同是EXT_ERR( )程序的参数,分别是字符串和整数。

当主程序被调用,并且传入对应的参数时,其中的SWITCH,即可调用对应的程序了


INIT_EXT

从名字就可以看出,这是个初始化程序,初始了以下内容:

输出端:程序请求信号

输出端:程序运行中

输出端:故障发送给PLC

输出端:程序号镜像初始化为0

检查IO是否激活:

程序号类型

63 SWITCH PGNO_TYPE根据程序好类型进行分支

65 CASE 1,2 ;bci-coding,bcd-coding 二进制和 BCD

程序号长度判断

68 IF (PGNO_LENGTH<1) THEN 如果长度小于1输出错误报警

69 ERROR=TRUE ;pgno_length

70 MsgQuit("PgNo_LengthRangeWrong", "P00")

71 ENDIF

72 IF (PGNO_TYPE==1) THEN ;bci-coding如果类型等于1

73 IF (PGNO_LENGTH>16) THEN 如果长度大于16输出报警

74 ERROR=TRUE ;pgno_length

75 MsgQuit("PgNo_LengthRangeWrong", "P00")

76 ENDIF

77 ENDIF

78 IF (PGNO_TYPE==2) THEN ;bcd-coding 如果类型等于2

79 SWITCH PGNO_LENGTH 如果程序号长度为4,8,12,16输出报警(这个switch的用法很不错)

80 CASE 4,8,12,16

81 DEFAULT

82 ERROR=TRUE ;pgno_length

83 MsgQuit("PgNo_LengthWrong", "P00")

84 ENDSWITCH

85 ENDIF

86 ;***** CHECK PGNO_FBIT *****

87 IF (PGNO_FBIT<1) THEN 检查程序号第一位是否小于1

88 ERROR=TRUE ;pgno_fbit

89 MsgQuit("PgNo_FBitWrong", "P00")

90 ENDIF

91 ;***** CHECK PGNO_REQ *****

92 IF (PGNO_REQ==0) THEN 检查程序好请求是否等于0

93 ERROR=TRUE ;pgno_req

94 MsgQuit("PgNo_ReqWrong", "P00")

95 ENDIF

96 IF (PGNO_REQ>0) THEN ;active high程序号请求大于0时初始化信号

97 $OUT[PGNO_REQ]=FALSE ;reset

98 WAIT SEC 0.2 ;delay for plc

99 ENDIF

100 IF (PGNO_REQ<0) THEN ;active low程序号请求为小于0时初始化

101 $OUT[PGNO_REQ*(-1)]=TRUE ;reset

102 WAIT SEC 0.2 ;delay for plc

103 ENDIF

104 ;*********************************************************

105 CASE 3 ;one out of n程序号类型为3“N 选 1”

106 ;*********************************************************

107 ;***** CHECK PGNO_LENGTH *****

108 IF (PGNO_LENGTH<1) THEN 程序号长度小于1报警

109 ERROR=TRUE ;pgno_length

110 MsgQuit("PgNo_LengthRangeWrong", "P00")

111 ENDIF

112 IF (PGNO_LENGTH>16) THEN 程序号长度小于16 报警

113 ERROR=TRUE ;pgno_length

114 MsgQuit("PgNo_LengthRangeWrong", "P00")

115 ENDIF

116 ;***** CHECK PGNO_FBIT *****

117 IF (PGNO_FBIT<1) THEN 程序号第一位小于1报警

118 ERROR=TRUE ;pgno_fbit

119 MsgQuit("PgNo_FBitWrong", "P00")

120 ENDIF

121

122 ;*********************************************************

123 DEFAULT ;PGNO_TYPE wrong type 程序号类型不为1,2,3时报警

124 ;*********************************************************

125 ERROR=TRUE ;pgno_type

126 MsgQuit ("PgNo_TypeWrong", "P00")

127 ENDSWITCH

128 ;***********************************************************

129 UNTIL (ERROR==FALSE) ;ERROR为假时结束循环

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器人小农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档