Exemplo n.º 1
0
        /// <summary>
        /// Write a value on the specified opc tag
        /// </summary>
        /// <typeparam name="T">The type of tag to write on</typeparam>
        /// <param name="tag">The fully-qualified identifier of the tag. You can specify a subfolder by using a comma delimited name.
        /// E.g: the tag `foo.bar` writes on the tag `bar` on the folder `foo`</param>
        /// <param name="item"></param>
        public void Write <T>(string tag, T item)
        {
            var itmVal = new OpcDa.ItemValue
            {
                ItemName = tag,
                Value    = item
            };
            var result = _server.Write(new[] { itmVal })[0];

            CheckResult(result, tag);
        }
Exemplo n.º 2
0
        public void Write(WriteParameter[] writeParameters)
        {
            lock (_itemValues)
            {
                var itemValues = new ItemValue[writeParameters.Length];
                var items      = new Item[writeParameters.Length];
                for (var i = 0; i < writeParameters.Length; i++)
                {
                    var writeParameter = writeParameters[i];
                    var item           = new Item {
                        ItemName = writeParameter.Address
                    };
                    items[i]      = item;
                    itemValues[i] = new ItemValue(item)
                    {
                        Value = writeParameter.Value
                    };
                }
                _server.Write(itemValues);

                var readResult = _server.Read(items);
                foreach (var itemValueResult in readResult)
                {
                    if (_itemValues.ContainsKey(itemValueResult.ItemName))
                    {
                        _itemValues[itemValueResult.ItemName] = itemValueResult.Value;
                    }
                }
            }
        }
Exemplo n.º 3
0
        public void UpdateDataFilter(Opc.Da.Server server, string filterValue)
        {
            if (this.m_unfilteredItemID == null)
            {
                throw new ApplicationException("Cannot update the data filter for this item.");
            }
            ItemValue value2 = new ItemValue(this)
            {
                Value              = filterValue,
                Quality            = Quality.Bad,
                QualitySpecified   = false,
                Timestamp          = DateTime.MinValue,
                TimestampSpecified = false
            };

            IdentifiedResult[] resultArray = server.Write(new ItemValue[] { value2 });
            if ((resultArray == null) || (resultArray.Length == 0))
            {
                throw new ApplicationException("Unexpected result from server.");
            }
            if (resultArray[0].ResultID.Failed())
            {
                throw new ApplicationException("Could not update data filter.");
            }
            this.m_filterValue = filterValue;
        }
Exemplo n.º 4
0
        /// <summary>
        /// Updates a data filter.
        /// </summary>
        public void UpdateDataFilter(Opc.Da.Server server, string filterValue)
        {
            // not a valid operation for non data filter items.
            if (m_unfilteredItemID == null)
            {
                throw new ApplicationException("Cannot update the data filter for this item.");
            }

            ItemValue item = new ItemValue(this);

            // create the value to write.
            item.Value              = filterValue;
            item.Quality            = Quality.Bad;
            item.QualitySpecified   = false;
            item.Timestamp          = DateTime.MinValue;
            item.TimestampSpecified = false;

            // write the value.
            IdentifiedResult[] result = server.Write(new ItemValue[] { item });

            if (result == null || result.Length == 0)
            {
                throw new ApplicationException("Unexpected result from server.");
            }

            if (result[0].ResultID.Failed())
            {
                throw new ApplicationException("Could not update data filter.");
            }

            // update locale copy of the filter value.
            m_filterValue = filterValue;
        }
