>上一篇教程,我们为大家介绍了二进制数据 【极课工控】小型PLC系列教程之2.2数值存储与二进制.. 。
位数少的CPU,并非不能处理大的数值,只不过需要多次运算,有时还需要编程人员熟悉算法。就像大车一次可以搬运的货物,用小车就需要往返多次才能搬完,车越小,需要的次数越多,耗时也越多。 H1U/H2U系列PLC元件中,常用的数据宽度是1Word(即16bit);部分计数器为2Word(32bit)。对于16bit的无符号数据,用2进制表示的最大值为1111,1111,1111,1111,换算为十进制就是65,535。 本篇博文将为大家详细介绍一下其他的数据进制,其中我们在PLC编程中用的比较多的是十进制和十六进制数据,BCD码一般用在数码管显示的用途中。 十进制十进制数据就是我们人类使用的12345678910 11 12这样的数据,逢十进一。咱们上小学就开始学的数学,都是基于10进制的。十进制数据在编程中用的比较多。 小型PLC中十进制数据用K开头标识,如: MOV K20 D200 将20这个十进制数据赋值给D200数据寄存器 十六进制十六进制,逢十六进一。 十六进制(Hexadecimal)是计算机中数据的一种表示方法。同日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;十六进制用hex表示。 在小型PLC中十六进制前缀是 H,如下梯形图程序: MOV HA D100 将十六进制数据 A(也就是十进制的10)赋值给D100寄存器
对于十进制500而言,用十进制表示出来是500,用十六进制表示是HEX: 01F4,用二进制表示:1 1111 0100。 每个十六进制位相当于4个二进制位: 十进制 | 十六进制 | 二进制 |
---|
0 | 0 | 0000 | 1 | 1 | 0001 | 2 | 2 | 0010 | 3 | 3 | 0011 | 4 | 4 | 0100 | 5 | 5 | 0101 | 6 | 6 | 0110 | 7 | 7 | 0111 | 8 | 8 | 1000 | 9 | 9 | 1001 | 10 | A | 1010 | 11 | B | 1011 | 12 | C | 1100 | 13 | D | 1101 | 14 | E | 1110 | 15 | F | 1111 | 16 | 10 | 0001 0000 | 17 | 11 | 0001 0001 | 18 | 12 | 0001 0010 | 19 | 13 | 0001 0011 | 20 | 14 | 0001 0100 |
每一个十六进制位对应的4个二进制位,FF对应的二进制位就是1111 1111. 八进制:八进制数据用的稍微少一点,逢八进一。具体不详细说,和上面差不多,用的并不多 BCD码(数码管显示-摘自手册P20)最符合人们阅读习惯的数字格式是十进制,在人们监控或设置工作参数时,往往需要采用十进制格式进行数据显示,而计算机内部使用的是HEX格式,故需采用一种底层为每4个二进制位组成一个数字位,而每个数字位只能为十进制数的0~9,由此组成的数值,这种格式数字在存储器中的编码称为BCD码(Binary-Coded Decimal)。 在PLC内部,原理上用4位二进制数代表1位十进制数,在每一位BCD码中,不存在HEX格式中的A~F。对于一个8bit宽度的寄存器单元,能存储的最大BCD数只能是99,因此将HEX格式转换为BCD码后,会占用更大的存储空间。 PLC内部总是按HEX格式进行数据计算的,在驱动非智能的显示设备(如数码管)显示数据之前,往往需要将PLC内部的十六进制( HEX)格式数据先转换为BCD码,然后进行显示输出;将用户以十进制方式设置的参数存入PLC内存之前,则往往需要将该BCD码转换为十六进制( HEX)格式。 H1U/H2U系列PLC内部提供了HEX与BCD两种格式相互转换的命令,在需要进行显示输出,或设置开关读取的时候,执行该格 式转换指令。 人们在电脑显示器上看到的十进制读数,都是经过了计算机自动作BCD转换后才显示的;监控时修改的参数,则是电脑软件作了HEX转换后写入的,无需人为干预而已。 进制转换一般都不要自己手动算,但是还是应该知道手动怎么算的。我们实际应用中都是使用转换工具的,微软自带的计算器,就带这个功能。下面给大家介绍一下微软自带的计算器如何进行数据类型转换: Windows键+R,然后输入“calc”回车,就能打开系统自带的计算器。
点击左上角的查看,然后选择程序员模式,就能进行各个数进制之间的转换了。
可以自行选择各种数据进制进行尝试:
要将(无符号)二进制数10110101换算为十进制数,则计算要复杂很多,一般这么算: bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 |
1乘2^7 + 0乘2^6 + 1乘2^5 + 1乘2^4 + 0乘2^3+1乘2^2+0乘2^1 + 1乘2^0 = 181(无符号类型的算法) 如果有符号类型,最高位表示的是符号位,算法和这个不一样,还要考虑补码,反码特别麻烦。。。 数据转换手算方法在手册P21上有详细讲解 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |