技术论坛

请教,子程序中形式参数 ld_r10等的值来自哪里?

作者 主题
侠客

经验值: 647
发帖数: 257
精华帖: 0
主题:【求助】请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 楼主 2021-12-26 21:53:09

一西门子840D系统子程序部分内容如下:


PROC L3104 (REAL ld_r10,REAL ld_r20,REAL ld_r40,REAL ld_r42,REAL ld_r0,REAL ld_r1,REAL ld_r5,REAL ld_r6,REAL ld_r65,REAL ld_r66,REAL ld_r67,REAL ld_r68,REAL ld_r70) SAVE
DEF AXIS LV_X,LV_Y,LV_Z,LV_HEAD,LV_TABLE
DEF REAL LV_RZE,LV_SHE,LV_MTA,LV_SHA, LV_SPADD1,LV_SPR,LV_MWX,LV_MWY
DEF REAL LV_STAWI,LV_XAFA,LV_YAFA,LV_XMES,LV_YMES,LV_P155,LV_SPADD2,LV_SPADD3
DEF REAL LV_X1,LV_Y1,LV_Z1,LV_X2,LV_Y2,LV_Z2,LV_ZWRZ
DEF REAL LV_NPALTX,LV_NPALTY,LV_NPALTZ
DEF REAL LV_SPST,LV_EIW
DEF INT  LV_WDH,LV_ANZ,LV_NPV,LV_GROUP8
DEF BOOL LV_MIT_ROT
DEF REAL LV_XX6,LV_XY6,LV_XZ6,LV_YX6,LV_YY6,LV_YZ6,LV_ZX6,LV_ZY6,LV_ZZ6
DEF REAL LV_V1,LV_V2,LV_V3,LV_V4
DEF INT  LV_V10,LV_V11,LV_V13
DEF STRING[10] MASCH_TYP
DEF STRING[2]  MASCH_ORI
DEF REAL LV_ALFA,LV_HEAD_POS
DEF REAL LV_MXS0_X,LV_MXS0_Y,LV_MXS0_Z,LV_MYS0_X,LV_MYS0_Y,LV_MYS0_Z
if (($p_subpar[1]==false) and ($p_subpar[2]==false) and ($p_subpar[3]==false) and ($p_subpar[4]==false) and ($p_subpar[5]==false) and ($p_subpar[6]==false) and ($p_subpar[7]==false) and ($p_subpar[8]==false) and ($p_subpar[9]==false) and ($p_subpar[10]==false) and ($p_subpar[11]==false) and ($p_subpar[12]==false) and ($p_subpar[13]==false))
else
  R10 = ld_r10
  R20 = ld_r20
  R40 = ld_r40
  R42 = ld_r42
  R0  = ld_r0
  R1  = ld_r1
  R5  = ld_r5
  R6  = ld_r6
  R65 = ld_r65
  R66 = ld_r66
  R67 = ld_r67
  R68 = ld_r68
  R70 = ld_r70
endif
…………

请教,子程序中形式参数 ld_r10等的值来自哪里?


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1741368&b_id=20&s_id=0&num=14

版主

经验值: 38694
发帖数: 10355
精华帖: 72
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 1楼 2021-12-27 11:56:52

能把完整的程序包括变量定义等打包发过来看看?


西门子的多年使用者http://yinshenren.ys168.com/、
以下网友喜欢您的帖子:

  
侠客

经验值: 609
发帖数: 79
精华帖: 1
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 2楼 2021-12-27 13:40:27
带PROC定义的子程序是带参数传递的子程序,L3104为子程序名,括号内就是带参数传递的变量。主程序调用子程序时子程序名后面括号内赋值就可以传递给这些变量。如:
L3104(1,2,3,4,5,6,7,8,9,10,11,12,13);这里的1就传递给ld_r10
 
以下网友喜欢您的帖子:

  
侠客

经验值: 647
发帖数: 257
精华帖: 0
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 楼主 3楼 2021-12-27 21:56:16
但是我看主程序了,主程序中调用它的语句并没有赋值,
 
以下网友喜欢您的帖子:

  
侠客

经验值: 647
发帖数: 257
精华帖: 0
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 楼主 4楼 2021-12-27 22:09:33
厂家编的程序,不方便完整地传上来,
 
