• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
f1652577
沧海一声笑!
级别: 探索解密
精华主题: 0
发帖数量: 16 个
工控威望: 116 点
下载积分: 3369 分
在线时间: 26(小时)
注册时间: 2016-04-15
最后登录: 2023-08-18
查看f1652577的 主题 / 回贴
楼主  发表于: 2017-11-15 16:46
图片:
MOV (SM402 ,K0,D20);
MOV (SM402 ,K0,D21);
FOR D20 :=K0 TO K99    BY K1 DO
    D20:= D20+K1;
    D21:= D21+D20;
END_FOR;

模拟时为什么D21中的数值一直在变?
洁白的月光
级别: 探索解密
精华主题: 0
发帖数量: 62 个
工控威望: 160 点
下载积分: 526 分
在线时间: 103(小时)
注册时间: 2016-03-12
最后登录: 2018-10-14
查看洁白的月光的 主题 / 回贴
1楼  发表于: 2017-11-15 17:02
把前两句搞成 d20:=0;
d21:=0;
试试。或者换成M8000。没用过Q,应该是SM400把。。
f1652577
沧海一声笑!
级别: 探索解密
精华主题: 0
发帖数量: 16 个
工控威望: 116 点
下载积分: 3369 分
在线时间: 26(小时)
注册时间: 2016-04-15
最后登录: 2023-08-18
查看f1652577的 主题 / 回贴
2楼  发表于: 2017-11-15 17:16
前两句时给d20,d21赋初始值,sm402就是m8002
洁白的月光
级别: 探索解密
精华主题: 0
发帖数量: 62 个
工控威望: 160 点
下载积分: 526 分
在线时间: 103(小时)
注册时间: 2016-03-12
最后登录: 2018-10-14
查看洁白的月光的 主题 / 回贴
3楼  发表于: 2017-11-15 19:36
不好意思,弄错了。感觉三菱的循环程序有问题。我用C语言写了同样的程序。C语言就可以。如果你要解决那个问题。,你不防可以写个IF M0 THEN,当M0启动开始循环。然后你D20增加到101.在循环语句里嵌套一个,IF d20=100 then,m0:=false; exit;end_if;end_for;end_if;
f1652577
沧海一声笑!
级别: 探索解密
精华主题: 0
发帖数量: 16 个
工控威望: 116 点
下载积分: 3369 分
在线时间: 26(小时)
注册时间: 2016-04-15
最后登录: 2023-08-18
查看f1652577的 主题 / 回贴
4楼  发表于: 2017-11-16 09:27
还是不行啊!
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1595 分
在线时间: 411(小时)
注册时间: 2017-10-10
最后登录: 2024-11-22
查看枫落云端的 主题 / 回贴
5楼  发表于: 2017-11-16 09:37
只能说楼主还没有深刻理解PLC的循环扫描工作机制
洁白的月光
级别: 探索解密
精华主题: 0
发帖数量: 62 个
工控威望: 160 点
下载积分: 526 分
在线时间: 103(小时)
注册时间: 2016-03-12
最后登录: 2018-10-14
查看洁白的月光的 主题 / 回贴
6楼  发表于: 2017-11-16 09:42
是可以的,我都试过了。反正你把他包装成一个快。让他执行一次就好了。
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1595 分
在线时间: 411(小时)
注册时间: 2017-10-10
最后登录: 2024-11-22
查看枫落云端的 主题 / 回贴
7楼  发表于: 2017-11-16 09:46
前两句只是PLC运行第一个扫描周期起作用,每一个FOR循环,D20都会从0自加到99。D21=(1+2+...+99)*N个扫描周期,由于直接使用D21寄存器,默认为16位的有符号整数,最大只能到+32767,再加就会溢出到符号位,所以变成负数,之后自加又变成正数,继续加又溢出变负数,一直不断地循环
本帖最近评分记录:
  • 下载积分:+1(shangbinhou) 热心助人!
  • 下载积分:+1(conchnit) 热心助人!
    枫落云端
    施主,脚抬一下
    级别: 略有小成

    精华主题: 0
    发帖数量: 341 个
    工控威望: 465 点
    下载积分: 1595 分
    在线时间: 411(小时)
    注册时间: 2017-10-10
    最后登录: 2024-11-22
    查看枫落云端的 主题 / 回贴
    8楼  发表于: 2017-11-16 09:50
    我只是具体分析他的程序运行过程,产生这个现象是正常的。如果想只是要循环一次,那就得加条件限制。
    MOV (SM402 ,K0,D20);
    MOV (SM402 ,K0,D21);
    IF LDP(TRUE,M0) THEN
        FOR D20 :=K0 TO K99    BY K1 DO
            D20:= D20+K1;
            D21:= D21+D20;
        END_FOR;
    END_IF;
    枫落云端
    施主,脚抬一下
    级别: 略有小成

    精华主题: 0
    发帖数量: 341 个
    工控威望: 465 点
    下载积分: 1595 分
    在线时间: 411(小时)
    注册时间: 2017-10-10
    最后登录: 2024-11-22
    查看枫落云端的 主题 / 回贴
    9楼  发表于: 2017-11-16 09:53
    以上是M0 为ON时执行一次循环,如果只是想PLC开机自动算一次,那就变成
    MOV (SM402 ,K0,D20);
    MOV (SM402 ,K0,D21);
    IF SM402 THEN
        FOR D20 :=K0 TO K99    BY K1 DO
            D20:= D20+K1;
            D21:= D21+D20;
        END_FOR;
    END_IF;
    conchnit
    级别: 略有小成
    精华主题: 0
    发帖数量: 131 个
    工控威望: 456 点
    下载积分: 6107 分
    在线时间: 69(小时)
    注册时间: 2013-03-17
    最后登录: 2024-11-03
    查看conchnit的 主题 / 回贴
    10楼  发表于: 2017-11-16 14:15
    引用
    引用第9楼枫落云端于2017-11-16 09:53发表的  :
    以上是M0 为ON时执行一次循环,如果只是想PLC开机自动算一次,那就变成
    MOV (SM402 ,K0,D20);
    MOV (SM402 ,K0,D21);
    IF SM402 THEN
        FOR D20 :=K0 TO K99    BY K1 DO
    .......



    三菱ST里,32位数据传送 你是如何写的?
    踏实走好每一步. 承接自动化项目.
    conchnit
    级别: 略有小成
    精华主题: 0
    发帖数量: 131 个
    工控威望: 456 点
    下载积分: 6107 分
    在线时间: 69(小时)
    注册时间: 2013-03-17
    最后登录: 2024-11-03
    查看conchnit的 主题 / 回贴
    11楼  发表于: 2017-11-16 14:20
    引用
    引用第7楼枫落云端于2017-11-16 09:46发表的  :
    前两句只是PLC运行第一个扫描周期起作用,每一个FOR循环,D20都会从0自加到99。D21=(1+2+...+99)*N个扫描周期,由于直接使用D21寄存器,默认为16位的有符号整数,最大只能到+32767,再加就会溢出到符号位,所以变成负数,之后自加又变成正数,继续加又溢出变负数,一直不断地循环

    分析非常透彻 到位,是个高手
    踏实走好每一步. 承接自动化项目.
    • «
    • 1
    • 2
    • »
    • Pages: 1/2     Go