Пример #1
0
        //Формирование значений по одному блоку сигналов
        private KeyValuePair <int, int> FormPartValues()
        {
            int nread = 0, nwrite = 0;

            //var set = new HashSet<int>();
            using (_rec)
                while (_rec.Read())
                {
                    SimaticObject ob = null;
                    try
                    {
                        int id = _rec.GetInt("ValueId"); //0
                        if (_objectsId.ContainsKey(id))
                        {
                            ob = _objectsId[id];
                            DateTime time = _rec.GetTime("TimeStamp").ToLocalTime(); //1
                            if (!_isCut || time <= BeginRead)
                            {
                                int quality = _rec.GetInt("Quality");//3
                                int nd      = quality == 128 ? 0 : 1;
                                nread++;
                                if (ob.SignalValue != null)
                                {
                                    nwrite += ob.SignalValue.AddMoment(ob.SignalValue.DataType, time, _rec.Reader["RealValue"], nd, _isCut); //2
                                }
                                if (ob.SignalQuality != null)
                                {
                                    nwrite += ob.SignalQuality.AddMoment(time, quality, 0, _isCut);
                                }
                                if (ob.SignalFlags != null)
                                {
                                    nwrite += ob.SignalFlags.AddMoment(time, _rec.GetInt("Flags"), nd, _isCut);  //4
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        AddErrorObject(ob == null ? "" : ob.Tag, "Ошибка при чтении значений из рекордсета", ex);
                    }
                }
            foreach (var sig in ProviderSignals.Values)
            {
                if (sig.BeginMoment != null)
                {
                    NumWrite += sig.AddBegin(BeginRead); //ab было без параметра
                }
            }
            return(new KeyValuePair <int, int>(nread, nwrite));
        }
Пример #2
0
        //Добавить сигнал в провайдер
        public ProviderSignal AddSignal(string signalInf, string code, DataType dataType, int idInClone = 0)
        {
            var sig = new SimaticSignal(signalInf, code, dataType, this, idInClone);

            if (!_objectsId.ContainsKey(sig.Id))
            {
                var ob = new SimaticObject(sig);
                _objectsId.Add(sig.Id, ob);
                if (_parts.Count == 0 || _parts[_parts.Count - 1].Count == 500)
                {
                    _parts.Add(new List <ProviderObject>());
                }
                _parts[_parts.Count - 1].Add(ob);
                ProviderSignals.Add(sig.Code, sig);
                return(sig);
            }
            var addsig = _objectsId[sig.Id].AddSignal(sig);

            return(ProviderSignals.Add(addsig.Code, addsig));
        }