PLC逻辑或指令同加指令的区别 点击:1547 | 回复:8



hongwudadi111

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:6帖 | 15回
  • 年度积分:0
  • 历史总积分:116
  • 注册:2011年8月01日
发表于:2012-01-14 11:26:37
楼主
对于两个字来说,如果对其内容执行逻辑或指令或者将两个字相加,按理说得出的结果应该相同,但是在实际的执行过程中结果却是不同的,为什么呢?(原因:本来我想将第一个字中的低八位左移8位后与第二个字的低八位组成一个新字,结果用或指令得不到想要的结果,无奈只好将第一个字左移八位后与第二个字相加才实现)


楼主最近还看过



芳季

  • [版主]
  • 精华:5帖
  • 求助:7帖
  • 帖子:105帖 | 5336回
  • 年度积分:0
  • 历史总积分:20165
  • 注册:2003年1月31日
发表于:2012-01-14 11:41:42
1楼

不知道你要什么结果?也不知道你对两个指令认识程度。

或指令就是或指令。加指令就是加指令。明显是两个指令。不可能功能一样的。

请你先用你的话介绍一下这两个指令功能。

水中鱼

  • 精华:43帖
  • 求助:4帖
  • 帖子:324帖 | 3802回
  • 年度积分:0
  • 历史总积分:15038
  • 注册:2011年11月10日
发表于:2012-01-14 12:07:08
2楼

逻辑或和算术加指令是两个不同的指令,一个是逻辑指令,一个是算术指令,算术指令有进位和溢出状态。两个字进行逻辑或第一个字左移八位后与第二个字相加执行的结果当然不一样,比如A=00001111B=00001111,A||B=00001111;A+B=00011110,结果是不一样的。在不溢出,不进位的情况,得到的数值是一样的。

 

莫其麟

  • 精华:14帖
  • 求助:0帖
  • 帖子:125帖 | 5688回
  • 年度积分:0
  • 历史总积分:29157
  • 注册:2004年2月27日
发表于:2012-01-14 12:45:50
3楼

按运算规则,或运算有1+1=1,加运算是1+1=10;如果存在这样的情况,则两者的运算结果是不同的。

zhxl198808

  • 精华:7帖
  • 求助:14帖
  • 帖子:79帖 | 3915回
  • 年度积分:0
  • 历史总积分:22219
  • 注册:2008年9月06日
发表于:2012-01-14 13:10:45
4楼

逻辑或,是逻辑运算符,符号是“||”(在PASCAL中为"or")。 “逻辑或”相当于生活中的“或者”,当两个条件中有任一个条件满足,“逻辑或”的运算结果就为“真”

A或B的真值表(也写作AB(逻辑学),A || B(计算机科学),或A + B(电子学))。

  

AB

加指令就是算术运算

今生缘

  • [版主]
  • 精华:45帖
  • 求助:23帖
  • 帖子:4907帖 | 10148回
  • 年度积分:4
  • 历史总积分:111194
  • 注册:2011年3月02日
发表于:2012-01-14 14:34:42
5楼

什么是逻辑运算 ? 逻辑运算用来判断一件事情是“对”的还是“错”的,或者说是“成立”还是“不成立”,

1、逻辑运算是按位进行的,对进位标志不产生影响

2、该指令用于屏蔽某些位

    0 || 0 = 0;

  1 || 0 = 1;

  0 || 1 = 1;

  1 || 1 = 1;

指令功能:ADD指令将源操作数和目标操作数相加, 并将结果送入目标操作数。算术指令,算术指令有进位和溢出状态

所以这是两个不同的概念问题,楼主仔细考虑一下

 

 

wyb2866255

  • 精华:73帖
  • 求助:0帖
  • 帖子:218帖 | 2872回
  • 年度积分:0
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-01-14 16:34:12
6楼

对:本来我想将第一个字中的低八位左移8位后与第二个字的低八位组成一个新字,结果用或指令得不到想要的结果,无奈只好将第一个字左移八位后与第二个字相加才实现的回复:

    你的思路是对的,可能在编程中由于对二个字处理的不对造成结果错误,编程时应这样处理:

 1、对第一个字中的低八位左移8位应选用左移指令,不能用循环左移指令,这样左移8位后,原字的低字节内容移到高字节里,而低字节内容=0,

 2、对第二个字的低八位在进行与第一个字相或之前,应对第二个字先进行与指令处理,即先用立即数 16#FF 与第二个字相与,与运算的结果,使第二个字的原高8位数=0,

 3、经过上面的二步处理后,再将这二个字相或,就可得到正确值。

时空

  • 精华:2帖
  • 求助:250帖
  • 帖子:541帖 | 4473回
  • 年度积分:0
  • 历史总积分:31341
  • 注册:2008年6月06日
发表于:2012-01-14 19:08:03
7楼

逻辑或取数没有错,问题是你左移八位估计就有问题了

如楼上所说

hongwudadi111

  • 精华:0帖
  • 求助:2帖
  • 帖子:7帖 | 15回
  • 年度积分:0
  • 历史总积分:116
  • 注册:2011年8月01日
发表于:2012-01-29 12:00:06
8楼
回复内容:
对:wyb2866255关于对:本来我想将第一个字中的低八位左移8位后与第二个字的低八位组成一个新字,结果用或指令得不到想要的结果,无奈只好将第一个字左移八位后与第二个字相加才实现的回复:    你的思路是对的,可能在编程中由于对二个字处理的不对造成结果错误,编程时应这样处理: 1、对第一个字中的低八位左移8位应选用左移指令,不能用循环左移指令,这样左移8位后,原字的低字节内容移到高字节里,而低字节内容=0, 2、对第二个字的低八位在进行与第一个字相或之前,应对第二个字先进行与指令处理,即先用立即数 16#FF 与第二个字相与,与运算的结果,使第二个字的原高8位数=0, 3、经过上面的二步处理后,再将这二个字相或,就可得到正确值。内容的回复:

多谢指点!

热门招聘
相关主题

官方公众号

智造工程师