Пример #1
0
        //Считывает значения из рекордсета _histReader, forBegin - значения для среза
        //Возвращает количество прочитанных значений и сформированных значений
        private KeyValuePair <int, int> FormPart(bool forBegin)
        {
            int nread = 0, nwrite = 0;

            while (_histReader.Read())
            {
                ObjectOvation ob = null;
                try
                {
                    nread++;
                    var id = Convert.ToInt32(_histReader["Id"]);
                    if (_objectsId.ContainsKey(id))
                    {
                        ob = _objectsId[id];
                        //DateTime t = forBegin ? BeginRead : Time(_histReader); //Установка среза
                        DateTime t  = Time(_histReader);
                        int      nd = Nd(_histReader);
                        if (ob.StateSignal != null)
                        {
                            nwrite += ob.StateSignal.AddMoment(t, Stat(_histReader), 0, forBegin);
                        }
                        if (ob.ValueSignal != null)
                        {
                            //правка(28.09.2018, добавлено преобразование к булевскому типу )
                            if (ob.DataType == DataType.Boolean)
                            {
                                nwrite += ob.ValueSignal.AddMoment(t, Convert.ToBoolean(RMean(_histReader)), nd, forBegin);
                            }
                            else if (ob.DataType == DataType.Integer)
                            {
                                nwrite += ob.ValueSignal.AddMoment(t, Convert.ToInt32(RMean(_histReader)), nd, forBegin);
                            }
                            else
                            {
                                nwrite += ob.ValueSignal.AddMoment(t, RMean(_histReader), nd, forBegin);
                            }
                        }
                        if (ob.BitSignals != null && ob.BitSignals.Count != 0)
                        {
                            int im = IMean(_histReader);
                            foreach (var b in ob.BitSignals.Keys)
                            {
                                nwrite += ob.BitSignals[b].AddMoment(t, im.GetBit(b), nd, forBegin);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    AddErrorObject(ob == null ? "" : ob.Inf, "Ошибка при чтении значений из рекордсета. " + _b + " - " + _e, ex);
                }
            }
            return(new KeyValuePair <int, int>(nread, nwrite));
        }
Пример #2
0
        //Добавить сигнал
        public ProviderSignal AddSignal(string signalInf, string code, DataType dataType, int idInClone)
        {
            var           sig = new SignalOvation(signalInf, code, dataType, this, idInClone);
            ObjectOvation ob;

            if (!_objectsId.ContainsKey(sig.Id))
            {
                ob = new ObjectOvation(sig.Id, code);
                _objectsId.Add(sig.Id, ob);
                if (_parts.Count == 0 || _parts[_parts.Count - 1].Count == 200)
                {
                    _parts.Add(new List <ProviderObject>());
                }
                _parts[_parts.Count - 1].Add(_objectsId[sig.Id]);
            }
            ob = _objectsId[sig.Id];
            if (sig.IsState) //Слово состояния
            {
                if (ob.StateSignal == null)
                {
                    ProviderSignals.Add(sig.Code, sig);
                }
                return(ob.StateSignal ?? (ob.StateSignal = sig));
            }
            if (sig.Bit == -1)//Аналоговый или дискретный
            {
                if (ob.ValueSignal == null)
                {
                    ProviderSignals.Add(sig.Code, sig);
                }
                return(ob.ValueSignal ?? (ob.ValueSignal = sig));
            }
            if (!ob.BitSignals.ContainsKey(sig.Bit))//Бит упакованного
            {
                ProviderSignals.Add(sig.Code, sig);
                ob.BitSignals.Add(sig.Bit, sig);
            }
            return(ob.BitSignals[sig.Bit]);
        }