qiyun0528
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看qiyun0528的 主题 / 回贴
楼主  发表于: 2011-11-25 15:32
图片:
最近我在学习300的编程,还是遇到了些问题,希望大家的帮助,下面的这个截图,希望知道的回答下,在次很感谢大家了?

为什么我接通I0。2的时候,然后再接通I0。0  Q0。0为什么没有输出呢?
cvlsam
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员

精华主题: 3 篇
发帖数量: 6777 个
工控威望: 38380 点
下载积分: 4283 分
在线时间: 9540(小时)
注册时间: 2006-09-13
最后登录: 2024-12-24
查看cvlsam的 主题 / 回贴
1楼  发表于: 2011-11-25 16:09
因为:MD4由MB4,MB5,MB6,MB7组成,其中MB6,MB7是他的低字
            MD6由MB6,MB7,MB8,MB9组成,其中MB6,MB7是他的高字。

你给MD4赋值为6,其写入最低字中,也就是MB7中的值为6,其16进制代码为:16#0000 0006
由于MD4,与MD6存在交叉地址空间,因此此时的MD6的16进制代码为:16#0006 0000
接下来,你给MD6赋值4,因此4写入低字空间,MD6的16进制代码为 16#0000 0004,看见了没有,这个操作将MD4的低字MB6,MB7同时清零了。

因此,此时MD4的值为0,而MD6的值为4.

又由于你使用CMP >=R 指令,而MD4的值为0,因此其浮点数也为0,而MD6的值为4,其浮点数必定不为0,16进制4的浮点数应该为:5.60519e-045)因此,MD6的值始终大于MD4的值,能流不导通。

在此段程序中,楼主做了两个初学者极大的错误:
1、使用地址重叠,一般不是特殊需求应避免使用重叠地址,这可能导致正常数据被意外修改。
2、使用了浮点数比较,因为浮点数是近似值,因此使用浮点数比较可能导致一些意外情况。

Good Luck~