回复:STL如何实现DB块中数据分组循环提取

已锁定

n次看你的背影

  • 帖子

    2321
  • 精华

    73
  • 被关注

    53

论坛等级:奇侠

注册时间:2008-03-11

普通 普通 如何晋级?

发布于 2021-07-09 23:10:08

8楼

对楼主遇到的问题也有兴趣,今晚花了点时间,试着写了点代码,在真实PLC里面测试了一下,基本能实现楼主的功能;对语句做了一些注释,也许楼主可以参考一下。

//=======================判断NC当前的工作是否完成==========================

      CLR                               //复位RLO位;

      A     "NC_WORK_FINISHED"          //读取NC当前的工作状态

      JCN   END                         //如果NC当前的工作完成,则往下执行;否则跳转到END标签

//=====================判断输入的数据组编号是否正确========================

      CLR                               //复位RLO位;

      L     MD   100                    //读取当前NC输入的数据组编号

      L     1

      <D    

      JC    EROR                        //如果NC输入的数据组编号小于1,跳转到EROR标签;


      L     MD   100                    //读取当前NC输入的数据组编号

      L     50

      >D    

      JC    EROR                        //如果NC输入的数据组编号大于50,跳转到EROR标签;

//================根据输入的数组编号,获取对应的数组首地址=================

      L     MD   100                    //读取当前NC输入的数据组编号 (n)

      L     1                           //公差

      -D                                //差值暂存在累加器1中 (n-1)

      L     40                          //每个数组40个字节偏移

      *D                                //当前数组的首地址(n-1)×40 暂存累加器1中

      SLD   3                           //累加器1中的内容左移三位,获得当前数组号的字节首地址(地址格式)

      LAR1                              //把当前的首地址载入到地址寄存器1,源地址的首地址

      LAR2  P#0.0                       //初始化地址寄存器2,目标地址的首地址

//===============将当前数组(10个浮点数)写到对应的目标地址中================

      OPN   DB   100                    //打开DB100

      L     10                          //设定循环次数

NEXT: T     LW    20                    //暂存循环次数

      L     DBD [AR1,P#0.0]             //读取当前数组中的数据★

      T     MD [AR2,P#20.0]             //把当前数组中的数据写到目标地址中★ MD20 ~MD56

      +AR1  P#4.0                       //源地址递增四个字节

      +AR2  P#4.0                       //目标地址递增四个字节

      L     LW    20                    //读取当前的循环次数

      LOOP  NEXT                        //跳转到NEXT标签,循环次数减1,至0时,离开循环

      JU    END                         //10个数据传送完成,跳转到END标签

//=========================================================================

EROR: L     1

      T     MD   100                    //数据组编号输入错误时,默认传送第一组数组;

END:  NOP   0


如果要让PLC自动产生数组编号,可以对"NC_WORK_FINISHED"进行循环计数,计数结果存入MD100。


佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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