优化Fanuc驱动

This commit is contained in:
iioter 2022-08-10 16:51:55 +08:00
parent 92ad2ae8f7
commit 086700c8c7

View File

@ -4,26 +4,33 @@ using PluginInterface;
namespace DriverFaunc namespace DriverFaunc
{ {
[DriverSupported("Fanuc-0i")] [DriverSupported("Fanuc-0i")]
[DriverInfoAttribute("Fanuc-0i", "V1.0.0", "Copyright IoTGateway© 2022-05-25")] [DriverInfo("Fanuc-0i", "V1.0.0", "Copyright IoTGateway© 2022-05-25")]
public class Fanuc : IDriver public class Fanuc : IDriver
{ {
[ConfigParameter("设备Id")]
public Guid DeviceId { get; set; } = Guid.NewGuid();
[ConfigParameter("超时时间ms")]
public int Timeout { get; set; } = 3000;
[ConfigParameter("最小通讯周期ms")]
public uint MinPeriod { get; set; } = 3000;
[ConfigParameter("设备Ip")]
public string DeviceIp { get; set; } = "127.0.0.1";
[ConfigParameter("设备Port")]
public int DevicePort { get; set; } = 8193;
private ushort _hndl; private ushort _hndl;
private int _result = -1; private int _result = -1;
public ILogger _logger { get; set; } public ILogger _logger { get; set; }
private readonly string _device; private readonly string _device;
#region
[ConfigParameter("设备Id")] public string DeviceId { get; set; }
[ConfigParameter("超时时间ms")] public int Timeout { get; set; } = 3000;
[ConfigParameter("最小通讯周期ms")] public uint MinPeriod { get; set; } = 3000;
[ConfigParameter("设备Ip")] public string DeviceIp { get; set; } = "127.0.0.1";
[ConfigParameter("设备Port")] public int DevicePort { get; set; } = 8193;
#endregion
public Fanuc(string device, ILogger logger)
{
_device = device;
_logger = logger;
_logger.LogInformation($"Device:[{device}],Create()");
}
public bool IsConnected public bool IsConnected
{ {
get get
@ -43,14 +50,6 @@ namespace DriverFaunc
} }
} }
public Fanuc(string device, ILogger logger)
{
_device = device;
_logger = logger;
_logger.LogInformation($"Device:[{device}],Create()");
}
public bool Close() public bool Close()
{ {
try try
@ -71,7 +70,8 @@ namespace DriverFaunc
try try
{ {
_result = -1; _result = -1;
_result = FanucFocas.cnc_allclibhndl3(DeviceIp, Convert.ToUInt16(DevicePort), Convert.ToInt32(Timeout), out _hndl); _result = FanucFocas.cnc_allclibhndl3(DeviceIp, Convert.ToUInt16(DevicePort), Convert.ToInt32(Timeout),
out _hndl);
if (_result == FanucFocas.EW_OK) if (_result == FanucFocas.EW_OK)
return true; return true;
@ -85,26 +85,11 @@ namespace DriverFaunc
public void Dispose() public void Dispose()
{ {
} }
#region
public DriverReturnValueModel Read(DriverAddressIoArgModel Ioarg)
{
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
return ret;
}
public Task<RpcResponse> WriteAsync(string RequestId, string Method, DriverAddressIoArgModel Ioarg)
{
RpcResponse rpcResponse = new() { IsSuccess = false, Description = "设备驱动内未实现写入功能" };
return Task.FromResult(rpcResponse);
}
#endregion
//设备类型 //设备类型
[Method("Fanuc", description: "读Fanuc设备类型")] [Method("Fanuc", description: "读Fanuc设备类型")]
public DriverReturnValueModel ReadDeviceType(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceType(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
@ -132,11 +117,12 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
[Method("Fanuc", description: "读Fanuc设备运行状态")] [Method("Fanuc", description: "读Fanuc设备运行状态")]
public DriverReturnValueModel ReadDeviceRunStatus(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceRunStatus(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
@ -201,8 +187,6 @@ namespace DriverFaunc
default: default:
break; break;
} }
} }
else if ((num == "16") || (num == "18" && type == "W")) else if ((num == "16") || (num == "18" && type == "W"))
{ {
@ -244,7 +228,8 @@ namespace DriverFaunc
strRet = "STaRT"; strRet = "STaRT";
break; break;
case 4: case 4:
strRet = "MSTR(during retraction and re-positioning of tool retraction and recovery, and operation of JOG MDI)"; strRet =
"MSTR(during retraction and re-positioning of tool retraction and recovery, and operation of JOG MDI)";
break; break;
default: default:
break; break;
@ -267,11 +252,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//详细运行状态 //详细运行状态
[Method("Fanuc", description: "读Fanuc设备详细运行状态")] [Method("Fanuc", description: "读Fanuc设备详细运行状态")]
public DriverReturnValueModel ReadDeviceDetailRunStatus(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceDetailRunStatus(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
@ -336,8 +323,6 @@ namespace DriverFaunc
default: default:
break; break;
} }
} }
else if ((num == "16") || (num == "18" && type == "W")) else if ((num == "16") || (num == "18" && type == "W"))
{ {
@ -359,6 +344,7 @@ namespace DriverFaunc
strRet = "B-STOP"; strRet = "B-STOP";
break; break;
default: default:
strRet = runRet.ToString();
break; break;
} }
} }
@ -379,9 +365,11 @@ namespace DriverFaunc
strRet = "STaRT"; strRet = "STaRT";
break; break;
case 4: case 4:
strRet = "MSTR(during retraction and re-positioning of tool retraction and recovery, and operation of JOG MDI)"; strRet =
"MSTR(during retraction and re-positioning of tool retraction and recovery, and operation of JOG MDI)";
break; break;
default: default:
strRet = runRet.ToString();
break; break;
} }
} }
@ -402,12 +390,14 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//操作模式 cnc_statinfo manual //操作模式 cnc_statinfo manual
//存在问题未找到manual //存在问题未找到manual
[Method("Fanuc", description: "读Fanuc设备操作模式")] [Method("Fanuc", description: "读Fanuc设备操作模式")]
public DriverReturnValueModel ReadDeviceModel(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceModel(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
@ -437,11 +427,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//主轴转速 cnc_acts //主轴转速 cnc_acts
[Method("Fanuc", description: "读Fanuc设备实际主轴转速")] [Method("Fanuc", description: "读Fanuc设备实际主轴转速")]
public DriverReturnValueModel ReadDeviceActSpindleSpeed(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceActSpindleSpeed(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
@ -468,11 +460,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//供给速度 cnc_actf //供给速度 cnc_actf
[Method("Fanuc", description: "读Fanuc设备实际进给速度")] [Method("Fanuc", description: "读Fanuc设备实际进给速度")]
public DriverReturnValueModel ReadDeviceActFeedRate(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceActFeedRate(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
@ -499,11 +493,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//主轴倍率 cnc_rdopnlsgnl //主轴倍率 cnc_rdopnlsgnl
[Method("Fanuc", description: "读Fanuc设备主轴倍率")] [Method("Fanuc", description: "读Fanuc设备主轴倍率")]
public DriverReturnValueModel ReadDeviceSpindleOvr(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceSpindleOvr(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -528,11 +524,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//进给倍率 cnc_rdopnlsgnl //进给倍率 cnc_rdopnlsgnl
[Method("Fanuc", description: "读Fanuc设备进给倍率")] [Method("Fanuc", description: "读Fanuc设备进给倍率")]
public DriverReturnValueModel ReadDeviceFeedOvr(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceFeedOvr(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -557,11 +555,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//设备异常代码:报警号 cnc_rdalmmsg2 //设备异常代码:报警号 cnc_rdalmmsg2
[Method("Fanuc", description: "读Fanuc设备报警号")] [Method("Fanuc", description: "读Fanuc设备报警号")]
public DriverReturnValueModel ReadDeviceAlarmNum(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceAlarmNum(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -587,11 +587,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//设备异常信息:报警文本 //设备异常信息:报警文本
[Method("Fanuc", description: "读Fanuc设备报警文本")] [Method("Fanuc", description: "读Fanuc设备报警文本")]
public DriverReturnValueModel ReadDeviceAlarmText(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceAlarmText(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -617,11 +619,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//异常类型 //异常类型
[Method("Fanuc", description: "读Fanuc设备报警类型")] [Method("Fanuc", description: "读Fanuc设备报警类型")]
public DriverReturnValueModel ReadDeviceAlarmType(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceAlarmType(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -702,6 +706,7 @@ namespace DriverFaunc
break; break;
default: default:
alarmStrType = a.msg1.type.ToString();
break; break;
} }
@ -719,11 +724,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//执行程序名 cnc_rdprgnum //执行程序名 cnc_rdprgnum
[Method("Fanuc", description: "读Fanuc设备执行程序号")] [Method("Fanuc", description: "读Fanuc设备执行程序号")]
public DriverReturnValueModel ReadDeviceExeProgamNumber(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceExeProgamNumber(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -748,11 +755,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//工件计数 //工件计数
[Method("Fanuc", description: "读Fanuc设备计数器值")] [Method("Fanuc", description: "读Fanuc设备计数器值")]
public DriverReturnValueModel ReadDeviceCountVaule(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceCountVaule(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -777,11 +786,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//刀具号 //刀具号
[Method("Fanuc", description: "读Fanuc设备刀具号")] [Method("Fanuc", description: "读Fanuc设备刀具号")]
public DriverReturnValueModel ReadDeviceToolNumber(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceToolNumber(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -806,11 +817,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//上电总时间 cnc_rdtimer //上电总时间 cnc_rdtimer
[Method("Fanuc", description: "读Fanuc设备上电时间")] [Method("Fanuc", description: "读Fanuc设备上电时间")]
public DriverReturnValueModel ReadDevicePowerTime(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDevicePowerTime(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -835,11 +848,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//运行总时间 //运行总时间
[Method("Fanuc", description: "读Fanuc设备运行时间")] [Method("Fanuc", description: "读Fanuc设备运行时间")]
public DriverReturnValueModel ReadDeviceOperateTime(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceOperateTime(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -864,11 +879,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//切削总时间 //切削总时间
[Method("Fanuc", description: "读Fanuc设备切削时间")] [Method("Fanuc", description: "读Fanuc设备切削时间")]
public DriverReturnValueModel ReadDeviceCutTime(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceCutTime(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -893,11 +910,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//循环时间 //循环时间
[Method("Fanuc", description: "读Fanuc设备循环时间")] [Method("Fanuc", description: "读Fanuc设备循环时间")]
public DriverReturnValueModel ReadDeviceCycleTime(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceCycleTime(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -922,11 +941,13 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
//主轴负载 cnc_rdspmeter //主轴负载 cnc_rdspmeter
[Method("Fanuc", description: "读Fanuc设备主轴负载")] [Method("Fanuc", description: "读Fanuc设备主轴负载")]
public DriverReturnValueModel ReadDeviceSpindle(DriverAddressIoArgModel Ioarg) public DriverReturnValueModel ReadDeviceSpindle(DriverAddressIoArgModel ioarg)
{ {
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good }; var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
if (IsConnected) if (IsConnected)
@ -952,8 +973,24 @@ namespace DriverFaunc
ret.StatusType = VaribaleStatusTypeEnum.Bad; ret.StatusType = VaribaleStatusTypeEnum.Bad;
ret.Message = "连接失败"; ret.Message = "连接失败";
} }
return ret; return ret;
} }
#region
public DriverReturnValueModel Read(DriverAddressIoArgModel ioarg)
{
var ret = new DriverReturnValueModel { StatusType = VaribaleStatusTypeEnum.Good };
return ret;
}
public Task<RpcResponse> WriteAsync(string requestId, string method, DriverAddressIoArgModel ioarg)
{
RpcResponse rpcResponse = new() { IsSuccess = false, Description = "设备驱动内未实现写入功能" };
return Task.FromResult(rpcResponse);
}
#endregion
} }
} }