| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- using System;
- using System.Threading;
- using SHJX.Service.Common.Extend;
- using SHJX.Service.Common.ReadXML;
- using SHJX.Service.Model.Control;
- using SHJX.Service.ServerClient.Interface;
- using SHJX.Service.ServerClient.TempController;
- using SHJX.Service.Common.Logging;
- using Microsoft.Extensions.Logging;
- namespace SHJX.Service.ServerClient.RS485Control
- {
- /// <summary>
- /// 消解位通信
- /// </summary>
- public class DissolvePort : SerialPortImp, PortControlImp
- {
- private static readonly ILogger logger = LogFactory.BuildLogger(typeof(DissolvePort));
- private readonly ReadConfigUtil _config;
- /// <summary>
- /// 消解位
- /// </summary>
- /// <param name="log">日志</param>
- /// <param name="config">配置</param>
- public DissolvePort( ReadConfigUtil config)
- : base(config)
- {
- _config = config;
- config.GetSpeed.ForEach(item => {
- if (item.NodeName == "MotorD")
- speedD = item.Speed;
- });
- }
- private double speedD = 0;
- public object Read(PortArgs args)
- {
- object obj = args.ReadWay switch
- {
- "OriginalPosition" => GetOriginalPosition(args),
- _ => JudgeStorage(args.NodeId),
- };
- return obj;
- }
- public object GetOriginalPosition(PortArgs args)
- {
- var res = JudgeStorage(args.NodeId);
- if (res is null or { Length: 0 }) return false;
- return res[3].Equals('0');
- }
- public bool Write(PortArgs args)
- {
- var res = args.WriteWay switch
- {
- WriteWay.Normotopia => MotorGoBack(args.NodeId, 3),
- WriteWay.Antiposition => MotorGoBackDissolvePortM(args),
- WriteWay.Move => Move(args.NodeId, args.Distance,speedD),
- WriteWay.Stop => MotorStop(args.NodeId),
- WriteWay.Speed => MotorSpeed(args.NodeId, args.Distance),
- WriteWay.AcSpeed => MotorAcSpeed(args.NodeId, args.Distance),
- WriteWay.DeSpeed => MotorDeSpeed(args.NodeId, args.Distance),
- _ => throw new ArgumentNullException(args.WriteWay.GetEnumDesc<WriteWay>())
- };
- return res;
- }
- /// <summary>
- /// 移动
- /// </summary>
- /// <param name="nodeId"></param>
- /// <param name="distance"></param>
- /// <returns></returns>
- public bool Move(byte nodeId, long distance,Double Speed)
- {
- MotorMove(nodeId, distance);
- Thread.Sleep((int)(Math.Abs(distance) / 20000 * 300* Speed + 500));
- return true;
- }
- private bool MotorGoBackDissolvePortM(PortArgs args)
- {
- if (args.ManualOrAuto=="Auto") {
- MotorMove(args.NodeId, -2000 * _config.DissolveMoveDistance);
- Thread.Sleep(800);
- MotorMove(args.NodeId, 2000 * _config.DissolveMoveDistance);
- Thread.Sleep(800);
- MotorMove(args.NodeId, -2000 * _config.DissolveMoveDistance);
- Thread.Sleep(800);
- MotorMove(args.NodeId, 2000 * _config.DissolveMoveDistance);
- Thread.Sleep(800);
- MotorMove(args.NodeId, -2000 * _config.DissolveMoveDistance);
- Thread.Sleep(800);
- MotorMove(args.NodeId, 2000 * _config.DissolveMoveDistance);
- Thread.Sleep(Convert.ToInt32(_config.CoolingPipeWatingTime) * 15000);
- }
- MotorGoBackDissolvePort(args.NodeId, 4);
- //Thread.Sleep((int)(Math.Abs(distance) / 20000 * 300 * Speed + 500));
- return true;
- }
- }
- }
|