Fanuc(发那科)机床读取主轴倍率和进给倍率

4 篇文章 0 订阅
3 篇文章 0 订阅
文章详细解释了主轴倍率的概念,它是通过主轴实际转速与指令转速的比例计算得出。控制倍率通常通过机床外部旋钮,而倍率数据存储在PLC(PMC)中。提供了代码示例来读取PMC地址G030(主轴倍率)和G012(进给速度倍率),并强调了数据处理的注意事项,如数值取反。此外,作者专注于机床数据采集和程序传输,致力于机械加工行业的数字化系统开发。
摘要由CSDN通过智能技术生成

目录

一、倍率是什么

二、如何控制倍率

三、倍率的数据存在哪

四、代码实现

说明 


一、倍率是什么

以主轴倍率为例

主轴倍率可以通过以下公式计算:

主轴倍率 =主轴实际转速/主轴指令转速

:主轴指令转速是指我们NC程序文件中S Code,即指令转速

二、如何控制倍率

    一般通过机床外置的旋钮,来控制倍率。

三、倍率的数据存在哪

           Focas本身并不提供直接读取倍率的方法,故需要从其他地方来找倍率数据存放的地方。由于倍率是外置旋钮控制的,外围元器件的数据存放在PLC(Fanuc叫PMC)的地方,所以从PMC地址点位表中获取。

注:

1、主轴倍率的地址是G030,进给速度的倍率是G012。

2、加了*号的表示此数据需要取反,由于G地址是16位,故需要用65535减去获取的值。

四、代码实现

读取PMC

 public int? ReadPMC(string address)
        {
            if (!IsConnected) return null;
            string addressKindStr = address.Substring(0, 1);
            short addressKindInt = 0;
            int addressNo = int.Parse(address.Substring(1, 4).TrimStart('0') == "" ? "0" : address.Substring(1, 4).TrimStart('0'));
            if(!Enum.TryParse<PMCAddressType>(addressKindStr,out PMCAddressType pMCAddressType))
            {//PMC地址类型转换不成功,这抛出异常
                throw new NCException(EQName,ClassName, "ReadPMC", $"ReadPMC fail,AddressType Convert fail,address:{address}");
            }
            addressKindInt = (short)pMCAddressType;
            short b = 1;
            ushort start = Convert.ToUInt16(addressNo);
            ushort end = Convert.ToUInt16(addressNo + 1);
            ushort f = 10;//8+2
            Focas1.IODBPMC1 iodbpmc0 = new Focas1.IODBPMC1();
            short ret = Focas1.pmc_rdpmcrng(_flibhndl, addressKindInt, b, start, end, f, iodbpmc0);//这边可能有点问题
            if (ret== Focas1.EW_OK)
            {
                if(iodbpmc0.idata != null&& iodbpmc0.idata.Count()>0)
                {
                    return iodbpmc0.idata[0];
                }
                else
                {
                    throw new NCException(EQName, ClassName, "ReadPMC", $"ReadPMC fail,Get PMCData is null,address:{address}");
                }
                
            }
            else
            {
                //如果有ret==-16 需要断开连接重新  从而获取Handle 
                if (ret == -16)
                {
                    DisConnect();//直接断开连接,从而获得重连的机会
                }
                throw new FanucException(EQName, ClassName, "ReadPMC", ret, $"pmc_rdpmcrng  fail,address:{address}");
            }
        }

 主轴倍率:ReadPMC("G0030");

 进给倍率:65535 - ReadPMC("G0012");

注:

Focas的CS文件中的类IODBPMC1中的idata数据类型需要改成ushort[]

    [StructLayout(LayoutKind.Explicit)]
        public class IODBPMC1
        {
            [FieldOffset(0)]
            public short type_a;    /* PMC address type */
            [FieldOffset(2)]
            public short type_d;    /* PMC data type */
            [FieldOffset(4)]
            public short datano_s;  /* start PMC address */
            [FieldOffset(6)]
            public short datano_e;  /* end PMC address */
            [FieldOffset(8),
           MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
            public ushort[] idata;//数据类型从short[]改成ushort[]
        } /* In case that the number of data is 5 */

说明 

本人专注机床的数据采集和程序传输,致力于机械加工行业的数字化系统开发

以下是自己开发的所支持的机床数据采集源代码类库(部分),

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值