目录
一、倍率是什么
以主轴倍率为例
主轴倍率可以通过以下公式计算:
主轴倍率 =主轴实际转速/主轴指令转速
注:主轴指令转速是指我们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 */
说明
本人专注机床的数据采集和程序传输,致力于机械加工行业的数字化系统开发
以下是自己开发的所支持的机床数据采集源代码类库(部分),