/// <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;
}
}
}