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); } } } }