本文主要是介绍Fanuc(发那科)机床读取主轴倍率和进给倍率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、倍率是什么
二、如何控制倍率
三、倍率的数据存在哪
四、代码实现
说明
一、倍率是什么
以主轴倍率为例
主轴倍率可以通过以下公式计算:
主轴倍率 =主轴实际转速/主轴指令转速
注:主轴指令转速是指我们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+2Focas1.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 */
说明
本人专注机床的数据采集和程序传输,致力于机械加工行业的数字化系统开发
以下是自己开发的所支持的机床数据采集源代码类库(部分),
这篇关于Fanuc(发那科)机床读取主轴倍率和进给倍率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!