第15课 · 按位算,不是触点与或(逻辑运算)

信捷指令讲堂 · 6 段 · 共 3:22 · 正文 1040 字 · 完全免费

这一节最容易混:梯形图里的"与"是电路,这节课的"与"是按位算二进制。分清这两者,你看程序的速度会快一倍。

完整课程 · 智慧屏 + 数字人讲师加载较慢?先看下面的图文
正在加载数字人讲师 …
首次打开约需 30~60 秒(3D 模型较大,只在电脑上加载)
加载期间可以先往下看图文讲解
这台设备暂时跑不了完整课程需要支持 WebGL 的浏览器(多数电脑浏览器都支持)
下面是同一节课的图文讲解 + 音频,内容完全一样

📱 手机上看不到完整课程(数字人讲师需要电脑浏览器的 3D 支持)。下面是这节课的图文讲解 + 音频,内容完全一样,手机上也能完整学完。想体验完整课程,用电脑打开这一页即可。
仍然在手机上试试完整课程

1/6

本节要做什么:数据的与,和触点的与不是一回事

0:33

数据的与,和触点的与不是一回事

  • 数据之间的与跟触点之间的与做法一样,只是对象换成了寄存器里的十六位
  • 一位一位地比两边这一位都是 1,结果的这一位才是 1
  • 比完只剩下八D0 是 12、D10 是 10,对完结果 8
  • 把 D10 改成三两边没有一位重合 → 结果整个变成零
按位算,不是触点与或(逻辑运算) · 本节要做什么:数据的与,和触点的与不是一回事 梯形图 按位与:一位一位地比

按位与:一位一位地比

前面几课学的与、或,是触点之间的:两个触点都通,路才通。这一节讲的是数据之间的与、或,做法一样,只是对象换成了寄存器里的十六位。先看这条按位与:它把 D0 和 D10 两个数对齐,一位一位地比,只要两边这一位都是 1,结果的这一位才是 1。D0 是十二,D10 是十,比完只剩下八。现在把 D10 改成三,两边没有一位是重合的,结果整个变成零。

2/6

掩码:想留哪几位,就用一个筛子

0:36

掩码:用一个筛子筛掉不要的位

  • 掩码想留下哪几位就写成 1,其余写 0
  • H 开头表示十六进制H0FF 的两个 F 正好是八个 1,罩住低八位
  • 只剩后面的 CDABCD 与完,高八位全被筛掉
  • 换个数据留下的还是低八位;与 H0F 还能把四个输入点打成一个数
按位算,不是触点与或(逻辑运算) · 掩码:想留哪几位,就用一个筛子 梯形图 掩码:筛掉高八位

掩码:筛掉高八位

按位与最常用的一个用法叫掩码:想留下哪几位,就把那几位写成 1,其余写 0,跟数据一与,不相干的位就被筛掉了。图上这条用的是十六进制的 H0FF,H 开头表示十六进制,两个 F 正好是八个 1,罩住低八位。原来的数是 ABCD,与完之后只剩后面的 CD,高八位全被筛掉。换个数据,留下的还是低八位。手册里还有个用法:一个数与 H0F,前面四个输入点的状态就打成了一个数。

3/6

坑:把按位或当加法,一加一还是一位

0:32

坑:把按位或当加法

  • 跟加法长得很像按位或一位一位地比,只要有一位是 1 结果就是 1
  • 结果却还是一想要一加一等于二,实际得到一
  • 把 D10 改成二结果就变成三 —— 碰巧和加法一模一样
  • 试一次对了碰巧对了一次,根本说明不了用法对
按位算,不是触点与或(逻辑运算) · 坑:把按位或当加法,一加一还是一位 梯形图 坑:把按位或当加法用

坑:把按位或当加法用

下面这个坑,很多人第一次用都栽过。按位或,是把两个数一位一位地比,只要有一位是 1,结果这一位就是 1。问题在于它跟加法长得很像,却不是加法。图上 D0 是一,D10 也是一,想要的是一加一等于二,结果却还是一,因为一或一还是一位。更麻烦的是,把 D10 改成二,结果就是三,跟加法一模一样。试一次对了,根本说明不了用法对。

4/6

正解:要加就用加,要合位才用或

0:29

正解:要加就用加,要合位才用或

  • 把按位或换成加要加起来就用加法指令 —— 同样两个 1,真的得到 2
  • 读数完全一样改成 2 时两条都得 3,只有一加一那一下露馅
  • 合成一组按位或的正经用途:把两组互不重叠的位合起来
  • 别混要加法用加,要合成位用或
按位算,不是触点与或(逻辑运算) · 正解:要加就用加,要合位才用或 梯形图 正解:加法要用加法指令

正解:加法要用加法指令

正解很简单:要加起来,就用前面学过的加法指令,把按位或换成加。同样两个一,这回真的得到二。再把它改成二,结果也是三,和刚才那一帧读数完全一样,可这两条是完全不同的东西。按位或的正确用途,是把两组互不重叠的位合成一组:一个数的低八位、另一个数的高八位,或一下就是一个完整的字。要加法用加,要合成位用或,别混。

5/6

按位异或:一眼看出两个数哪里不一样

0:33

按位异或:不同才是 1

  • 两位不一样不一样结果是 1,一样结果是 0
  • 结果整个是零两个数完全相同,每一位都抵消
  • 只有这一位是一改掉最低一位 → 结果正好是 1,就是差异位
  • 翻转那一位一边写成只有一位是 1 的常数,异或就变成翻转它
按位算,不是触点与或(逻辑运算) · 按位异或:一眼看出两个数哪里不一样 梯形图 按位异或:相同为 0,不同为 1

按位异或:相同为 0,不同为 1

第三条是按位异或,规则是两位不一样,结果才是 1,一样就是 0。图上两个数完全相同,每一位都一样,结果整个是零。把其中一个的最低一位改掉,结果就变成了一,而且只有这一位是一。这个特性现场很好用:拿两个数异或一下,结果不是零,就说明它们有不一样的地方,还能一眼看出差在哪一位。反过来,把其中一边写成只有一位是一的常数,异或就变成了翻转那一位。

6/6

取反与求负 + 本部分收尾

0:39

取反传送与求负

  • 取反传送十六位全部颠倒再送到目标 —— 不是只翻某一位
  • 当它是负的最高位是符号位,最高位是 1 → PLC 眼里就是负数
  • 一排输入点要反着读原先一长串常闭触点,现在一条指令代替
  • 求负各位取反再加一;按一下变负,再按一下变回来
按位算,不是触点与或(逻辑运算) · 取反与求负 + 本部分收尾 梯形图 取反传送 + 求负

取反传送 + 求负

最后两条合起来看。上面这条是取反传送:把源数据的十六位全部颠倒再送到目标,原是一的地方变零、是零的地方变一,所以下面那个结果成了负数——手册标注最高位是符号位,最高位是一,PLC 就当它是负的。手册还有个实用例子:一排输入点要反着读,原先得写一长串常闭触点,现在一条取反传送就代替了。下面这条是求负:各位取反再加一。用带沿的触点按一下,数就变负;再按一下又变回来。逻辑运算讲完,这一部分也就齐了。

想亲手试一下?

这门课的电路,已经给你摆好了。不用装软件,点开就能按按钮、看线圈亮。