以下网友喜欢您的帖子:

  
侠客

经验值: 647
发帖数: 257
精华帖: 0
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 楼主 5楼 2021-12-28 08:20:19
可是,主程序调用L3104语句没有参数



 
以下网友喜欢您的帖子:

  
侠客

经验值: 609
发帖数: 79
精华帖: 1
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 6楼 2021-12-28 19:09:50
以下是引用耶稣爱字在2021-12-28 08:20:19的发言 >5楼:可是,主程序调用L3104语句没有参数 [br][img]upload/20211228281829.png[/img][br]

主程序调用时没有传递参数,那这个变量就为0,子程序内也可以为这些变量赋值,你再找找子程序内


 
以下网友喜欢您的帖子:

  
侠客

经验值: 647
发帖数: 257
精华帖: 0
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 楼主 7楼 2021-12-28 23:27:55
以下是引用右边在2021-12-28 19:09:50的发言 >6楼

主程序调用时没有传递参数,那这个变量就为0,子程序内也可以为这些变量赋值,你再找找子程序内

以下是引用耶稣爱字在2021-12-28 08:20:19的发言 >5楼:可是,主程序调用L3...

引用5楼详细内容:

可是,主程序调用L3104语句没有参数 [br][img]upload/20211228281829.png[/img][br]

程序说明书中也是这样的,在主程序中调用L3104语句前,设定一些R参数的值,这些值影响L3104程序,L3104程序中只有“R10=ld_r10”这样的语句(见顶楼),这样的语句应是将ld_r10的值给R10吧




 
以下网友喜欢您的帖子:

  
侠客

经验值: 647
发帖数: 257
精华帖: 0
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 楼主 8楼 2021-12-29 08:15:12
搜索了整个子程序L3104,除了PROC行,只有语句“R10=ld_r10”(顶楼亦可见)两句有有“ld_10”,其它无,
 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8123
发帖数: 1006
精华帖: 5
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 9楼 2021-12-29 16:23:27

直接监控R10看看。说明书上应该有说明。


 
以下网友喜欢您的帖子:

  
侠客

经验值: 609
发帖数: 79
精华帖: 1
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 10楼 2021-12-30 08:57:40
以下是引用耶稣爱字在2021-12-29 08:15:12的发言 >8楼:搜索了整个子程序L3104,除了PROC行,只有语句“R10=ld_r10”(顶楼亦可见)两句有有“ld_10”,其它无,
根据你说的这些情况,我估计,子程序内IF判断语句成立,程序内的R参数值就是用的主程序赋值数据,如果判断不成立,才进入ELSE分枝,把R参数全部赋值为0了。你在子程内ENDIF前段加个M0看程序暂停否,不暂停,去看R参数应该是主程序的值,如暂停了,R参数应该是0
 
以下网友喜欢您的帖子:

  
侠客

经验值: 647
发帖数: 257
精华帖: 0
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 楼主 11楼 2021-12-30 22:38:38
以下是引用右边在2021-12-30 08:57:40的发言 >10楼:根据你说的这些情况,我估计,子程序内IF判断语句成立,程序内的R参数值就是用的主程序赋值数据,如果判断不成立,才进入ELSE分枝,把R参数全部赋值为0了。你在子程内ENDIF前段加个M0看程序暂停否,不暂停,去看R参数应该是主程序的值,如暂停了,R参数应该是0
以下是引用耶稣爱字在2021-12-29 08:15:12的发言 >8楼:搜索了整个子程序L3...

引用8楼详细内容:

搜索了整个子程序L3104,除了PROC行,只有语句“R10=ld_r10”(顶楼亦可见)两句有有“ld_10”,其它无,

十分感谢大侠热心回复,仔细看了下说明书和程序,应如大侠所分析,条件成立则不对R参数赋值,条件不成立才对R参数赋值,


 
以下网友喜欢您的帖子:

  
侠客

