Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }