回复:谁能解释这个求平均值、或者有这个资料发给我一份

zhangli0

西门子1847工业学习平台

  • 帖子

    17128
  • 精华

    63
  • 被关注

    888

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2018-04-12 09:57:41

4楼

你这程序源代码都没有,这是上传上来的项目。知道它的怎么做,也不知道为什么要这么做!

 SET   //置位rlo
      SAVE   //保存rlo到br
      =     L     30.1//保存rlo到临时变量L30.1 
      L     W#16#0 
      T     LW    32 //lw32=W#16#0
      L     DW#16#87000020 
      T     LD    34 //ld34=DW#16#87000020

      L     W#16#0 
      T     LW    38 //lw38=W#16#0

      L     DW#16#87000080 
      T     LD    40// ld40=DW#16#87000080 
      TAR2  LD    44 //将ld44的值传到地址寄存器2
      UC    SFC    6 //调用系统块sfc6
            P#L 28.0 
            P#L 32.0 
            P#L 38.0 
      LAR2  LD    44 //将地址寄存器2的值保存到ld44
      L     #TEMP10.TEMP14 //temp10是结构变量,读取它中的temp14的值到累加器1
      L     B#16#64 //累加器1的值保存到累加器2,读取常数B#16#64到累加器1

      ==I   
      O     #STAT3 //如果累加器1的值和累加器2的值相等或者stat3为1则执行下面的程序,
      JCN   M001 //否则跳到M001标号处

      CLR   
      =     #STAT3 //stat3复位
      L     0 
      T     #STAT6 //stat6=0
M002: L     #STAT6 //读取stat6到累加器1
      L     31 //stat6保存到累加器2,常数31保存到累加器1
      <=I   //如果stat6=31则执行下面的程序否则跳转到标号M003
      JCN   M003 
      TAK   //交换累加器1和2的值
      ITD   //stat6转换成双整数
      L     L#32 
      *D  //stat6*32   
      JO    M004//如果溢出,跳到M004 
      JU    M005 
M004: CLR   
      =     L     30.1 //L30.1=0
M005: TAR2   //如果stat6*32没有溢出,则读取地址寄存器的值和stat6*32的结果相加①

      +D     
      JO    M006//如果溢出则跳转到标号M006
      JU    M007 //否则跳转到M007
M006: CLR   
      =     L     30.1 //L30.1=0
