回复:请教关于300与400累加器问题

虎虎哥仗剑走天涯

  • 帖子

    49
  • 精华

    0
  • 被关注

    18

论坛等级:侠客

注册时间:2013-08-02

普通 普通 如何晋级?

发布于 2017-11-22 10:01:39

6楼

 L     #I_DB_NO               //FC块输入数据,应该是个整数

      T     #T_WORD           //放入临时变量

      OPN   DB [#T_WORD]       //  根据输入数据打开相应的DB块

程序段2

      L     0

      T     #T_Num          //    程序段2是用到的一些中间临时变量清零初始化


      L     0.000000e+000

      T     #T_Real


      CLR   

      =     #T_BOOL


//从此处开始是一个Loop循环,循环59次

      L     59

Ne1:  T     #T_WORD


      LAR1  P#0.0

      L     #T_WORD

      L     1

      -I    

      ITD   

      L     32

      *D    

      +AR1  

//此处乘以32再和地址寄存器AR1相加,根据AR1结构就是字节地址加4 32除以8等于4

结合下面的程序就是不断的用DB块中前面的数据覆盖后面的数据,DB块中总共60个实数类型数据,

32位的,所以字节地址间隔必须是4。


      L     DBD [AR1,P#0.0]

      T     DBD [AR1,P#4.0]

      L     #T_Real

      +R    

      T     #T_Real

//一开始还没有凑满60个数据的时候,后面的数据相加都是0

      AN    #T_BOOL

      A(    

      L     #T_Real

      L     0.000000e+000

      ==R   

      )     

      JC    N1


      L     #T_Num

      L     1

      +I    

      T     #T_Num

//这个是计数次数,是有数据才开始计数,一开始可能刚开机没有数据的时候不计数。

      SET   

      =     #T_BOOL


N1:   L     #T_WORD

      LOOP  Ne1


      LAR1  P#0.0

      L     #I_fLj   

//这个可能就是最新的瞬时流量。写入数据块的第一个D,然后不断向后循环,把最旧的剔除掉

      T     DBD [AR1,P#0.0]

      L     #T_Real

      +R    

      T     #T_Real


      L     #T_Num

      L     1

      +I    

      T     #T_Num

程序段3

      L     #T_Num

      ITD   

      DTR   

      T     #T_R 

//这个地方是实际计数次数,已经是实数形式,这个程序上并没有看到它参与计算


      L     #T_Real

      L     6.000000e+001

      /R    

//这个地方是所有值加起来除以60算平均值

      L     3.600000e+000

//这个地方乘以3.6不知道什么意思?

      *R    

      T     #RET_VAL

//这个可能就是你要的值

然后这个程序用在300PLC没有问题,你说的显示为0,是哪个显示为0 ?

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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