コード例 #1
0
        /// <summary>
        /// Tag对象注册事件
        /// </summary>
        /// <param name="group">TagGroup对象</param>
        /// <param name="tag">Tag对象</param>
        private void OnTagInGroupRegister(CustomGroup group, CustomTag tag)
        {
            _tagRegisterInParentHandler?.Invoke(group, tag);

            SiemensTag siemensTag = tag as SiemensTag;

            Block.Add(siemensTag.DB_Offset, siemensTag.Length);
        }
コード例 #2
0
        /// <summary>
        /// 读取西门子PLC中该Tag的值
        /// </summary>
        /// <param name="tag"></param>
        /// <returns></returns>
        public SiemensTag ReadTagValue(SiemensTag tag)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            if (tag is SiemensBoolOfTag)
            {
                byte[] buffer = new byte[1];
                int    resNo  =
                    specialRWConnection.ReadBlock(
                        DBType,
                        DBNumber,
                        tag.DB_Offset,
                        1,
                        ref buffer,
                        out string errText);
                SetTagValue(buffer, tag, tag.DB_Offset);
            }
            else if (tag is SiemensLengthTag)
            {
                if (tag is SiemensRealOfTag)
                {
                    SiemensRealOfTag ltag  = tag as SiemensRealOfTag;
                    float            value = 0;
                    int resNo =
                        specialRWConnection.ReadFloat(
                            DBType,
                            DBNumber,
                            ltag.DB_Offset,
                            ref value,
                            out string errText);
                    ltag.Value = value;
                }
                else
                {
                    SiemensLengthTag ltag   = tag as SiemensLengthTag;
                    byte[]           buffer = new byte[ltag.Length];
                    int resNo =
                        specialRWConnection.ReadBlock(
                            DBType,
                            DBNumber,
                            ltag.DB_Offset,
                            ltag.Length,
                            ref buffer,
                            out string errText);
                    SetTagValue(buffer, tag, tag.DB_Offset);
                }
            }

            sw.Stop();
            _log.Debug($"触发信号[{tag.Name}]的执行时长:[{sw.ElapsedMilliseconds}]毫秒");

            return(tag);
        }
コード例 #3
0
        /// <summary>
        /// Tag对象注册事件
        /// </summary>
        /// <param name="group">TagGroup对象</param>
        /// <param name="tag">Tag对象</param>
        private void OnTagRegister(CustomGroup group, CustomTag tag)
        {
            _log.Trace($"Device[{Name}]:Tag[{tag.Name}],Offset[{tag.DB_Offset}]");

            if (!(tag is SiemensTag))
            {
                throw new Exception($"tag对象:{tag.Name}不是SiemensTag对象");
            }

            SiemensTag siemensTag = tag as SiemensTag;

            switch (CycleReadMode)
            {
            case SiemensCycleReadMode.FullBlock:
                FullBlock.Add(siemensTag.DB_Offset, siemensTag.Length);
                break;

            case SiemensCycleReadMode.ControlBlock:
                if (siemensTag.Type == TagType.C)
                {
                    string key = "";
                    if (group is SiemensTagGroup)
                    {
                        key = (group as SiemensTagGroup).Name;
                    }
                    else if (group is SiemensSubTagGroup)
                    {
                        SiemensSubTagGroup subGroup = group as SiemensSubTagGroup;
                        key = $"{subGroup.Parent.Name}.{subGroup.Prefix}";
                    }

                    PLCDBBlock block = ControlBlock[key];
                    if (block == null)
                    {
                        block = new PLCDBBlock();
                        ControlBlock.Add(key, block);
                    }
                    block.Add(siemensTag.DB_Offset, siemensTag.Length);
                }
                break;
            }
        }