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
|
{
|
/// <summary>
|
/// PLC心跳
|
/// </summary>
|
private int wPlcHeartBeat;
|
|
public int WPlcHeartBeat
|
{
|
get { return wPlcHeartBeat; }
|
set { SetProperty(ref wPlcHeartBeat, value); }
|
}
|
|
/// <summary>
|
/// 告警信息
|
/// </summary>
|
private int wAlarmCode;
|
|
public int WAlarmCode
|
{
|
get { return wAlarmCode; }
|
set { SetProperty(ref wAlarmCode, value); }
|
}
|
|
/// <summary>
|
/// 服务器心跳
|
/// </summary>
|
private bool serverHeartBeat;
|
|
public bool ServerHeartBeat
|
{
|
get { return serverHeartBeat; }
|
set { SetProperty(ref serverHeartBeat, value); }
|
}
|
|
/// <summary>
|
/// WCS需要写入的OPC地址
|
/// </summary>
|
public OpcReadItem OpcReadItems{ get; set; }
|
|
|
/// <summary>
|
/// WCS需要读取的OPC地址
|
/// </summary>
|
public OpcWriteItem OpcWriteItems { get; set; }
|
|
|
/// <summary>
|
/// 写入心跳的线程
|
/// </summary>
|
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);
|
}
|
|
|
/// <summary>
|
/// 析构函数
|
/// </summary>
|
~HeartBeatEntity()
|
{
|
LogTextHelper.WriteLine(Resources.LogDir, "{0}的析构函数别调用", this.ToString());
|
ThreadHelper.CloseThread(WritePlcHeartBeatThread);
|
}
|
|
public void CloseWritePlcHeartBeatThread() { ThreadHelper.CloseThread(WritePlcHeartBeatThread); }
|
|
|
/// <summary>
|
/// 心跳属性值发生变化时触发的事件
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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;
|
|
}
|
}
|
|
/// <summary>
|
/// 写入心跳
|
/// </summary>
|
private void WritePlcHeartBeat()
|
{
|
while (true)
|
{
|
WPlcHeartBeat = WPlcHeartBeat > 999 ? 0 : WPlcHeartBeat + 1;
|
Thread.Sleep(1000);
|
}
|
}
|
|
|
|
}
|
}
|