using HslCommunication.Profinet.Siemens; using System; using System.Threading; using System.Threading.Tasks; namespace PLCHelper { public class BoolReader { private bool lastVallue = false; private string Address = string.Empty; private int Timeout = 1000; private SiemensS7Net client; private volatile bool isRunning = false; public event EventHandler> DataChanged; public BoolReader(SiemensS7Net client, string address, bool initValue = false) { this.client = client; this.Address = address; this.lastVallue = initValue; } public void Stop() { isRunning = false; } public void Run() { isRunning = true; Task.Run(() => { while (isRunning) { var res = client.ReadBool(Address); if (res.IsSuccess) { bool val = res.Content; if (val != lastVallue) { DataChanged?.Invoke(this, new DataChangedArg { oldValue = lastVallue, newValue = val }); lastVallue = val; } } Thread.Sleep(Timeout); } }); } } }