M007: L     0.000000e+000 //①处结果保存到累加器2,0.0保存到累加器1
      TAK   //交换累加器1和2的值
      LAR1   //将①的结果保存到地址寄存器
      TAK   //交换累加器1和2的结果,累加器1为0.0
      T     DID [AR1,P#12.0] //累加器1的结果保存到db块的ar1地址寄存器对应的地址偏移量为12
      L     #STAT6 //的地址
      L     1 
      +I   //stat6+1 ② 
      JO    M008 如果溢出则跳转到M008,否则跳转到M009
      JU    M009 
M008: CLR   
      =     L     30.1 //L30.1复位
M009: T     #STAT6 stat6=②处的结果
      JU    M002 跳转到M002
M003: CLR   
      =     #STAT7 //stat7=0
      L     0 
      T     #STAT6 //stat6=0
      L     0.000000e+000 
      T     #OUT2 //out2=0
M001: L     #TEMP10.TEMP14 
      L     B#16#64 
      ==I  //如果#TEMP10.TEMP14=B#16#64,则执行后面的程序,否则跳转到M010 
      JCN   M010 
      JU    M011跳转到M011 
M010: L     #IN1 
      L     32 
      >I     
      TAK   
      L     1 
      =     L     30.2 //如果in1>32则L30.2为否则为0
      <I     
      O     L     30.2 
      JCN   M012 //in1<32或者大于32则跳转到M012,否则执行下面的程序
      L     0.000000e+000 
      T     #OUT2 //out2=0.0
      CLR   
      =     L     30.1//L30.1=0
      JU    M011 //跳到标号M011
M012: L     #STAT6 
      ITD   
      L     L#32 
      *D //stat6*32 ③   
      JO    M013 如果③的结果溢出则跳到M013否则跳到M014
      JU    M014 
M013: CLR   
      =     L     30.1 //L30.1=0
M014: TAR2   
      +D  //否则地址寄存器2的值+③的结果  ④ 
      JO    M015 //如果溢出跳到M015,否则跳到M016
      JU    M016 
M015: CLR   
      =     L     30.1 //L30.1=0
M016: L     #IN0 //④的值保存到累加器2,in0保存到累加器1
      TAK   //l累加器1和2的值交换,
      LAR1  ④的值保存到地址寄存器1 
      TAK   //累加器1和2交换数据,累加器1的值为in0
      T     DID [AR1,P#12.0] //in0保存到db块的地址寄存器1的地址偏移量12处
      L     #STAT6 
      L     1 
      +I     
      JO    M017 stat6+1如果溢出跳转到M017,否则跳转到M018
      JU    M018 
M017: CLR   
      =     L     30.1 //L30.1=0
M018: T     #STAT6 //累加器1的结果保存到stat6中
      L     #IN1 
      >=I   //如果stat6大于in1执行下面的程序,否则跳到M019
      JCN   M019 
      SET   
      =     #STAT7 //stat7=1
      L     0 
      T     #STAT6 //sat6=0
M019: L     0.000000e+000 
      T     #STAT5 //stat5=0.0
      CLR   //rlo复位
      A     #STAT7 //如果stat7为1则执行后面的程序,否则跳到M020
      JCN   M020 
      L     #IN1 
      T     #TEMP8 //temp9=in1
      JU    M021 //跳到M021
M020: L     #STAT6 
      T     #TEMP8 //temp8=stat6
M021: L     #TEMP8 
      L     1 
      -I     
      JO    M022 temp8-1结果如果溢出跳到M022,否则跳到M023
      JU    M023 
M022: CLR   
      =     L     30.1 //L30.1=0
M023: L     0 
      T     #TEMP9 //temp9=0
      TAK   //累加器1和2的值交换,累加器1的值是temp8-1
      T     LW    32 //lw32=temp8-1
      TAK  //累加器1和2的值交换,累加器1的值是0  
M024: L     #TEMP9 
      L     LW    32 
      <=I  //如果temp9<lw32,则执行下面的程序否则跳到M025 
      JCN   M025 
      TAK   
      ITD   
      L     L#32 
      *D     //temp9*32如果溢出跳到M026,否则跳到M027
      JO    M026 
      JU    M027 
M026: CLR   
      =     L     30.1 //L30.1=0
M027: TAR2   //地址寄存器2的值保存到累加器1,temp9*32保存到累加器2
      +D     
      JO    M028//累加器1和2的值相加如果溢出则跳到M028,否则跳到M029,⑤
      JU    M029 
M028: CLR   
      =     L     30.1 //L30.1=0
M029: L     #STAT5 //累加器1=sata5,累加器2=⑤处的结果
      TAK   //交换累加器1和2的值,
      LAR1//累加器1当前结果保存到地址寄存器  
      TAK   //交换累加器1和2的值
      L     DID [AR1,P#12.0] 
      +R     
      JO    M030 //如果stat5+DID [AR1,P#12.0]的结果溢出则跳到M030,否则跳到M031⑥

      JU    M031 
M030: CLR   
      =     L     30.1 //L30.1=0
M031: T     #STAT5 stat5=⑥处结果
      L     #TEMP9 
      L     1 
      +I     
      JO    M032 //如果temp9+1结果溢出,跳到M032,否则提到M033 ⑦;
      JU    M033 
M032: CLR   
      =     L     30.1 //M30.1=0
M033: T     #TEMP9 //temp9=⑦处结果;
      JU    M024 //跳到M024
M025: L     #TEMP8 
      ITD   
      DTR   
      L     #STAT5 
      TAK   
      /R     
      JO    M034 //如果stat5/real(temp8)结果溢出跳到M034,否则跳到M035⑧
      JU    M035 
M034: CLR   
      =     L     30.1 //L30.1=0
M035: T     #OUT2 //out2=⑧处结果
M011: CLR   //rlo=0
      A     L     30.1//判断L30.1状态
      SAVE   //保存rlo结果到br
      BE     //程序结束

活到老,学到老!为了生活学习吧!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。