📱 手机上看不到完整课程(数字人讲师需要电脑浏览器的 3D 支持)。下面是这节课的图文讲解 + 音频,内容完全一样,手机上也能完整学完。想体验完整课程,用电脑打开这一页即可。
仍然在手机上试试完整课程
本节要做什么
0:33一条指令,三个结果
- 三个结果大于、等于、小于 —— 一次全给你
- 占用三个连续的位起始位由你指定,后面两个跟着被占
- D0 里是七十比 50 大 → M10 置 1,第一盏灯亮
一条 CMP,三个结果位
前面两节课我们都在比大小,用的是触点:一条线通不通。这一节换一条指令,叫 CMP,它一次就给出三个结果。写法是这样:CMP,第一个数,第二个数,最后指定一个起始位。它会一口气占用三个连续的位:第一个表示大于,第二个表示等于,第三个表示小于。看这张图,D0 里是七十,比五十大,所以第一个位 M10 变成 1,第一盏灯亮了。把数值改成五十,再比一次。
三个位的顺序 + 起点自己挑
0:34顺序别记反,起点自己挑
- 大于、等于、小于顺着念:大、等、小
- 起始位可以自己挑从 M20 起,就占 M20 / M21 / M22
- 往前看三个挑起点时预留三个位,别撞上别人的程序
起点自己挑,但要占三个位
先把顺序记牢:大于、等于、小于,顺着念就是「大、等、小」。第一个位管大于,第二个位管等于,第三个位管小于。起始位可以自己挑,不一定非得用 M10。这里我换成从 M20 开始,那么占用的就是 M20、M21、M22 这三个。要提醒一句:起点一挑定,后面两个位就跟着被占掉,所以挑的时候得往前看三个,别跟别人的程序撞上。现在把数值从大改到小,看灯往哪边跑。
两种写法怎么选
0:33触点比较 还是 CMP
- 触点比较只回答一个问题:这一行通不通
- 用的是 CMP三个结论都要时用它,一条顶三条
- 等于那一位数值正好 50:大于不成立,等于位亮
两种写法,同一件事
同样一件事,两种写法都能做。上面这一条用的是触点比较,它只回答一个问题:这一行通不通。下面这一条用的是 CMP,它一次给了三个结论,我们只用了其中大于那一个。那怎么选?只要一个结论、后面直接带输出,就用触点比较,写起来短,也不占位。要是三个结论你都要,比如又要报警、又要显示、又要计数,那就用 CMP,一条顶三条。看五十这个值:大于不成立,可等于那一位亮了。
坑:按钮松了,灯还亮着
0:33坑:松开按钮,灯还亮着
- 按下按钮才比较CMP 挂在按钮后面,按下才执行
- 它还亮着数值都降到 30 了,灯却还亮着
- 根本不执行整条指令不跑,三个位停在原来的结果上
坑:松开按钮,灯还亮着
这一条多了个按钮,想法是按下按钮才比较。可是这里有个坑。按下按钮,D0 是七十,比五十大,灯亮了,没问题。现在松开按钮,数值也降到了三十。按说灯该灭了吧?你看,它还亮着。原因是 CMP 挂在按钮后面,按钮一松,这整条指令就根本不执行了。不执行,那三个位就没人去动它,它们停在最后一次的结果上。记住这一条:条件不成立时,三个位保持原样。
正解:条件没了就自己清
0:30正解:条件没了就自己清
- 那我们就自己管条件一撤没人管,就在程序里自己清
- 三条复位指令按钮松开时导通,把三个位一起清掉
- 要清就清三个漏掉一个,下一轮会带着旧结论走
正解:条件没了就自己清
知道原因就好办了:既然条件一撤、三个位就没人管,那我们就自己管。在按钮后面加一条常闭触点:按钮松开的时候它导通,接着跟三条复位指令,把三个位一起清掉。再看一遍:按下按钮,灯亮;松开按钮,灯跟着灭。这一节要记住的就是,这三个位得自己负责清零,别指望它会自己灭。还有一点,三个位要清就清三个,漏掉一个,下一轮比较就会带着旧的结论走。
收尾:双字版本 + 预告
0:33双字版本 DCMP
- 双字的版本DCMP:两个比较值各占两个字
- 把 D11 清成零数值掉到 3363,比三万小,灯灭
- 下一节讲它的兄弟 ZCP不是比大小,而是判断落在哪一段
双字版本 DCMP
最后看一眼双字的版本。跟前面讲过的双字一样,DCMP 的两个比较值各占两个字,D10 实际吃的是 D10 和 D11 拼起来的一个三十二位数。图上现在 D11 是一,拼出来六万多,比三万大,灯亮。把 D11 清成零,就只剩三千多,比三万小,灯灭。这就是 DCMP。下一节讲它的兄弟 ZCP:那条指令判断的不是大小,而是落在哪一段,做分级报警特别顺手。