using HslCommunication.Profinet.Siemens; using System; using System.Threading; using System.Threading.Tasks; namespace PLCHelper { public class DataChangedArg { public T oldValue { get; set; } public T newValue { get; set; } } public class IntReader { private int lastVallue = 0; private string Address = string.Empty; private int Timeout = 1000; private SiemensS7Net client; private volatile bool isRunning = false; public event EventHandler> DataChanged; public IntReader(SiemensS7Net client, string address, int initValue = 0) { 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.ReadInt16(Address); if (res.IsSuccess) { int val = res.Content; if (val != lastVallue) { DataChanged?.Invoke(this, new DataChangedArg { oldValue = lastVallue, newValue = val }); lastVallue = val; } } Thread.Sleep(Timeout); } }); } } }