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<DataChangedArg<bool>> 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<bool>
|
{
|
oldValue = lastVallue,
|
newValue = val
|
});
|
lastVallue = val;
|
}
|
}
|
Thread.Sleep(Timeout);
|
}
|
});
|
}
|
}
|
}
|