一段程序的错误原因

OPN   #DB_Numer                   //打开DB 
      L     #StartAdd_PIW
      SLD   3                           //左移三位,变为指针。
      LAR1  
      L     #StarAdd_DB
      SLD   3
      LAR2  
      L     #Number                     // N个字的循环计数为初值
M001: T     #TEMP1                      //计数值 送入 #TEMP1
      L     PIW [AR1,P#0.0]             //按读指针指示的地址读数据
      T     DBW [AR2,P#0.0]             //按写指针指示的地址写数据
      +AR1  P#2.0                       //读指针指向下一数据地址
      +AR2  P#2.0                       //写指针指向下一数据地址
      L     #TEMP1                      //取循环计数值
      LOOP  M001
实现piw的一段值送到指定的DB块内,但是现在DB内部的偏移量上出现了问题,当它等于0、2和 6时,程序没问题,也实现了功能,但是在其它值时,程序报错,变为stop状态,请大家帮助。{火麒麟能看见的话,请帮助谢谢!}

最佳答案

楼主,我用PLCSIM模拟了一下,没出现你所说的问题啊

1:出错时看看诊断缓冲区,PLC----Moudle Information---Diagnostic buffer----open Block,看看诊断信息和哪个语句存在故障?

2:检查下DB块,寻址有没有超出DB区的地址范围?

3:你的这段程序写在FB内还是FC内,FB内的话使用AR2要注意。

给出一段不用地址寄存器AR的程序:在你的FC临时变量内新建2个DINT变量temp2,temp3

 OPN   #DB_Numer
      L     #StartAdd_PIW
      SLD   3
      T     #temp2
      L     #StartAdd_DB
      SLD   3
      T     #temp3

      L     #Number
next: T     #TEMP1
      L     PIW [#temp2]
      T     DBW [#temp3]
      L     #temp2
      +     16
      T     #temp2
      L     #temp3
      +     16
      T     #temp3
      L     #TEMP1
      LOOP  next

提问者对于答案的评价:
非常感谢,还是你经验多,如你所说,就是使用了FB的原因,ar2出了问题,放在fc就ok了,新程序放在fb里也没问题
但是不知道为什么ar2会出问题啊!

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc244793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午11:33
下一篇 2018年12月1日 下午11:34

相关推荐