yuetianbing
级别: 略有小成
精华主题: 0
发帖数量: 183 个
工控威望: 326 点
下载积分: 889 分
在线时间: 340(小时)
注册时间: 2014-03-12
最后登录: 2024-11-25
查看yuetianbing的 主题 / 回贴
楼主  发表于: 2017-10-26 17:15

理论上来讲,D70在第二次循环后变化为1后值不变的呀!求解释,但是模拟的时候值一直在加一呀?
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1547 分
在线时间: 414(小时)
注册时间: 2017-10-10
最后登录: 2024-11-26
查看枫落云端的 主题 / 回贴
1楼  发表于: 2017-10-27 09:10
先说第一个扫描周期,第一行Z0为0,执行到第二行,进行43次循环,第0次循环时,执行到第三行,此时由于Z0为0,所以条件= D70Z0 D70其实就是= D70 D70,显然条件是成立的,所以INC D70就会加1,也就是 D70为1,之后执行第四行,Z0自加为1(Z0为1),,接着执行到第五行NEXT,但是由于没有达到43次,所以再循环到第三行,(Z0=1)条件= D70Z0 D70其实就是=D71 D70,由于D70为1,D71为0(如果程序没有对D71赋值),显然条件不成立,不执行INC D70,D70还是1;之后执行第四行,Z0自加为1(Z0为2),接着执行到第五行NEXT,但是由于没有达到43次,所以再循环到第三行,、、、、、、、、、之后都是不成立,等到执行完循环43次后;D0还是为1,Z0为43,程序执行完NEXT结束一个扫描周期
之后到第二个扫描周期,第一行还是Z0为0,跟第一个扫描周期类似,由于进入循环的第0次时,Z0为0,所以必定=D70Z0 D70条件成立,D70自加1,也就是变成2;其后周期同理会加1;模拟器的扫描周期为100ms,所以一秒加十次。
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1547 分
在线时间: 414(小时)
注册时间: 2017-10-10
最后登录: 2024-11-26
查看枫落云端的 主题 / 回贴
2楼  发表于: 2017-10-27 09:21
图片:
其实这个程序Z0和循环的作用基本上算是多余。由于D70等于本身,所以Z0=0时,加1,Z0不等于0时,D71-D112里的值不等于D70里的值,可以把程序简单化简为上图
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1547 分
在线时间: 414(小时)
注册时间: 2017-10-10
最后登录: 2024-11-26
查看枫落云端的 主题 / 回贴
3楼  发表于: 2017-10-27 09:25
由于一个扫描周期内,都会存在INC D70条件成立,所以首先D70自加,之后INC D70条件不成立,不自加,这样一个周期内INC条件会有OFF编程ON又变成OFF;所以即使INC D70变为INCP 70,还是会每个周期加1
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1547 分
在线时间: 414(小时)
注册时间: 2017-10-10
最后登录: 2024-11-26
查看枫落云端的 主题 / 回贴
4楼  发表于: 2017-10-27 09:27
所以二楼说的不完全对。因为在一个周期内条件不会一致成立,所以即使加脉冲化P也是会累加
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1547 分
在线时间: 414(小时)
注册时间: 2017-10-10
最后登录: 2024-11-26
查看枫落云端的 主题 / 回贴
5楼  发表于: 2017-10-27 09:38
第5楼w45062099是不加思索或者没有分析验证,说得太绝对。程序初一看,会误认为是INC D70 条件会一直成立,认为加脉冲化P会只执行一次累加,实际上由于一个周期内存在OFF到ON到OFF,所以加脉冲化还是会每个周期累加一次,所以认为是等效于于SM400 INCP D70 是不对的。
枫落云端
施主,脚抬一下
级别: 略有小成

精华主题: 0
发帖数量: 341 个
工控威望: 465 点
下载积分: 1547 分
在线时间: 414(小时)
注册时间: 2017-10-10
最后登录: 2024-11-26
查看枫落云端的 主题 / 回贴
6楼  发表于: 2017-10-27 11:37
循环内没有一直在加,是每一次扫描周期开始后,第一次进入循环时累加一次,也就是Z0=0时累加一次