using System;
using System.Threading;
using SHJX.Service.Model.Control;
using SHJX.Service.Common.Extend;
using SHJX.Service.Common.ReadXML;
using SHJX.Service.ServerClient.Interface;
using SHJX.Service.ServerClient.TempController;
using SHJX.Service.Common.Logging;
using Microsoft.Extensions.Logging;
namespace SHJX.Service.ServerClient.RS485Control
{
///
/// 机械手操作
///
public class ManiPort : SerialPortImp, PortControlImp
{
private static readonly ILogger logger = LogFactory.BuildLogger(typeof(ManiPort));
///
/// 机械手
///
/// 日志
/// 配置
public ManiPort(ReadConfigUtil config)
: base(config) { }
public bool Write(PortArgs args)
{
var res = args.WriteWay switch
{
WriteWay.Normotopia => zMotorStorage(args, "H"),
WriteWay.Antiposition => zMotorStorage(args, "L"),
_ => throw new ArgumentNullException(args.WriteWay.GetEnumDesc())
};
Thread.Sleep(500);
return res;
}
public object Read(PortArgs args)
{
object obj = args.ReadWay switch
{
"Judge" => GetJudge(args),
"OriginalPosition" => JudgeStorage(args.NodeId),
_ => throw new ArgumentNullException(args.ReadWay),
};
return obj;
}
public bool GetJudge(PortArgs args)
{
var storageRes = JudgeStorage(args.NodeId);
if (storageRes is null) return false;
var res = storageRes[4].Equals('0');
return res;
}
private bool zMotorStorage(PortArgs args,string op)
{
string res1 = "";
while (res1 != "0009\r" && res1 != "0209\r")
{
var storageRes = JudgeXYZMove(3); //抓手动之前Z轴要静止
if (storageRes.Equals("")) return false;
res1 = storageRes;
Thread.Sleep(300);
}
return MotorStorage(args.NodeId, 1, op);
}
}
}