using HslCommunication.Profinet.Siemens;
|
using System;
|
using System.Threading;
|
using System.Threading.Tasks;
|
|
namespace PLCHelper
|
{
|
public class DataChangedArg<T>
|
{
|
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<DataChangedArg<int>> 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<int>
|
{
|
oldValue = lastVallue,
|
newValue = val
|
});
|
lastVallue = val;
|
}
|
}
|
Thread.Sleep(Timeout);
|
}
|
});
|
}
|
}
|
}
|