在PLC和上位机编程中,进制转换是绕不开的基础技能。不管是给PLC的D寄存器赋值,还是上位机界面显示数据,亦或是调试串口报文,都需要在二进制、十进制、十六进制之间灵活切换。很多新手卡壳,不是因为难,而是没摸清规律。今天就分章节讲透,看完就能用。
第一章:先搞懂二进制与十进制的转换——最常用的基础操作 二进制是设备“能懂的语言”,十进制是我们“习惯用的语言”,这两者的转换是日常编程的高频需求,核心就两个方法。
1. 二进制转十进制:按位“加权求和” 二进制的每一位都有对应的“权重”,从右往左数,第1位(最右边)是2的0次方,第2位是2的1次方,以此类推。转换时,用每一位的数字(0或1)乘以对应权重,再把所有结果加起来,就是十进制数。
举个实际例子:把二进制“101101B”转成十进制。
先标权重:从右往左,101101对应的权重依次是2⁰(1)、2¹(2)、2²(4)、2³(8)、2⁴(16)、2⁵(32)。
再计算:1×32(第6位是1) + 0×16(第5位是0) + 1×8(第4位是1) + 1×4(第3位是1) + 0×2(第2位是0) + 1×1(第1位是1) = 32+0+8+4+0+1=45。
所以101101B = 45(十进制),PLC里写K45,本质就是存这个二进制数。
2. 十进制转二进制:“除2取余,逆序排列” 反过来,想把十进制数转成二进制,就用这个数反复除以2,每次记下余数(0或1),直到商变成0,最后把余数从后往前排,就是二进制结果。
比如把十进制“45”转成二进制:
计算过程:45÷2=22余1,22÷2=11余0,11÷2=5余1,5÷2=2余1,2÷2=1余0,1÷2=0余1。
记下所有余数:1、0、1、1、0、1(从第一次到最后一次的余数)。
逆序排列:把余数从后往前排,就是101101,所以45(十进制)=101101B。
第二章:二进制与十六进制转换——调试和存储的“捷径” 十六进制的作用是“简化二进制书写”,1位十六进制正好对应4位二进制(半字节),转换起来比十进制更方便,尤其适合调试串口报文、写PLC寄存器地址。
1. 二进制转十六进制:4位分组,对照查表 先把二进制数从右往左每4位分成一组,不足4位的在左边补0(补前导0),然后每组对应成1位十六进制数——0-9直接对应,1010-1111对应A-F(10-15)。
比如把二进制“11010110B”转成十六进制:
第一步分组:从右往左拆,11010110正好能分成两组4位:1101和0110(不用补0)。
第二步查表:1101对应的十进制是13,对应十六进制D;0110对应的十进制是6,对应十六进制6。
组合结果:D和6拼起来就是D6,所以11010110B = D6H(PLC里写HD6就是这个数)。
2. 十六进制转二进制:1位拆4位,补够位数 把每一位十六进制数拆成4位二进制数,不足4位的在左边补0,再把所有组拼起来就行。
比如把十六进制“D6H”转成二进制:
第一步拆分:D对应13,转成4位二进制是1101;6对应6,转成4位二进制是0110(这里要补够4位,不能写成110)。
第二步拼接:1101和0110拼起来就是11010110,所以D6H = 11010110B。
第三章:十进制与十六进制转换——PLC和上位机的“交互桥梁” 平时操作员在上位机输的是十进制(比如设转速100),但写进PLC要转成十六进制(H64);PLC里存的H1234,上位机读出来要显示成十进制4660。这两者转换,要么用二进制当“中间桥”,要么直接计算。
1. 十进制转十六进制:除16取余,逆序查表 和十进制转二进制逻辑类似,只是把“除2”改成“除16”,余数对应十六进制(0-15,10-15对应A-F),最后余数逆序排列。
比如把十进制“214”转成十六进制:
计算过程:214÷16=13余6,13÷16=0余13(13对应十六进制D)。
记下余数:6、D(第一次余6,最后一次余13)。
逆序排列:D在前,6在后,就是D6,所以214(十进制)= D6H。
2. 十六进制转十进制:按位加权求和 和二进制转十进制思路一致,只是权重从“2的幂次”改成“16的幂次”,每一位十六进制数(0-9、A-F)乘以对应权重,再加总。
比如把十六进制“D6H”转成十进制:
先标权重:从右往左,D在第2位,权重是16¹(16);6在第1位,权重是16⁰(1)。
再计算:D对应13,13×16=208;6×1=6;总和208+6=214。
所以D6H = 214(十进制),上位机显示的就是214。
第四章:工业编程里的转换要点——避免踩坑的实用技巧 搞懂转换方法后,还要结合实际场景注意这几点,不然容易出问题:
1. PLC里的进制标识要记清:三菱PLC中,十进制加“K”前缀(比如K45),十六进制加“H”前缀(比如HD6),不管写哪个,PLC最终都会转成二进制存储,只是方便我们读写。
2. 上位机转换要注意字节顺序:PLC发数据通常是“小端序”(低位字节在前),比如D6H存成字节数组是[0x6, 0xD],上位机转十进制时要按这个顺序解析,不然会算错。
3. 寄存器位长别超范围:16位寄存器(比如FX3U的D寄存器)对应4位十六进制(0000H-FFFFH),十进制范围0-65535,转换时别输入超范围的数,不然会溢出报错。
其实进制转换不用死记硬背,记住核心方法,平时多练两次,遇到问题对着例子算一遍,很快就能熟练。工业编程讲究实用,能用最简单的方法解决问题,就是最好的技能。