经验值: 609
发帖数: 79
精华帖: 1
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 12楼 2022-01-01 16:29:04
以下是引用右边在2021-12-30 08:57:40的发言 >10楼:根据你说的这些情况,我估计,子程序内IF判断语句成立,程序内的R参数值就是用的主程序赋值数据,如果判断不成立,才进入ELSE分枝,把R参数全部赋值为0了。你在子程内ENDIF前段加个M0看程序暂停否,不暂停,去看R参数应该是主程序的值,如暂停了,R参数应该是0
以下是引用耶稣爱字在2021-12-29 08:15:12的发言 >8楼:搜索了整个子程序L3...

引用8楼详细内容:

搜索了整个子程序L3104,除了PROC行,只有语句“R10=ld_r10”(顶楼亦可见)两句有有“ld_10”,其它无,

这几天一直在想,我应该还有什么地方没有想到,写此子程序的作者既然写出参数传递的变量,就应该是有用处的。不应该是我理解的这么简单。只是这几天没有时间试验。今天有空测试了一下,果然是有用处的。实际上这个子程序有两种给计算变量赋值的方法。

第1种就是楼主用的在主程序直接给这13个R参数赋值,调用子程序只写子程序名。第2种是在主程序内调用子程序时用参数传递ld_r10这些变量,他们在子程序内利用条件判断再次赋值给程序使用的13个R参数。

if (($p_subpar[1]==false) and ($p_subpar[2]==false) and ($p_subpar[3]==false) and ($p_subpar[4]==false) and ($p_subpar[5]==false) and ($p_subpar[6]==false) and ($p_subpar[7]==false) and ($p_subpar[8]==false) and ($p_subpar[9]==false) and ($p_subpar[10]==false) and ($p_subpar[11]==false) and ($p_subpar[12]==false) and ($p_subpar[13]==false))

;这句的意思是调用子程序时所有参数传递都没有赋值为成立,只要有任何一个参数传递赋值就不成立






 
以下网友喜欢您的帖子:

  
侠客

经验值: 647
发帖数: 257
精华帖: 0
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 楼主 13楼 2022-01-02 15:29:50
十分感谢大侠!
 
以下网友喜欢您的帖子:

  
侠客

经验值: 647
发帖数: 257
精华帖: 0
回复:请教,子程序中形式参数 ld_r10等的值来自哪里?


只看楼主 楼主 14楼 2022-01-03 21:32:31
以下是引用右边在2022-01-01 16:29:04的发言 >12楼

这几天一直在想,我应该还有什么地方没有想到,写此子程序的作者既然写出参数传递的变量,就应该是有用处的。不应该是我理解的这么简单。只是这几天没有时间试验。今天有空测试了一下,果然是有用处的。实际上这个子程序有两种给计算变量赋值的方法。

第1种就是楼主用的在主程序直接给这13个R参数赋值,调用子程序只写子程序名。第2种是在主程序内调用子程序时用参数传递ld_r10这些变量,他们在子程序内利用条件判断再次赋值给程序使用的13个R参数。

if (($p_subpar[1]==false) and ($p_subpar[2]==false) and ($p_subpar[3]==false) and ($p_subpar[4]==false) and ($p_subpar[5]==false) and ($p_subpar[6]==false) and ($p_subpar[7]==false) and ($p_subpar[8]==false) and ($p_subpar[9]==false) and ($p_subpar[10]==false) and ($p_subpar[11]==false) and ($p_subpar[12]==false) and ($p_subpar[13]==false))

;这句的意思是调用子程序时所有参数传递都没有赋值为成立,只要有任何一个参数传递赋值就不成立





以下是引用右边在2021-12-30 08:57:40的发言 >10楼:根据你说的这些情况...

引用10楼详细内容:

根据你说的这些情况,我估计,子程序内IF判断语句成立,程序内的R参数值就是用的主程序赋值数据,如果判断不成立,才进入ELSE分枝,把R参数全部赋值为0了。你在子程内ENDIF前段加个M0看程序暂停否,不暂停,去看R参数应该是主程序的值,如暂停了,R参数应该是0

以下是引用耶稣爱字在2021-12-29 08:15:12的发言 >8楼:搜索了整个子程序L...

引用8楼详细内容:

搜索了整个子程序L3104,除了PROC行,只有语句“R10=ld_r10”(顶楼亦可见)两句有有“ld_10”,其它无,

十分感谢大侠!大侠有心了。
 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
请教,子程序中形式参数 ld_r10等的值来自哪里?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。