qiaoshougang
级别: 略有小成
精华主题: 0
发帖数量: 266 个
工控威望: 398 点
下载积分: 5180 分
在线时间: 321(小时)
注册时间: 2007-05-18
最后登录: 2024-06-05
查看qiaoshougang的 主题 / 回贴
楼主  发表于: 2012-12-20 15:16
如题,已知 MW118 中的内容就是数据块DB1中的地址。现在要将这个地址中的数据取出放到MD120中,该怎样操作?【数据块DB1中的数据都是浮点型的】

   OPN   DB     1
      L DBD[MW118    
      T     MD   120
以上编程不能通过,但是用
    OPN   DB     1
      L DBD[MD118]
      T     MD   120
可以通过,但是仿真时CPU是STOP状态,本人刚接触S7-300PLC,小白一个,望各位大佬赐教,谢谢!

夜游神
cvlsam
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员

精华主题: 3 篇
发帖数量: 6745 个
工控威望: 37100 点
下载积分: 9856 分
在线时间: 9414(小时)
注册时间: 2006-09-13
最后登录: 2024-06-05
查看cvlsam的 主题 / 回贴
1楼  发表于: 2012-12-20 15:33
MD118与MD120发生了地址重叠
MD118由MW118,MW120组成,MD120由MW120与MW122组成。
造成CPU进入STOP状态可能是地址重叠后,导致间接寻址越界,你可以诊断模块看看是不是OB121块没有导致进入STOP状态的。
例:访问DB1.DBD100中的数据
L L#100
SLD 3              //左移3位,形成指针格式,用于间接寻址。
T  MD116
OPN DB1
L DBD[MD116]
T  MD120

Good  Luck~
本帖最近评分记录:
  • 下载积分:+5(guochunyi) 热心助人!
    cvlsam
    富士低压,POD(觸摸屏),PLC专卖
    级别: VIP会员

    精华主题: 3 篇
    发帖数量: 6745 个
    工控威望: 37100 点
    下载积分: 9856 分
    在线时间: 9414(小时)
    注册时间: 2006-09-13
    最后登录: 2024-06-05
    查看cvlsam的 主题 / 回贴
    2楼  发表于: 2012-12-20 15:53
    MD116中的数据必须是X.X格式,也就是左移3位或者乘以8后的数据,只能是这样~
    cvlsam
    富士低压,POD(觸摸屏),PLC专卖
    级别: VIP会员

    精华主题: 3 篇
    发帖数量: 6745 个
    工控威望: 37100 点
    下载积分: 9856 分
    在线时间: 9414(小时)
    注册时间: 2006-09-13
    最后登录: 2024-06-05
    查看cvlsam的 主题 / 回贴
    3楼  发表于: 2012-12-20 15:54
    引用
    引用第3楼qiaoshougang于2012-12-20 15:52发表的  :
    还要编写OB121程序吗?


    如果仅仅是为了防止PLC进入停机状态,那么一个空的OB121足以……
    cvlsam
    富士低压,POD(觸摸屏),PLC专卖
    级别: VIP会员

    精华主题: 3 篇
    发帖数量: 6745 个
    工控威望: 37100 点
    下载积分: 9856 分
    在线时间: 9414(小时)
    注册时间: 2006-09-13
    最后登录: 2024-06-05
    查看cvlsam的 主题 / 回贴
    4楼  发表于: 2012-12-20 16:20
    引用
    引用第6楼qiaoshougang于2012-12-20 16:08发表的  :
    谢谢指教,现在能正常读取数据了,但是CPU上SF灯还是亮着,对程序运行有影响吗?谢谢!


    仍然请进行模块诊断并贴出诊断信息。

    Good Luck~
    cvlsam
    富士低压,POD(觸摸屏),PLC专卖
    级别: VIP会员

    精华主题: 3 篇
    发帖数量: 6745 个
    工控威望: 37100 点
    下载积分: 9856 分
    在线时间: 9414(小时)
    注册时间: 2006-09-13
    最后登录: 2024-06-05
    查看cvlsam的 主题 / 回贴
    5楼  发表于: 2012-12-21 23:21
    引用
    引用第8楼qiaoshougang于2012-12-20 16:30发表的  :
    [attachment=98566]


    很明显,地址越界……
    cvlsam
    富士低压,POD(觸摸屏),PLC专卖
    级别: VIP会员

    精华主题: 3 篇
    发帖数量: 6745 个
    工控威望: 37100 点
    下载积分: 9856 分
    在线时间: 9414(小时)
    注册时间: 2006-09-13
    最后登录: 2024-06-05
    查看cvlsam的 主题 / 回贴
    6楼  发表于: 2012-12-22 13:30
    引用
    引用第13楼qiaoshougang于2012-12-22 12:27发表的  :


    谢谢回答,就是这个错误,可是怎么弄才能解决这个问题呢?我弄了好长时间了,望赐教,谢谢!!


    解决你的程序,那是你的编程错误,增加对数据块长度的检测,然后通过比较指令将你的寻址范围控制在可控范围内……

    Regards
    cvlsam
    富士低压,POD(觸摸屏),PLC专卖
    级别: VIP会员

    精华主题: 3 篇
    发帖数量: 6745 个
    工控威望: 37100 点
    下载积分: 9856 分
    在线时间: 9414(小时)
    注册时间: 2006-09-13
    最后登录: 2024-06-05
    查看cvlsam的 主题 / 回贴
    7楼  发表于: 2012-12-22 14:11
    唉~~~~~

    数据块长度检测并不是通过页面设定,而是通过编程来决定的。

    通过装入DBLG来得到数据块的长度,因为长度的反馈值为字节,因此,如果你的数据块的数据为4个字节的Real类型的话,你就要除以4,那就是一个块中的最大寻址,然后用比较去控制你的寻址指针。

    正如你表示的,不超过255,可是,你显示的数据块中数据才51条,你寻址寻址52就越界,Ok?

    对于这个问题已经讨论的足够深度了,你或许的编程水平还没有达到这个水平,你需要花足够的时间参阅StL手册。

    Regards