回复:关于寄存器间接寻址

已锁定

艾星落尘

  • 帖子

    996
  • 精华

    1
  • 被关注

    179

论坛等级:至圣

注册时间:2010-02-26

白金 白金 如何晋级?

回复:关于寄存器间接寻址

669

0

2014-11-28 16:44:23

展开查看
引用自找答案,问题ID:121739

初次用S7-300,梯形图还勉强可以调试,有段程序要用循环指令比较DB块内4个变量的大小,同时把最大值取出来,把索引号以出来,我编了一段程序,调试老是出错,请大虾们指导,不甚感谢!

提问者:210028


艾星落尘 回答道:

首先有个明显的错误,
 L 2
 T  MD50
MD50作为存放指针的存储区,你这样的编是不对的;
L 2
SLD 3
T  MD50
我写的程序,供参考:数据存在mw400开始的7个字里,用SFC20拷贝到DB1开始的7个字里,怎么做的目的是在比较的过程中,数值会被改变,所以增加了一道;
 CALL  "BLKMOV"
       SRCBLK :=P#M 400.0 BYTE 14
       RET_VAL:=MW440
       DSTBLK :=P#DB1.DBX0.0 BYTE 14
      OPN   DB     1
      LAR1  P#0.0
      L     6
_001: T     MW   200
      L     DBW [AR1,P#0.0]
      L     DBW [AR1,P#2.0]
      <I    
      JCN   _002
      TAK   
      T     DBW [AR1,P#2.0]
_002: +AR1  P#2.0
      L     DBW [AR1,P#0.0]
      T     MW   300
      L     MW   200
      LOOP  _001

还有1人在找答案上回答了该问题,查看全部>
这个程序当时是我写的,在模拟的时候发现DB块的数值会被改动,所以增加了一个SFC20,让输入的数据不发生变化;但是总觉的不是很好,后来又写了一个,与大家共同分享下:
7个数据存在DB2.DBW0开始的7个字里,取出的最大数存放在MW520里;
程序如下:
OPN DB 2
LAR1 P#0.0
LAR2 P#2.0
L 6
_001: T MW 500
L DBW [AR1,P#0.0]
L DBW [AR2,P#0.0]
>I
JC _002
CAR
TAR1 AR2
_002: +AR2 P#2.0
L MW 500
LOOP _001
NOP 0
L DBW [AR1,P#0.0]
T MW 520
回复:关于寄存器间接寻址 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54622条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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