示例#1
0
        /// <summary>
        /// Остановит таймер, сделает ViewItem для ViewItem, запишет значение, Запустит таймет.
        /// </summary>
        public void WriteBitToOpc(BitParameters bitParameter, bool paramValue)
        {
            TimerStop();

            ViewItem(OpcConsts.Bits);

            List <OpcParameter> parameters = ProcessParameters(Parameters);

            OpcParameter parameter = parameters.FirstOrDefault(p => p.ParameterName == OpcConsts.Bits);

            if (parameter == null)
            {
                throw new Exception(string.Format("Can not process bit parameter {0}", bitParameter));
            }

            BitParameters bitParameters = (BitParameters)Convert.ToInt32(parameter.ParameterValue);

            if (paramValue)
            {
                bitParameters = bitParameters | bitParameter;
            }
            else
            {
                bitParameters = bitParameters & ~bitParameter;
            }

            int bitParametersAsInt = (int)bitParameters;

            _opcServerManager.WriteToOpc(bitParametersAsInt.ToString());

            TimerStart();
        }
示例#2
0
        public List <OpcParameter> ProcessOpcNodeParams(ArrayList lst)
        {
            if (lst == null)
            {
                throw new ArgumentNullException("lst");
            }

            List <OpcParameter> result = new List <OpcParameter>();

            _theSrv.Browse(OPCBROWSETYPE.OPC_LEAF, out lst);

            if (lst.Count < 1)
            {
                return(result);
            }

            string[] istrs = new string[5];

            OPCProperty[] props;

            OPCPropertyData[] propdata;

            int[] propertyIDs = new int[1];

            for (int i = 0; i < lst.Count; i++)
            {
                lst[i] = string.Format("PLC.PLC.{0}", lst[i]);
            }

            // enum+add all item names to ListView
            //string[] itemstrings = new string[2];
            //перебор списка имён переменных
            foreach (string item in lst)
            {
                OpcParameter parameterData = new OpcParameter();
                string       i             = item;
                parameterData.ParameterName = i;
                //itemstrings[0] = item;
                //получение списка свойств переменной
                _theSrv.QueryAvailableProperties(i, out props);

                if (props == null)
                {
                    continue;
                }

                // перебираем все свойства
                foreach (OPCProperty p in props)
                {
                    // PropertyID == 2 - это свойство в котором хранится значение переменной
                    if (p.PropertyID == 2)
                    {
                        propertyIDs[0] = p.PropertyID;
                        //получение свойства
                        _theSrv.GetItemProperties(i, propertyIDs, out propdata);
                        parameterData.ParameterType  = propdata[0].Data.GetType();
                        parameterData.ParameterValue = propdata[0].Data;
                    }
                }

                result.Add(parameterData);
            }

            return(result);
        }