using System; using System.Collections.Generic; using System.Linq; using System.Net.NetworkInformation; using System.Text; using System.Threading.Tasks; namespace WCS.Core { public class PLC : EntityEx { public bool Ping { get; private set; } public PLC(PLCInfo ent, World world) : base(ent) { if (Configs.PLCAccessorCreater != null) { Accessor = Configs.PLCAccessorCreater.Create(ent); } else throw new Exception("Configs.PLCAccessorCreater未赋值"); Task.Run(() => { while (true) { Ping = ping(); Task.Delay(1000).Wait(); } // ReSharper disable once FunctionNeverReturns }); } public IPLCAccessor Accessor { get; private set; } private bool ping(int timeout = 300) { var p = new Ping(); if (Entity.IP == "1") return false; var res = p.Send(Entity.IP, timeout); return res.Status == IPStatus.Success; } } public interface IPLCAccessorCreater { IPLCAccessor Create(PLCInfo data); } public interface IPLCAccessor { void WriteBytes(ushort db, ushort address, byte[] data); byte[] ReadBytes(ushort db, ushort address, ushort length); } }