Exemplo n.º 5
0
        static void Main(string[] args)
        {
            Opc.Da.Server server = new Opc.Da.Server(new OpcCom.Factory(), new URL
            {
                Path   = @"Matrikon.OPC.Simulation.1",
                Scheme = Opc.UrlScheme.DA
            });
            server.Connect();

            //Write Values
            int       counter  = 1;
            ItemValue item     = new ItemValue("Bucket Brigade.TestWrite");
            var       itemList = new List <ItemValue>();

            itemList.Add(item);
            Item item_read = new Item();

            item_read.ItemName = "Bucket Brigade.TestWrite";
            item_read.Active   = true;
            List <Item> readItems = new List <Item>();

            readItems.Add(item_read);
            while (true)
            {
                item.Value = "Testing" + counter;
                server.Write(itemList.ToArray());
                counter++;

                var result = server.Read(readItems.ToArray());
                foreach (var value in result)
                {
                    System.Console.WriteLine(value.ItemName + " : " + value.Value.ToString());
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 向指定单个变量写入值
        /// </summary>
        /// <param name="index"></param>
        /// <param name="itemName"></param>
        /// <param name="value"></param>
        public void writeOpc(int index, string itemName, string value)
        {
            Opc.Da.ItemValue[] opcItemValues = new Opc.Da.ItemValue[1];
            foreach (Opc.Da.Item opcItem in opcServer.Subscriptions[index].Items)
            {
                if (opcItem.ItemName.Equals(itemName))
                {
                    opcItemValues[0] = new Opc.Da.ItemValue(opcItem);
                    break;
                }
            }
            if (opcItemValues == null)
            {
                return;
            }
            opcItemValues[0].Value = value;

            opcServer.Write(opcItemValues);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Запись одного конкретного значения
        /// </summary>
        public void Write(string itemName, string value)
        {
            var values = new ItemValue[1];

            values[0] = new ItemValue
            {
                ItemName = itemName,
                Value    = value
            };
            serverHandle.Write(values);
        }
Exemplo n.º 8
0
        public static string WriteValue(string nodeName, double value)
        {
            Opc.ItemIdentifier itemId = new Opc.ItemIdentifier(nodeName);
            ItemValueResult    it     = new ItemValueResult(itemId);

            it.Value = value;

            server.Write(new ItemValueResult[] { it });

            return("Masz ty RiGCz? wpisałeś  " + value + " do węzła " + nodeName);
        }
Exemplo n.º 9
0
        public void Write(WriteParameter[] writeParameters)
        {
            var itemValues = new ItemValue[writeParameters.Length];

            for (var i = 0; i < writeParameters.Length; i++)
            {
                var writeParameter = writeParameters[i];
                var item           = new Item {
                    ItemName = writeParameter.Address
                };
                itemValues[i] = new ItemValue(item)
                {
                    Value = writeParameter.Value
                };
            }
            _server.Write(itemValues);
        }
Exemplo n.º 10
0
        public ComplexItem CreateDataFilter(Opc.Da.Server server, string filterName, string filterValue)
        {
            ComplexItem item2;

            if (this.m_unfilteredItemID != null)
            {
                return(null);
            }
            if (this.m_filterItem == null)
            {
                return(null);
            }
            BrowsePosition position = null;

            try
            {
                ItemValue     value2  = new ItemValue(this.m_filterItem);
                StringWriter  w       = new StringWriter();
                XmlTextWriter writer2 = new XmlTextWriter(w);
                writer2.WriteStartElement("DataFilters");
                writer2.WriteAttributeString("Name", filterName);
                writer2.WriteString(filterValue);
                writer2.WriteEndElement();
                writer2.Close();
                value2.Value              = w.ToString();
                value2.Quality            = Quality.Bad;
                value2.QualitySpecified   = false;
                value2.Timestamp          = DateTime.MinValue;
                value2.TimestampSpecified = false;
                IdentifiedResult[] resultArray = server.Write(new ItemValue[] { value2 });
                if ((resultArray == null) || (resultArray.Length == 0))
                {
                    throw new ApplicationException("Unexpected result from server.");
                }
                if (resultArray[0].ResultID.Failed())
                {
                    throw new ApplicationException("Could not create new data filter.");
                }
                BrowseFilters filters = new BrowseFilters {
                    ElementNameFilter    = filterName,
                    BrowseFilter         = browseFilter.item,
                    ReturnAllProperties  = false,
                    PropertyIDs          = CPX_PROPERTIES,
                    ReturnPropertyValues = true
                };
                BrowseElement[] elementArray = server.Browse(this.m_filterItem, filters, out position);
                if ((elementArray == null) || (elementArray.Length == 0))
                {
                    throw new ApplicationException("Could not browse to new data filter.");
                }
                ComplexItem item = new ComplexItem();
                if (!item.Init(elementArray[0]))
                {
                    throw new ApplicationException("Could not initialize to new data filter.");
                }
                item2 = item;
            }
            finally
            {
                if (position != null)
                {
                    position.Dispose();
                    position = null;
                }
            }
            return(item2);
        }
Exemplo n.º 11
0
        void ThreadJob()
        {
            try
            {
                srv = new Opc.Da.Server(new OpcCom.Factory(), new Opc.URL(fullServerName));
                srv.Connect();
                if (!srv.IsConnected)
                {
                    throw new Exception("не удалось подключиться к серверу OPC");
                }
            }
            catch
            {
                if (refMainWindow != null)
                {
                    refMainWindow.Dispatcher.Invoke(refMainWindow.ofsFail);
                }
                return;
            }
            bool isFirstCycle = true;

            while (true)
            {
                //-------------- OPC ----------------
                opcitems.Clear();
                foreach (DIStruct di in DIStruct.items)
                {
                    if ((di.OPCtag != "" && di.IsChanged && di.En) || (isFirstCycle))
                    {
                        itm = new Opc.Da.ItemValue(Properties.Settings.Default.OPCDevice + '!' + di.OPCtag)
                        {
                            Value = di.ValDI ^ di.InvertDI
                        };
                        opcitems.Add(itm);
                        di.IsChanged = false;
                    }
                }

                foreach (AIStruct ai in AIStruct.items)
                {
                    if ((ai.OPCtag != "" && ai.IsChanged && ai.En) || (isFirstCycle))
                    {
                        itm = new Opc.Da.ItemValue(Properties.Settings.Default.OPCDevice + '!' + ai.OPCtag);
                        if (ai.PLCDestType == EPLCDestType.Float)
                        {
                            itm.Value = ai.fValAI;
                        }
                        else
                        {
                            itm.Value = ai.ValACD;
                        }

                        opcitems.Add(itm);
                        ai.IsChanged = false;
                    }
                }
                try
                {
                    // Записываем сигналы DI AI
                    srv.Write(opcitems.ToArray());

                    //читаем сигналы DO для которых задан тег
                    if (opcDOItemsForRead.Length > 0)
                    {
                        readResult = srv.Read(opcDOItemsForRead);

                        for (int i = 0; i < readResult.Length; i++)
                        {
                            try
                            {
                                arrayDO[i].ValDO = (bool)readResult[i].Value;
                            }
                            catch
                            {
                            }
                        }
                    }

                    //читаем сигналы AO для которых задан тег
                    if (opcAOItemsForRead.Length > 0)
                    {
                        readResult = srv.Read(opcAOItemsForRead);
                        for (int i = 0; i < readResult.Length; i++)
                        {
                            try
                            {
                                if (arrayAO[i].PLCDestType == EPLCDestType.ADC)
                                {
                                    object val = readResult[i].Value;
                                    if (val is short)
                                    {
                                        arrayAO[i].ValACD = (ushort)((Int16)readResult[i].Value);
                                    }
                                    if (val is ushort)
                                    {
                                        arrayAO[i].ValACD = (UInt16)readResult[i].Value;
                                    }
                                }
                                else
                                {
                                    arrayAO[i].fVal = (float)readResult[i].Value;
                                }
                            }
                            catch
                            {
                            }
                        }
                        Debug.WriteLine(opcAOItemsForRead.Length.ToString() + " AO tags read");
                    }
                }

                catch
                {
                    //System.Windows.Forms.MessageBox.Show("OPC Thread exception:\n\r" + ex.Message);
                    //  LogWriter.AppendLog("Чтение по OPC прервано"+Environment.NewLine);
                    if (refMainWindow != null)
                    {
                        refMainWindow.Dispatcher.Invoke(refMainWindow.ofsFail);
                    }
                }
                isFirstCycle = false;
                Thread.Sleep(period);
                if (isAbortRequested)
                {
                    return;
                }
            }//loop
        }
Exemplo n.º 12
0
        /// <summary>
        /// Creates a new data filter.
        /// </summary>
        public ComplexItem CreateDataFilter(Opc.Da.Server server, string filterName, string filterValue)
        {
            // not a valid operation for data filter items.
            if (m_unfilteredItemID != null)
            {
                return(null);
            }

            // data filters not supported by the item.
            if (m_filterItem == null)
            {
                return(null);
            }

            BrowsePosition position = null;

            try
            {
                // write the desired filter to the server.
                ItemValue item = new ItemValue(m_filterItem);

                // create the filter parameters document.
                StringWriter  ostrm  = new StringWriter();
                XmlTextWriter writer = new XmlTextWriter(ostrm);

                writer.WriteStartElement("DataFilters");
                writer.WriteAttributeString("Name", filterName);
                writer.WriteString(filterValue);
                writer.WriteEndElement();

                writer.Close();

                // create the value to write.
                item.Value              = ostrm.ToString();
                item.Quality            = Quality.Bad;
                item.QualitySpecified   = false;
                item.Timestamp          = DateTime.MinValue;
                item.TimestampSpecified = false;

                // write the value.
                IdentifiedResult[] result = server.Write(new ItemValue[] { item });

                if (result == null || result.Length == 0)
                {
                    throw new ApplicationException("Unexpected result from server.");
                }

                if (result[0].ResultID.Failed())
                {
                    throw new ApplicationException("Could not create new data filter.");
                }

                // browse for new data filter item.
                BrowseFilters filters = new BrowseFilters();

                filters.ElementNameFilter    = filterName;
                filters.BrowseFilter         = browseFilter.item;
                filters.ReturnAllProperties  = false;
                filters.PropertyIDs          = CPX_PROPERTIES;
                filters.ReturnPropertyValues = true;

                BrowseElement[] elements = server.Browse(m_filterItem, filters, out position);

                // nothing found.
                if (elements == null || elements.Length == 0)
                {
                    throw new ApplicationException("Could not browse to new data filter.");
                }

                ComplexItem filterItem = new ComplexItem();

                if (!filterItem.Init(elements[0]))
                {
                    throw new ApplicationException("Could not initialize to new data filter.");
                }

                // return the new data filter.
                return(filterItem);
            }
            finally
            {
                if (position != null)
                {
                    position.Dispose();
                    position = null;
                }
            }
        }