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