搜索文章与案例

Technical Article

三菱M80写BIN[100],为什么结果不是100而是64?

按三菱M80加工中心手册解释BIN与BCD的转换方向,用100→64和100→256逐位拆解编码,给出来源核对与纯变量对照方法,避免把编码值当数量或坐标。

宏里给变量赋值100,再写BIN,结果却是64;改成BCD,又得到256。这里先别找小数点参数,也不要给结果乘一个“修正系数”。这两个函数处理的是编码转换,不是把变量窗口切成二进制显示。

本文针对具备用户宏功能的三菱M80加工中心系统,仅用非负小整数演示,不涉及PLC读写、刀补或轴运动。机床厂接口定义需另行核对。

先把两个方向记对

手册定义:BIN[...]将BCD编码转换成普通二进制数值;BCD[...]将普通二进制数值转换成BCD编码。这里的“普通数值”可以在变量窗口以十进制显示。不要把函数名理解为“输出一串0和1”或“保持十进制数字不变”。

#1=100
#11=BIN[#1]
#12=BCD[#1]

手册在页512给出的结果分别为#11=64、#12=256。三行分别使用同一个#1,不是先BIN再BCD的串联。两条路径的输入同为100,但对这100的含义不同。

BIN[100]为什么得到64

普通数值100的二进制位模式是0110 0100,补齐为16位就是0000 0000 0110 0100;以十六进制记作0x0064。BCD每四位存一个十进制数字,因此这组位模式被解释成数字6和4,解码为6×10+4=64。函数没有丢失36,而是在按另一种编码解释输入。

普通数值100的位模式为0x0064,BIN按BCD数字6和4解码得到64
图1 相同位模式,按普通位权或按BCD数字分组读取,含义不同。十六进制标记仅用于解释。

BCD[100]为什么又得到256

这次输入100就是待编码的普通数量。将十进制百位1、十位0、个位0分别放进四位组,得到0001 0000 0000,也就是0x0100。把这个编码后的位模式按普通二进制位权读回,结果为1×256=256。变量窗口里的256是BCD编码的载体;如果把它直接当工件数量或毫米值,语义就已经错了。

十进制数字100编码为0001 0000 0000即0x0100,按普通位权显示为256
图2 BCD编码保持的是十进制各位数字,不是窗口中的十进制数值。

排查时查接口约定,不靠窗口猜

若某个接口本来交付的是普通整数100,再执行BIN,就会按BCD误解成64。反过来,若交付的是表示100的BCD位模式0x0100,宏变量以普通数值显示时可能看到256,需要按约定解码一次才能得到100。这是两种数据约定的对比,不代表任一具体机床的PLC地址或接口格式。

  1. 先找出值从哪里来:宏内计算、操作员输入,还是机床厂定义的接口。记录原始值及取值时刻。

  2. 核对接口文件中的编码、有效位数、字节顺序、符号及有效标志。不能只看到屏幕有100就判定它是普通整数,更不能把每个接口都假定为BCD。

  3. 只有来源明确为BCD时才解码;只在接收方明确需要BCD时才编码。已经转换过的变量不要再转换一次。

  4. 检查每个BCD四位组是否为0至9。A至F不是有效BCD数字;非法BCD、负数及溢出不属于本例范围,须查对应软件手册。

先做纯变量对照,再接入实际流程

需要确认本机语义时,可在独立的宏测试调用层中使用上述三行,先确认#1、#11、#12在该层没有承载现有流程数据。它们是局部变量,不能随意插到正在加工的宏中覆盖原值。预期结果是100、64、256;这只是手册对照值。

数学上,普通数值100经BCD编码成为256,再按BIN解码应回到100;这可用来理解方向,但不能替代接口校验:错误编码链也可能在往返后回到原值。真正需要核实的是接收方期待“数量100”还是“代表100的BCD位模式”。

若异常从Mastercam后处理输出的宏段开始,可按后处理修改前后的NC对比方法追踪赋值与转换发生的位置,再检查后处理与机床接口的适配条件。有效的排查资料是完整控制器型号、对应软件与手册版本、接口定义页,以及不含客户信息的赋值和转换片段,而不是单独一张变量窗口截图。

资料依据

三菱电机加工中心编程手册U版第14.6.1节:页509定义转换方向,页512提供BIN[100]=64及BCD[100]=256的示例。U是手册修订号,不是控制器软件版本;该节未为这两个函数单列最低软件版,使用前需核对本机对应手册。图中的位模式拆解按二进制位权与BCD规则计算。