/// <summary>
/// 机械手抽象类
/// </summary>
/// <typeparam name="TPrm">参数类型</typeparam>
public abstract class RobotBase<TPrm> : ICanGetAxisArray, IMsgRobot where TPrm : RobotPrmBase
{
/// <summary>
/// 为了区分多个同类机械手
/// </summary>
public int Key { get; set; }
public RobotBase()
{
Key = 0;
}
public RobotBase(int key)
{
Key = key;
}
//获得参数保存的路径
private string getPath()
{
return Constant.SAVE_DIRECTORY + typeof(TPrm).Name +
Key.ToString() + ".mgr";
}
/// <summary>
/// Calib参数
/// </summary>
public TPrm Prm { get; set; }
/// <summary>
/// 获得所有轴
/// </summary>
/// <returns></returns>
public abstract Axis[] GetAllAxis();
public abstract Result Reset();
/// <summary>
/// 回原点并阻塞
/// </summary>
/// <returns></returns>
public abstract Result GoHomeAndReply();
/// <summary>
/// 暂停运动(暂停插补运动)
/// </summary>
public abstract void StopGoHome();
public abstract void Pause();
/// <summary>
/// 停止所有轴的运动
/// </summary>
/// <returns></returns>
public Result StopAllAxis(bool isAbout = false)
{
Result rst = null;
Result lastRst = null;
foreach (var axis in GetAllAxis())
{
rst = axis.Stop(isAbout);
if (!rst.IsOk)
{
lastRst = rst;
}
}
if (lastRst == null)
{
return rst;
}
else
{
return lastRst;
}
}
/// <summary>
/// 设置所有轴的上电状态,true为上电,false为断电
/// </summary>
/// <param name="onOrOff"></param>
/// <returns></returns>
public void SetAllAxisServo(bool onOrOff)
{
foreach (var axis in GetAllAxis())
{
axis.Servo = onOrOff;
Thread.Sleep(200);
}
}
/// <summary>
/// 加载参数
/// </summary>
/// <returns></returns>
public bool LoadPrm()
{
try
{
string json = System.IO.File.ReadAllText(getPath());
this.Prm = JsonConvert.DeserializeObject<TPrm>(json);
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 保存参数
/// </summary>
/// <returns></returns>
public bool SavePrm()
{
try
{
if (!Directory.Exists(Constant.SAVE_DIRECTORY))
{
Directory.CreateDirectory(Constant.SAVE_DIRECTORY);
}
Prm.SavedTime = DateTime.Now;
string json = JsonConvert.SerializeObject(Prm, Formatting.Indented);
System.IO.File.WriteAllText(getPath(), json);
return true;
}
catch (Exception)
{
return false;
}
}
}