FANUC 一起编写M代码译码出现故障的案例


问题描述

最近有个小伙伴在PMC中编写完M代码译码指令后,实际测试程序时发现当执行M代码M281时,系统中M代码译码信号F1010(双系统)显示为25,但是M281译码信号可以正常输出,而M25指令的译码信号也会输出,不清楚是什么问题,如下图。

处理过程

首先关于系统的M代码译码信号F1010为何不显示为实际执行的M代码281而是显示为25,这是因为PMC中编写的DECB译码指令,指定的字节型式为单字节,数据有效范围为:-128~127;


我们系统中执行的M281代码,将281转换为2进制是:0000 0001 0001 1001,而在译码指令中由于设定的字节为单字节,所以系统只识别单字节数据范围,所以对于超出单字节的部分就会自动忽略,从而系统只会识别数据:0001 1001;而这个二进制转换为十进制就是:25;所以这就是为什么执行M281,而F1010会显示25的原因。

至于为什么F1010显示为25,执行M281的M代码却可以正常进行译码?这个可能是系统出于某种原因考虑而强制进行的译码。

那如果将DECB译码指令设置成单字节数据,M代码也可以正常译出,那是不是这个字节数据就没有必要设置成双字节等数据格式了?其实并不是,如果我们只用单字节数据会出现以下这种问题,就是当我们执行M281时,M281代码会输出,但是M25代码的信号也会同时输出,会出现M代码异常输出的现象,这就是本文中所出现的异常现象。

那么如何解决这一问题呢?

其实只要我们按照DECB译码指令的使用规范,确认设备使用的最大M代码位数是多少,根据这个数据的大小,选择最适合DECB译码指令的字节数据大小,然后应用到所有的DECB指令中。一般来说2字节的数据大小就可以满足大多数设备的M代码指令范围了。

如下图,我们将PMC中所有的DECB译码指令的字节数据修改为2字节,再执行M代码时,M代码就可以正常输出了。

发表回复

登录... 后才能评论