/// <summary> /// 定时发送MES心跳信号线程,目前固定每隔2秒钟发送一次,间隔时间不能修改 /// </summary> private void MESHeartBeat() { while (!threadTerminated) { DateTime now = DateTime.Now; if (cycleReadConnection != null) { TimeSpan timeSpan = now - LastMESHearBeatTime; if (timeSpan.TotalMilliseconds >= 2000) { CustomTag tag = FindTag("COMM", "MES_Heart_Beat"); if (tag != null && tag is SiemensBoolOfTag) { SiemensBoolOfTag heartBeatTag = tag as SiemensBoolOfTag; heartBeatTag.Value = !heartBeatTag.Value; try { cycleReadConnection.WriteToPLC( DBType, DBNumber, heartBeatTag); } catch (Exception error) { _log.Error(error.Message, error); } } LastMESHearBeatTime = now; } } Thread.Sleep(500); } }
/// <summary> /// 设置Tag对象的值 /// </summary> /// <param name="buffer">从PLC读取数据块中的内容</param> /// <param name="tag">Tag对象</param> /// <param name="beginOffset">数据块开始偏移量</param> private bool SetTagValue(byte[] buffer, CustomTag tag, int beginOffset) { int offset = tag.DB_Offset - beginOffset; if (tag is SiemensBoolOfTag) { SiemensBoolOfTag ltag = tag as SiemensBoolOfTag; bool newValue = Tools.GetBitValue(buffer[offset], ltag.Position); if (ltag.Value == newValue) { return(false); } ltag.Value = newValue; _log.Trace($"[{ltag.Name}={ltag.Value}]"); return(true); } else if (tag is SiemensByteOfTag) { SiemensByteOfTag ltag = tag as SiemensByteOfTag; byte newValue = buffer[offset]; if (ltag.Value == newValue) { return(false); } ltag.Value = newValue; _log.Trace($"[{ltag.Name}={ltag.Value}]"); return(true); } else if (tag is SiemensWordOfTag) { SiemensWordOfTag ltag = tag as SiemensWordOfTag; ushort newValue = Tools.GetWordValue(buffer, offset); if (ltag.Value == newValue) { return(false); } ltag.Value = newValue; _log.Trace($"[{ltag.Name}={ltag.Value}]"); return(true); } else if (tag is SiemensIntOfTag) { SiemensIntOfTag ltag = tag as SiemensIntOfTag; short newValue = Tools.GetIntValue(buffer, offset); if (ltag.Value == newValue) { return(false); } ltag.Value = newValue; _log.Trace($"[{ltag.Name}={ltag.Value}]"); return(true); } else if (tag is SiemensDWordOfTag) { SiemensDWordOfTag ltag = tag as SiemensDWordOfTag; uint newValue = Tools.GetDWordValue(buffer, offset); if (ltag.Value == newValue) { return(false); } ltag.Value = newValue; _log.Trace($"[{ltag.Name}={ltag.Value}]"); return(true); } else if (tag is SiemensRealOfTag) { SiemensRealOfTag ltag = tag as SiemensRealOfTag; float newValue = Tools.GetRealValue(buffer, offset); if (ltag.Value == newValue) { return(false); } ltag.Value = newValue; _log.Trace($"[{ltag.Name}={ltag.Value}]"); return(true); } else if (tag is SiemensArrayCharOfTag) { SiemensArrayCharOfTag ltag = tag as SiemensArrayCharOfTag; string newValue = Tools.GetStringValue(buffer, offset, ltag.Length); if (ltag.Value == newValue) { return(false); } ltag.Value = newValue; _log.Trace($"[{ltag.Name}={ltag.Value}]"); return(true); } else { return(false); } }