第21课 · 同一个数的几种存法(数据转换)

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

仪表读数、数码管显示、浮点运算,各自要不同的数字存法。这节课把转换指令一次讲透,让你不再对着乱码般的十六进制发愁。

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

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

1/6

为什么要有转换:同一个数,两种存法

0:36

同一个数,两种存法

  • 图上是两条都在送一千二百三十四,差别只在后面跟 K 还是 H
  • K 走普通二进制机器按二进制存,D0 里就是一千二百三十四
  • H 走 BCD 存法D10 里是十六进制 1234,机器一读成了四千六百六十
  • 所以得有个东西翻译拨码开关、时钟寄存器里存的都是 BCD 格式
同一个数的几种存法(数据转换) · 为什么要有转换:同一个数,两种存法 梯形图 同一个 1234 的两种存法

同一个 1234 的两种存法

先弄明白一件事:同一个数,为什么会需要转换。看图上两条,都在送一千二百三十四。上面那条后面跟 K,机器按普通二进制存,D0 里就是一千二百三十四。下面那条跟 H,是人为按另一种格式存进去的,D10 里装着十六进制的 1234,可机器一读成了四千六百六十。差别就在 BCD 这种存法上:每一位十进制数单独占半个字节。拨码开关送进来的、时钟寄存器里存的,都是这种格式,得有东西帮我们翻译。

2/6

BIN:把拨码开关和时钟读回来的 BCD 码翻译成机器认的数

0:38

BIN:把 BCD 码翻成机器认的数

  • 读回来都是 BCD拨码开关和时钟给的,是另一种叫 BCD 的格式
  • 手册例子是读时钟HD0~HD6 存秒分时日月年星期,七个值全是 BCD
  • 就用 BIN 翻译源写 D0、目标写 D10,翻完才能拿去做运算
  • 翻完才是能算的数机器读出来是 4660,翻完变成 1234
同一个数的几种存法(数据转换) · BIN:把拨码开关和时钟读回来的 BCD 码翻译成机器认的数 梯形图 BIN:源 D0 是 BCD 的 1234

BIN:源 D0 是 BCD 的 1234

读拨码开关、读时钟,拿回来的都是 BCD 码。手册上举的是读时钟:秒、分、时、日、月、年、星期,七个数分别存在 HD0 到 HD6 里,全是 BCD。想拿它们做加减比较,先得用 BIN 翻译一遍。图上源写 D0,目标写 D10。D0 里现在放着 BCD 的 1234,机器读出来是四千六百六十;走过 BIN,D10 变成一千二百三十四,这才是能算的数。把它换成五十九,D10 立刻变成五十九。

3/6

BCD:把机器算的数翻成对面认的存法

0:39

BCD:翻成对面认的存法

  • 送显示要走这条机器算完的数,显示屏和变频器只认 BCD 存法
  • 翻完 D10 变了1234 走 BCD 之后,变成十六进制的 1234
  • 别被监控吓到监控条显示 4660,不是算错,是存法不一样
  • 手册也提醒过看浮点要用自由监控、选对类型,是同一个道理
同一个数的几种存法(数据转换) · BCD:把机器算的数翻成对面认的存法 梯形图 BCD:源 D0 是一千二百三十四

BCD:源 D0 是一千二百三十四

反过来那半就是 BCD。机器算完的数要送去显示,或者给变频器当频率设定,对面只认 BCD 存法,得先用 BCD 指令把机器里的二进制数翻过去。图上源 D0 是一千二百三十四,走过 BCD 之后,D10 变成十六进制的 1234。有个容易吓人的地方:监控条上 D10 显示四千六百六十,不是一千二百三十四。它没算错,只是存法不一样,手册讲浮点监控时也专门提醒过。把它换成四十,D10 跟着变成六十四。

4/6

FLT / INT:整数和浮点互转,小数是四舍五入

0:37

FLT 转浮点 · INT 转回整数

  • 为什么要互转整数和浮点底层存放格式完全不一样
  • FLT 占两格1234 变成浮点后,装在 D10、D11 两个寄存器里
  • 看浮点要选类型监控条上是两个怪数,手册专门讲过要用自由监控
  • INT 是四舍五入130.2 得 130、130.8 得 131,不是把小数砍掉
同一个数的几种存法(数据转换) · FLT / INT:整数和浮点互转,小数是四舍五入 梯形图 FLT 转浮点 · INT 转回整数

FLT 转浮点 · INT 转回整数

接下来是浮点。整数和浮点底层存放格式完全不一样,所以两边要互相转。FLT 把整数变浮点,它要占两个寄存器:D0 里的一千二百三十四,走过 FLT 之后装在 D10、D11 两个格子里。监控条上这两个格子看着是怪数,手册里专门讲过,看浮点要用自由监控。反过来是 INT,把浮点变回整数,手册原例是浮点一百三十点二,INT 之后得一百三十。小数是四舍五入不是砍掉,一百三十点八会进位成一百三十一。

5/6

DECO / ENCO:一个编号点亮一路,再把那一路编回编号

0:37

一个编号 ⇄ 点亮第几路

  • 跟上一课接得上移位是整体挪位,译码是把编号变成哪一路
  • 源里给个编号源写 5、位数写 3 → 八路里第 5 路 M15 亮
  • 反过来是 ENCO八路里哪一路通着,就编回那个编号
  • 只认最高那一位多路同时通时,低位直接忽略
同一个数的几种存法(数据转换) · DECO / ENCO:一个编号点亮一路,再把那一路编回编号 梯形图 一个编号 ⇄ 点亮第几路

一个编号 ⇄ 点亮第几路

再说译码和编码,这一对跟上一课的移位接得上。译码 DECO 干的事是:源里给个编号,就把目标那一排里对应的一路点通,其余全灭。图上源写个五,位数写三,也就是八路,结果 M10 往后数第五路 M15 亮,从零数起。一个编号进来只亮一路,这是它最常见的用法。反过来那半叫 ENCO 高位编码:哪一路通着,就编回那个编号,图上编回来 D20 又是五。手册还提一句:多路同时通时只认最高的那一位,低位忽略。

6/6

ASCI / HEX:把数翻成字符发给屏幕,收到的字符再翻回来

0:38

ASCI 发字符 · HEX 收回来

  • 屏幕只认字符数值得先翻成字符,才能发给屏或上位机
  • 从最低一位翻起一位一位翻成字符,一个字节一个字节往目标里排
  • 手册那条注十六进制的 A,翻成 ASCII 的字符 A
  • HEX 是反过来的把收到的字符还原成数,图上 D20 回到 1234
同一个数的几种存法(数据转换) · ASCI / HEX:把数翻成字符发给屏幕,收到的字符再翻回来 梯形图 ASCI 发字符 · HEX 收回来

ASCI 发字符 · HEX 收回来

这一对是跟显示屏、上位机说话的。屏幕只认字符,数值得先翻成字符。ASCI 就是干这个的:从最低那一位开始一位一位翻成字符。图上源是十六进制的 1234,写 K4,翻完 D10、D11 里就是字符四三二一。手册那条注很直白:十六进制的 A 翻成 ASCII 的字符 A。把源靠下那一位换成 A,D10 低字节就变成字符 A。反过来那半是 HEX,把收到的字符还原成数,D20 又回到 1234。

想亲手试一下?

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