using MECF.Framework.Common.Device.Galil;
using MECF.Framework.Common.TwinCat;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace PunkHPX8_RT.Devices.AXIS
{
public class GalilCommonAxis
{
#region 常量
private const string IS_SWITCH_ON = "IsSwitchOn";
private const string STOP_CODE = "StopCode";
private const string MOTOR_POSITION = "MotorPosition";
private const string POSITION_ERROR = "PositionError";
private const string ACTUAL_TORQUE = "ActualTorque";
private const string ACTUAL_VELOCITY = "Velocity";
private const string FORWARD_LIMIT = "ForwardLimit";
private const string TARGET_POSITION = "ReferencePosition";
#endregion
#region 内部变量
private string _module;
private string _name;
private JetAxisBase _axis;
#endregion
///
/// 构造函数
///
///
///
public GalilCommonAxis(string module,string name,JetAxisBase jetAxisBase)
{
_module = module;
_name = name;
_axis = jetAxisBase;
}
///
/// 订阅变量
///
public void SubscriptionVariable()
{
_axis.AxisSubscribeUpdateVariable(IS_SWITCH_ON);
_axis.AxisSubscribeUpdateVariable(STOP_CODE);
_axis.AxisSubscribeUpdateVariable(MOTOR_POSITION);
_axis.AxisSubscribeUpdateVariable(POSITION_ERROR);
_axis.AxisSubscribeUpdateVariable(ACTUAL_TORQUE);
_axis.AxisSubscribeUpdateVariable(ACTUAL_VELOCITY);
_axis.AxisSubscribeUpdateVariable(FORWARD_LIMIT);
_axis.AxisSubscribeUpdateVariable(TARGET_POSITION);
}
///
/// 上电
///
///
public bool WriteSwitchOn()
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "SH", null);
}
///
/// 下电
///
///
public bool WriteSwitchOff()
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "MO", null);
}
///
/// 写入相对位置
///
///
///
public bool WriteReferencePosition(int referencePosition)
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "PR", referencePosition);
}
///
/// 写入绝对位置
///
///
///
public bool WriteAbsolutePosition(int absolutePosition)
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "PA", absolutePosition);
}
///
/// 写入速度
///
///
///
public bool WriteSpeed(int speed)
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "SP", speed);
}
///
/// 写入加速度
///
///
///
public bool WriteAcceleration(int acceleration)
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "AC", acceleration);
}
///
/// 写入减速度
///
///
///
public bool WriteDeceleration(int deceleration)
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "DC", deceleration);
}
///
/// 停止
///
///
public bool WriteStop()
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "ST", null);
}
///
/// 开始运动
///
///
public bool WriteStartMotion()
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "BG", null);
}
///
/// Home 电机
///
///
public bool WriteHomeAxisCommand()
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "HM", null);
}
///
/// Home 电机
///
///
public bool WriteFIAxisCommand()
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "FI", null);
}
///
/// Home 电机
///
///
public bool WriteCNCommand(string cn)
{
return GalilControllerCfgManager.Instance.SetSystemCommand(_module, _name, "CN", cn);
}
///
/// 手动置零
///
///
public bool WriteDP(int dp)
{
bool result = GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "DP", dp);
if (result)
{
return GalilControllerCfgManager.Instance.SetAxisCommand(_module, _name, "DE", dp);
}
return false;
}
}
}