using System.ComponentModel;
using System.Threading;
using VirtualConveyor.Cache.Entity;
using VirtualConveyor.Common.Entity;
using VirtualConveyor.Properties;
using VirtualConveyor.Utils;
namespace VirtualConveyor.HeartBeat.Entity
{
public class HeartBeatEntity:BindableBase
{
///
/// PLC心跳
///
private int wPlcHeartBeat;
public int WPlcHeartBeat
{
get { return wPlcHeartBeat; }
set { SetProperty(ref wPlcHeartBeat, value); }
}
///
/// 告警信息
///
private int wAlarmCode;
public int WAlarmCode
{
get { return wAlarmCode; }
set { SetProperty(ref wAlarmCode, value); }
}
///
/// 服务器心跳
///
private bool serverHeartBeat;
public bool ServerHeartBeat
{
get { return serverHeartBeat; }
set { SetProperty(ref serverHeartBeat, value); }
}
///
/// WCS需要写入的OPC地址
///
public OpcReadItem OpcReadItems{ get; set; }
///
/// WCS需要读取的OPC地址
///
public OpcWriteItem OpcWriteItems { get; set; }
///
/// 写入心跳的线程
///
private Thread WritePlcHeartBeatThread { get; set; }
public HeartBeatEntity()
{
OpcReadItems = new OpcReadItem
{
ServerHeartBeat = "S7:[@LOCALSERVER]DB1,X159.0"
};
OpcWriteItems = new OpcWriteItem
{
PlcHeartBeat = "S7:[@LOCALSERVER]DB1,INT160",
AlarmCode = "S7:[@LOCALSERVER]DB1,W162"
};
this.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChanged);
WritePlcHeartBeatThread = new Thread(new ThreadStart(WritePlcHeartBeat));
ThreadHelper.StartThread(WritePlcHeartBeatThread);
}
///
/// 析构函数
///
~HeartBeatEntity()
{
LogTextHelper.WriteLine(Resources.LogDir, "{0}的析构函数别调用", this.ToString());
ThreadHelper.CloseThread(WritePlcHeartBeatThread);
}
public void CloseWritePlcHeartBeatThread() { ThreadHelper.CloseThread(WritePlcHeartBeatThread); }
///
/// 心跳属性值发生变化时触发的事件
///
///
///
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "WPlcHeartBeat":
CacheEntity.OpcWcfServiceClient.WriteValue(this.OpcWriteItems.PlcHeartBeat, WPlcHeartBeat);
break;
case "WAlarmCode":
CacheEntity.OpcWcfServiceClient.WriteValue(this.OpcWriteItems.AlarmCode, WAlarmCode);
break;
}
}
///
/// 写入心跳
///
private void WritePlcHeartBeat()
{
while (true)
{
WPlcHeartBeat = WPlcHeartBeat > 999 ? 0 : WPlcHeartBeat + 1;
Thread.Sleep(1000);
}
}
}
}