Exemplo n.º 1
0
        public bool AddItem(Tag bi)
        {
            try
            {
                #region *********集合已包含此Tag,则退出*************************
                foreach (Tag item in this.Tags)
                {
                    if (item.TagName == bi.TagName)
                    {
                        MessageBox.Show("Tag重复:在在重复的Tag点", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return(false);
                    }
                }
                #endregion

                OPCItems        items = this.OPCGroup.OPCItems;//根据指定的组类别,取出组下的标签集合
                Func <Tag, int> f     = p => { if (p != null)
                                               {
                                                   return(p.ExtraAs <DaExtra>().ItmHandleClient + 1);
                                               }
                                               return(0); };
                int itmHandleBegin = f(Tags.LastOrDefault());//itmHandleBegin的逻辑为最后一个标签itmHandle值+1
                //关键,此步骤将标签添加入OPCclient的监听列表中
                OPCItem ki = items.AddItem(bi.OpcTagName, itmHandleBegin);
                bi.ExtraAs <DaExtra>().ItmHandleClient = itmHandleBegin;
                bi.DataType = Enum.GetName(typeof(OpcTypes.CanonicalDataTypesForDa), ki.CanonicalDataType);
                bi.ExtraAs <DaExtra>().ItmHandleServer = ki.ServerHandle;
                Tags.Add((Tag)(Object)bi);
                return(true);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemplo n.º 2
0
        private void listboxAlias_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (itmHandleClient != 0)
                {
                    this.txtTagValue.Text   = "";
                    this.txtQualities.Text  = "";
                    this.txtTimeStamps.Text = "";

                    Array   Errors;
                    OPCItem bItem = KepItems.GetOPCItem(itmHandleServer);
                    //注:OPC中以1为数组的基数
                    int[] temp = new int[2] {
                        0, bItem.ServerHandle
                    };
                    Array serverHandle = (Array)temp;
                    //移除上一次选择的项
                    KepItems.Remove(KepItems.Count, ref serverHandle, out Errors);
                }
                itmHandleClient = 1234;
                KepItem         = KepItems.AddItem(listboxAlias.SelectedItem.ToString(), itmHandleClient);
                itmHandleServer = KepItem.ServerHandle;
            }
            catch (Exception err)
            {
                //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。
                itmHandleClient    = 0;
                txtTagValue.Text   = "Error ox";
                txtQualities.Text  = "Error ox";
                txtTimeStamps.Text = "Error ox";
                MessageBox.Show("此项为系统保留项:" + err.Message, "提示信息");
            }
        }
Exemplo n.º 3
0
 //连接
 private void buttonConnect_Click(object sender, EventArgs e)
 {
     lock (lockobj)
     {
         if (OPCServer == null)
         {
             OPCServer = new OPCServer();
         }
         if (OPCServer.ServerState == (int)OPCServerState.OPCRunning)
         {
             return;
         }
         OPCServer.Connect((string)jo["OPCServerName"]);
         int i = 1;
         foreach (KeyValuePair <string, JToken> kvp in (JObject)jo["Groups"])
         {
             OPCGroup G = OPCServer.OPCGroups.Add(kvp.Key);
             foreach (KeyValuePair <string, JToken> kvpp in (JObject)kvp.Value)
             {
                 OPCItem oItem = G.OPCItems.AddItem((string)kvpp.Value, i);
                 i++;
                 LocalOPCItems.Add(kvp.Key + "_" + kvpp.Key, oItem);
             }
         }
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// 获取节点的所有值,显示在listview中
        /// </summary>
        private void ShowListView()
        {
            if (!CreateGroup())
            {
                return;
            }
            object value;
            object quality;
            object timestamp;
            //itmHandlerClient = 1234;
            OPCBrowser opcbrowser = ServerConnect.KepServer.CreateBrowser();

            list = RecurBrowse(opcbrowser);
            for (int i = 0; i < list.Count; i++)
            {
                KepItem          = KepItems.AddItem(list[i], itmHandlerClient);
                itmHandlerServer = KepItem.ServerHandle;
                KepItem.Read((short)OPCDataSource.OPCDevice, out value, out quality, out timestamp);
                lv = new ListViewItem(list[i]);
                lv.SubItems.Add(Convert.ToString(value));
                lv.SubItems.Add(quality.ToString());
                lv.SubItems.Add(timestamp.ToString());
                listView1.Items.Add(lv);
            }
        }
Exemplo n.º 5
0
        public object itemREAD(OPCItem item)
        {
            object ItemValues; object Qualities; object TimeStamps;

            item.Read(1, out ItemValues, out Qualities, out TimeStamps);
            return(ItemValues);
        }
Exemplo n.º 6
0
        public void Activate()
        {
            if (IsActive)
            {
                throw new OpcValueException("Двойная активация OPC тега: " + Name);
            }

            if (string.IsNullOrEmpty(Name))
            {
                throw new OpcValueException("Имя OPC параметра не задано.");
            }

            if (server.ServerState != (int)OPCServerState.OPCRunning)
            {
                throw new OpcValueException(
                          "Ошибка при активации тега: OPC сервер не подключен.");
            }

            GroupName = Guid.NewGuid().ToString();
            opcGroup  = server.OPCGroups.Add(GroupName);
            opcItem   = opcGroup.OPCItems.AddItem(Name, opcGroup.ClientHandle);

            if (isListenValueChanging)
            {
                opcGroup.DataChange  += ValueChanged;
                opcGroup.UpdateRate   = UpdateRate;
                opcGroup.IsActive     = true;
                opcGroup.IsSubscribed = true;
            }

            IsActive = true;
        }
Exemplo n.º 7
0
 private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)  //列表
 {
     try
     {
         if (_itmHandleClient != 0)
         {
             TextBox3.Text = "";
             Array   errors;
             OPCItem bItem = _kepItems.GetOPCItem(_itmHandleServer);
             //注: OPC中以1为数组的基数
             int[] temp         = new int[] { 0, bItem.ServerHandle };
             Array serverHandle = temp;
             //移除上一次选择的项
             _kepItems.Remove(_kepItems.Count, ref serverHandle, out errors);
         }
         _itmHandleClient = 1234;
         _kepItem         = _kepItems.AddItem(ListBox1.SelectedItem.ToString(), _itmHandleClient);
         TextBox2.Text    = Convert.ToString(ListBox1.SelectedItem);
         _itmHandleServer = _kepItem.ServerHandle;
     }
     catch (Exception err)
     {
         //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理
         _itmHandleClient = 0;
         TextBox3.Text    = "Error ox";
         MessageBox.Show("此项为系统保留项:" + err.Message, "提示信息");
     }
 }
Exemplo n.º 8
0
        public void SyncWrite(string[] writeItemNames, string[] writeItemValues)
        {
            OPCItem[] bItem = new OPCItem[writeItemNames.Length];
            for (int i = 0; i < writeItemNames.Length; i++)
            {
                for (int j = 0; j < itemNames.Count; j++)
                {
                    if (itemNames[j] == writeItemNames[i])
                    {
                        bItem[i] = opcItems.GetOPCItem(itemHandleServer[j]);
                    }
                }
            }
            int[] temp = new int[writeItemNames.Length + 1];
            temp[0] = 0;
            for (int i = 1; i < writeItemNames.Length; i++)
            {
                temp[i] = bItem[i - 1].ServerHandle;
            }
            Array serverHandles = (Array)temp;

            object[] valueTemp = new object[writeItemNames.Length + 1];
            valueTemp[0] = "";
            for (int i = 1; i < writeItemNames.Length + 1; i++)
            {
                valueTemp[i] = writeItemValues[i - 1];
            }
            Array values = (Array)valueTemp;
            Array Errors;

            opcGroup.SyncWrite(writeItemNames.Length, ref serverHandles, ref values, out Errors);

            GC.Collect();
        }
Exemplo n.º 9
0
        public bool Write(string groupName, string itemID, object val)
        {
            bool re = false;


            try
            {
                OPCGroup myGroup = myServer.OPCGroups.GetOPCGroup(groupName);
                if (myGroup == null)
                {
                    return(false);
                }
                OPCItem myItem = myGroup.OPCItems.Item(itemID);
                if (myItem == null)
                {
                    return(false);
                }
                myItem.Write(val);
                re = true;
            }
            catch (System.Exception ex)
            {
                re = false;
            }
            return(re);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 初始化OPC服务
        /// </summary>
        public void connectOPC()
        {
            KepServer = new OPCServer();
            try
            {
                if (type == 0)
                {
                    // KepServer.Connect("OPC.SimaticNET", "192.168.48.232");
                    KepServer.Connect("KEPware.KEPServerEx.V6", "192.168.36.113");
                }
                else if (type == 1)
                {
                    KepServer.Connect("OPCServer.WinCC", "192.168.36.135");
                }
                else if (type == 2)
                {
                    KepServer.Connect("OPCServer.WinCC", "192.168.48.135");
                }
                else if (type == 3)
                {
                    KepServer.Connect("OPCServer.WinCC", "192.168.36.125");
                }
                else if (type == 4)
                {
                    KepServer.Connect("OPCServer.WinCC", "192.168.48.125");
                }
                else if (type == 5)
                {
                    //KepServer.Connect("KEPware.KEPServerEx.V5", "192.168.48.232");
                    KepServer.Connect("KEPware.KEPServerEx.V6", "192.168.48.233");
                }
                opc_connected         = true;
                KepGroups             = KepServer.OPCGroups;
                KepGroup              = KepGroups.Add("myGroup");
                KepGroup.IsSubscribed = true;
                KepGroup.DataChange  += Group_DataChange;

                KepEventGroup = KepGroups.Add("myEventGroup");
                KepEventGroup.IsSubscribed = true;

                foreach (var item in listTag)
                {
                    if (item.scanrate > 0)
                    {
                        OPCItem myItem = KepGroup.OPCItems.AddItem(item.name, item.id);
                        myItem.ClientHandle  = item.id;
                        item.itmHandleServer = myItem.ServerHandle;
                    }
                    else
                    {
                        OPCItem myItem = KepEventGroup.OPCItems.AddItem(item.name, item.id);
                        item.itmHandleServer = myItem.ServerHandle;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("初始化OPC服务时,出现错误:" + type + ex.ToString());
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 移除项,注意:此接口目前未能实现,需要继续调试
        /// </summary>
        /// <param name="groupName"></param>
        /// <param name="itemName"></param>
        /// <param name="reStr"></param>
        /// <returns></returns>
        public bool RemoveItem(string groupName, string itemName, out string reStr)
        {
            reStr = "";
            try
            {
                OPCGroup myGroup = GetGroup(groupName);
                if (myGroup == null)
                {
                    reStr = "组:" + groupName + "不存在 ";
                    return(false);
                }
                OPCItems items       = myGroup.OPCItems;
                OPCItem  item        = items.Item(itemName);
                Array    itemHandles = Array.CreateInstance(typeof(int), 1);
                itemHandles.SetValue(item.ServerHandle, 0);
                Array errors = null;// Array.CreateInstance(typeof(long), 10);

                items.Remove((int)1, ref itemHandles, out errors);

                reStr = "移除项:" + itemName + "成功!";
                return(true);
            }
            catch (System.Exception ex)
            {
                reStr = "移除项:" + itemName + "失败,返回异常:" + ex.Message;
                return(false);
            }
        }
Exemplo n.º 12
0
        public override bool Write(string itemName, object state)
        {
            OPCItem item = GetItem(itemName);

            WriteToLog("ItemName:" + itemName + " Value: " + state.ToString());
            return(item.Write(state));
        }
Exemplo n.º 13
0
        private void AddGroupItems()//添加组
        {
            try
            {
                //IList<Model.PZYS_Storage.StorageTag> StorTagList = BusinessLogicLayer.PZYS_Storage.StorageTag.GetAllStorageTagList();
                //itmHandleServer;
                KepItems = KepGroup.OPCItems;
                //MyItems2 = MyGroup2.OPCItems;
                OPCItem[] KepItem = new OPCItem[3];
                //添加item
                KepItem[0] = KepItems.AddItem("Channel_0_User_Defined.Random.Random1", 0); //byte.Sine.Sine1
                KepItem[1] = KepItems.AddItem("Channel_0_User_Defined.Random.Random2", 0);
                KepItem[2] = KepItems.AddItem("Channel_0_User_Defined.Random.Random3", 0); //byte.Sine.Sine1
                // MyItem[1] = MyItems.AddItem("BPJ.Db1.dbw10", 1);//short
                //MyItem[2] = MyItems.AddItem("BPJ.Db16.dbx0", 2);//bool
                //MyItem[3] = MyItems.AddItem("BPJ.Db11.S0", 3);//string
                //移除组内item
                //Array Errors;
                //int[] temp = new int[] { 0, MyItem[3].ServerHandle };
                //Array serverHandle = (Array)temp;
                //MyItems.Remove(1, ref serverHandle, out Errors);
                // MyItem[3] = MyItems.AddItem("BPJ.Db11.S0", 3);//string


                //MyItem2[0] = MyItems2.AddItem("BPJ.Db1.dbb96", 0);//byte
                //MyItem2[1] = MyItems2.AddItem("BPJ.Db1.dbw10", 1);//short
                //MyItem2[2] = MyItems2.AddItem("BPJ.Db16.dbx0", 2);//bool
                //MyItem2[3] = MyItems2.AddItem("BPJ.Db11.S0", 3);//string
            }
            catch (Exception err)
            {
                MessageBox.Show("创建项出现错误:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Exemplo n.º 14
0
 private static void GetTagValue(string tagName)
 {
     try
     {
         readValue = "";
         if (itmHandleClient != 0)
         {
             Array   Errors;
             OPCItem bItem = KepItems.GetOPCItem(itmHandleServer);
             //注:OPC中以1为数组的基数
             int[] temp = new int[2] {
                 0, bItem.ServerHandle
             };
             Array serverHandle = (Array)temp;
             //移除上一次选择的项
             KepItems.Remove(KepItems.Count, ref serverHandle, out Errors);
         }
         itmHandleClient = 12345;
         KepItem         = KepItems.AddItem(tagName, itmHandleClient);
         itmHandleServer = KepItem.ServerHandle;
     }
     catch (Exception err)
     {
         //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。
         itmHandleClient = 0;
         Console.WriteLine("Read value error:" + err.Message);
     }
 }
Exemplo n.º 15
0
        public override void ReadValue(Command command, Action <int, PointValueType, object> onValueReceive)
        {
            int    index  = command.DeviceAddress.IndexOf("|");
            string ip     = command.DeviceAddress.Substring(0, index);
            string progid = command.DeviceAddress.Substring(index + 1);


            OPC.Data.OpcServer opcServer = new OPC.Data.OpcServer();
            opcServer.Connect(progid, ip);

            OPC.Data.OpcGroup group1 = new OPC.Data.OpcGroup("g2", false, 1000, 1000, 0);
            opcServer.OpcGroups.Add(group1);

            int tranid = 0;

            foreach (var point in command.Points)
            {
                OPCItem item = new OPCItem(point, tranid++);
                group1.Items.Add(item);
            }

            var states = group1.Items.GetItemValues();

            foreach (OPCItemState itemState in states)
            {
                pushValue(itemState, onValueReceive);
            }
            opcServer.Disconnect();
        }
Exemplo n.º 16
0
        //public void SetButtonSignal(int station, string control_key, bool value)
        //{
        //    string buttonHashKey = station.ToString() + "-" + control_key;
        //    try
        //    {
        //        this.set_MXDO_Signal(station, control_key, value);
        //    }
        //    catch (Exception ex)
        //    {
        //        this.myLog.LogAlert(AlertType.Error, this.id.ToString(), this.GetType().ToString(), "ResetButtonSignal()",
        //            ex.Message, "system");
        //    }
        //}
        public bool ReadVariableValue(int servHandle)
        {
            bool result = false;

            try
            {
                OPCItem opc_item_s = this.myOPCGroup.OPCItems.GetOPCItem(servHandle);

                short  source    = 0; // OPC_DS_CACHE or OPC_DS_DEVICE
                object value     = null;
                object quality   = null;
                object timestamp = null;

                if (opc_item_s != null)
                {
                    //opc_item_s.Read(source, out value, out quality, out timestamp);
                    value = opc_item_s.Value;

                    result = Convert.ToBoolean(value);
                }
                else
                {
                    this.myLog.LogAlert(AlertType.Error, this.id.ToString(), this.GetType().ToString(), "ReadVariableValue()",
                                        "opc_item_s is null, servHandle = " + servHandle.ToString(), "system");
                }
                return(result);
            }
            catch (Exception ex)
            {
                this.myLog.LogAlert(AlertType.Error, this.id.ToString(), this.GetType().ToString(), "ReadVariableValue()",
                                    ex.Message, "system");
                return(result);
            }
        }
Exemplo n.º 17
0
        private void myOPCItems_Fill(List <VarItem> OPCVariables, OPCItems items)
        {
            for (int i = 0; i < OPCVariables.Count; i++)
            {
                VarItem myVarItem = OPCVariables[i];
                OPCItem myItem    = items.AddItem(myVarItem.name, myVarItem.array_index);

                // Check if the OPC variable consist in OPC server's configuration !!!
                if (myItem == null)
                {
                    this.myLog.LogAlert(AlertType.Error, this.id.ToString(), this.GetType().ToString(), "myOPCItems_Fill()",
                                        "Exception: unknown variable '" + myVarItem.name + "' !!"
                                        , "system");
                    OPCVariables.Remove(OPCVariables[i]);
                }
                else
                {
                    OPCVariables[i].servHandle = myItem.ServerHandle;

                    this.myLog.LogAlert(AlertType.System, this.id.ToString(), this.GetType().ToString(), "myOPCItems_Fill()",
                                        this.OPCServerName + ", myVarItem (name; arr_idx) = "
                                        + myVarItem.name.ToString()
                                        + ", " + myVarItem.array_index.ToString()
                                        + ", myItem.ServerHandle=" + myItem.ServerHandle.ToString()
                                        + ", myItem.Quality=" + myItem.Quality.ToString()
                                        + ", myItem.ItemID=" + myItem.ItemID.ToString()
                                        // + ", myItem.Value=" + myItem.Value.ToString()
                                        , "system"
                                        );
                }
            }
        }
Exemplo n.º 18
0
 public bool AddItem(string groupName, string itemName, out string reStr)
 {
     reStr = "";
     try
     {
         int      itemHandle = 0;
         OPCGroup myGroup    = GetGroup(groupName);
         if (myGroup == null)
         {
             reStr = "添加项:" + itemName + "失败,组名不存在";
             return(false);
         }
         OPCItem item = myGroup.OPCItems.AddItem(itemName, itemHandle);
         if (item == null)
         {
             reStr = "添加项:" + itemName + "失败";
             return(false);
         }
         reStr = groupName + " 添加项:" + itemName + "成功";
         //  Console.WriteLine(reStr);
         return(true);
     }
     catch (System.Exception ex)
     {
         reStr = groupName + "添加项:" + itemName + "失败,返回异常:" + ex.Message;
         return(false);
     }
 }
Exemplo n.º 19
0
        void runme()
        {
            int[] ServerHandle = new int[2]; //

            const int READASYNC_ID  = 1;
            const int WRITEASYNC_ID = 2;

            MyOpcServer = new OPCServer();
            MyOpcServer.Connect("Kepware.KEPServerEX.V6", "127.0.0.1");


            groups                  = MyOpcServer.OPCGroups;
            MyOpcGroup              = MyOpcServer.OPCGroups.Add("MyGroup1");
            MyOpcGroup.IsActive     = true;
            MyOpcGroup.IsSubscribed = true;
            MyOpcGroup.DeadBand     = 0;
            MyOpcGroup.UpdateRate   = 1000;

            MyOpcItem1 = MyOpcGroup.OPCItems.AddItem("通道 1.设备 1.标记 1", 0);
            MyOpcItem2 = MyOpcGroup.OPCItems.AddItem("通道 1.设备 1.TAG1", 1);

            ServerHandle[0] = MyOpcItem1.ServerHandle;
            ServerHandle[1] = MyOpcItem2.ServerHandle;

            MyOpcGroup.AsyncWriteComplete  += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(MyOpcGroup_AsyncWriteComplete);
            MyOpcGroup.AsyncReadComplete   += new DIOPCGroupEvent_AsyncReadCompleteEventHandler(MyOpcGroup_AsyncReadComplete);
            MyOpcGroup.AsyncCancelComplete += new DIOPCGroupEvent_AsyncCancelCompleteEventHandler(MyOpcGroup_AsyncCancelComplete);
            MyOpcGroup.DataChange          += new DIOPCGroupEvent_DataChangeEventHandler(MyOpcGroup_DataChange);
        }
Exemplo n.º 20
0
        /// <summary>
        /// 设置服务器和客户端的句柄对应的点位名
        /// 将点位集合存入对应的服务器和客户端的句柄
        /// </summary>
        /// <param name="bindingData">点位集合</param>
        /// <param name="opcItems"></param>
        /// <param name="opcGroup"></param>
        /// <param name="dic">客户端句柄点位字典</param>
        /// <param name="serviceDic">服务器句柄点位字典</param>
        public void SetServerHandle(List <OpcData> bindingData, OPCItems opcItems,
                                    OPCGroup opcGroup, Dictionary <int, string> dic, Dictionary <int, string> serviceDic)
        {
            for (int i = 0; i < bindingData.Count; i++)
            {
                try
                {
                    OPCItem item = opcItems.AddItem(bindingData[i].OpcName, i);
                    if (item != null)
                    {
                        dic.Add(item.ClientHandle, bindingData[i].OpcName);
                        serviceDic.Add(item.ServerHandle, bindingData[i].OpcName);
                    }
                }
                catch (Exception e)
                {
                    throw;
                }

                foreach (KeyValuePair <int, string> keyValuePair in serviceDic)
                {
                    try
                    {
                        ReadOpcValue(keyValuePair.Key, opcItems, opcGroup, bindingData, serviceDic);
                    }
                    catch (Exception e)
                    {
                        // ignored
                    }
                }
            }
        }
Exemplo n.º 21
0
        public override bool[] WriteValue(Command command)
        {
            int    index  = command.DeviceAddress.IndexOf("|");
            string ip     = command.DeviceAddress.Substring(0, index);
            string progid = command.DeviceAddress.Substring(index + 1);

            OPC.Data.OpcServer opcServer = new OPC.Data.OpcServer();
            opcServer.Connect(progid, ip);

            OPC.Data.OpcGroup group1 = new OPC.Data.OpcGroup("g3", false, 1000, 1000, 0);
            opcServer.OpcGroups.Add(group1);

            int tranid = 0;

            foreach (var point in command.Points)
            {
                OPCItem item = new OPCItem(point, tranid++);
                group1.Items.Add(item);
            }

            bool[] result = new bool[command.Values.Length];

            for (int i = 0; i < command.Values.Length; i++)
            {
                if (command.Values[i] is Newtonsoft.Json.Linq.JArray)
                {
                    var jarray = (Newtonsoft.Json.Linq.JArray)command.Values[i];
                    if (jarray.Count > 0)
                    {
                        try
                        {
                            var newValue = Array.CreateInstance(((Newtonsoft.Json.Linq.JValue)jarray[0]).Value.GetType(), jarray.Count);
                            for (int j = 0; j < jarray.Count; j++)
                            {
                                newValue.SetValue(((Newtonsoft.Json.Linq.JValue)jarray[j]).Value, j);
                            }
                            command.Values[i] = newValue;
                            result[i]         = true;
                        }
                        catch
                        {
                        }
                    }
                    else
                    {
                        result[i] = true;
                    }
                }
                else
                {
                    result[i] = true;
                }
            }

            group1.Items.WriteItemValues(command.Values);
            opcServer.Disconnect();

            return(result);
        }
Exemplo n.º 22
0
        /// <summary>
        /// 创建项
        /// </summary>
        public void AddGroupItems(string ItemID)
        {
            try
            {
                //IList<Model.PZYS_Storage.StorageTag> StorTagList = BusinessLogicLayer.PZYS_Storage.StorageTag.GetAllStorageTagList();
                //itmHandleServer;
                KepItems = KepGroup.OPCItems;
                //MyItems2 = MyGroup2.OPCItems;
                //OPCItem[] KepItem = new OPCItem[3];
                //添加item

                if (Cfg.Main.IsUseConfig)
                {
                    ItemIDArr[0]  = Cfg.Main.ItemIDComplete;
                    ItemIDArr[1]  = Cfg.Main.ItemIDSensorID;
                    ItemIDArr[2]  = Cfg.Main.ItemIDQty;
                    ItemIDArr[3]  = Cfg.Main.ItemIDClear;
                    ItemIDArr[4]  = Cfg.Main.SensorID;
                    ItemIDArr[5]  = Cfg.Main.Press;
                    KepItemArr[0] = KepItems.AddItem(Cfg.Main.ItemIDComplete, 0);
                    KepItemArr[1] = KepItems.AddItem(Cfg.Main.ItemIDSensorID, 1);
                    KepItemArr[2] = KepItems.AddItem(Cfg.Main.ItemIDQty, 2);
                    KepItemArr[3] = KepItems.AddItem(Cfg.Main.ItemIDClear, 3);
                    KepItemArr[4] = KepItems.AddItem(Cfg.Main.SensorID, 4);
                    KepItemArr[5] = KepItems.AddItem(Cfg.Main.Press, 5);
                    ClientHandle  = 6;
                }
                else
                {
                    KepItem = KepItems.AddItem(ItemID, ClientHandle);
                    ClientHandle++;
                }
                //KepItem = KepItems.AddItem("Channel_0_User_Defined.Random.Random1", 0);//byte.Sine.Sine1
                //Console.WriteLine("创建项成功");
                //KepItemArr[0] = KepItems.AddItem("Channel_0_User_Defined.Random.Random2", 1);
                //KepItemArr[1] = KepItems.AddItem("Channel_0_User_Defined.Random.Random3", 2);//byte.Sine.Sine1
                //MyItem[1] = MyItems.AddItem("BPJ.Db1.dbw10", 1);//short
                //MyItem[2] = MyItems.AddItem("BPJ.Db16.dbx0", 2);//bool
                //MyItem[3] = MyItems.AddItem("BPJ.Db11.S0", 3);//string
                //移除组内item
                //Array Errors;
                //int[] temp = new int[] { 0, MyItem[3].ServerHandle };
                //Array serverHandle = (Array)temp;
                //MyItems.Remove(1, ref serverHandle, out Errors);
                //MyItem[3] = MyItems.AddItem("BPJ.Db11.S0", 3);//string


                //MyItem2[0] = MyItems2.AddItem("BPJ.Db1.dbb96", 0);//byte
                //MyItem2[1] = MyItems2.AddItem("BPJ.Db1.dbw10", 1);//short
                //MyItem2[2] = MyItems2.AddItem("BPJ.Db16.dbx0", 2);//bool
                //MyItem2[3] = MyItems2.AddItem("BPJ.Db11.S0", 3);//string
            }
            catch (Exception err)
            {
                Console.WriteLine("创建项出错:" + err.Message);
                Log.TraceError("创建项出错:" + err.Message);
            }
        }
Exemplo n.º 23
0
 private static OPCItem[] AddItem(List <string> item, OPCGroup opcGroup)   //把需要获取的标签点加到group中
 {
     OPCItem[] opcItem = new OPCItem[item.Count];
     for (int i = 0; i < item.Count; i++)
     {
         opcItem[i] = opcGroup.OPCItems.AddItem(item[i], 1);
     }
     return(opcItem);
 }
Exemplo n.º 24
0
        public void InitOPCItem()
        {
            string tag = "";

            try
            {
                for (int i = 0; i < KepTags.Length; i++)
                {
                    tag = KepTags[i];
                    //Logger.logwrite("AddItem KepTags" + i);
                    OPCItem item = KepItems.AddItem(tag, ClientHandle);
                    opcItem.Add(tag, item);
                    ItemValue.Add(tag, "");
                }
                for (int i = 0; i < KepTagsMonitor.Length; i++)
                {
                    tag = KepTagsMonitor[i];
                    //Logger.logwrite("AddItem KepTagsMonitor" + i);
                    OPCItem item = KepItems.AddItem(tag, ClientHandle);
                    opcItemMonitor.Add(tag, item);
                    ItemValueMonitor.Add(tag, "");
                }

                /*
                 * for (int i = 0; i < KepTagsTrack.Length; i++)
                 * {
                 *  tag = KepTagsTrack[i];
                 *  Logger.logwrite("AddItem KepTagsTrack" + i);
                 *  OPCItem item = KepItems.AddItem(tag, ClientHandle);
                 *  opcItemTrack.Add(tag, item);
                 *  ItemValueMonitor.Add(tag, "");
                 * }
                 */

                //opcItem["L2Com.EP1.W_Weight1"].Write(1);
                //object PValue;
                //object PQuality;
                //object PTimeStamp;
                //opcItem["L2Com.EP1.R_Out_Id"].Read(1, out PValue, out PQuality, out PTimeStamp);
                //Int16[] myArray = { 56, 48, 48, 65, 66, 67, 68, 69, 70, 48, 48, 48, 48, 68, 69, 70, 48, 48, 48, 48 };
                //char[] myArray2 = "8001234567890       ".ToCharArray();
                //opcItem["L2Com.EP1.W_Upper_Id2"].Write(PValue);
                //opcItem["L2Com.EP1.W_Upper_Id2"].Write((object)(myArray));
            }
            catch (Exception err)
            {
                string errtxt = "初始化OPCItem出现错误,请检查OPC服务器!" + tag;
                Logger.logwrite(errtxt);
                Logger.logwrite(errtxt, "OPC");
                Logger.logwrite(err.Message, "OPC");
                Console.ReadKey();
                Environment.Exit(0);
            }
        }
Exemplo n.º 25
0
        private OPCItem GetItem(string itemName)
        {
            OPCGroup group = opcServer.Groups.DefaultGroup;
            OPCItem  item  = item = group.Items[itemName];

            if (item == null)
            {
                throw new Exception(string.Format("未能找到名称为'{0}'的OPC项", itemName));
            }
            return((OPCItem)item);
        }
Exemplo n.º 26
0
        public Leaf(Branch Parent, string Name, int ClientHandle, OPCBrowser Browser)
        {
            this._Parent       = Parent;
            this._Name         = Name;
            this._ClientHandle = ClientHandle;

            this._Parent.addLeaf(this);

            this._OPCItem          = this._Parent.OPCGroup.OPCItems.AddItem(Browser.GetItemID(this._Name), this._ClientHandle);
            this._OPCItem.IsActive = true;
        }
Exemplo n.º 27
0
        public static void write(int i, string value)
        {
            if (i > opc_group.OPCItems.Count)
            {
                MessageBox.Show("无法找到标签,写入失败");
                return;
            }
            OPCItem OPC_item = opc_group.OPCItems.Item(i);

            OPC_item.Write(value);
        }
Exemplo n.º 28
0
        ////读取标签值
        private static string[,] readitemvalue()
        {
            OPCItem OPC_item;

            try
            {
                int a = opc_group.OPCItems.Count;
                string[,] itemvalue = new string[a, 6];
                //   if (groupadd == true)
                {
                    for (int i = 1; i < opc_group.OPCItems.Count; i++)
                    {
                        OPC_item = opc_group.OPCItems.Item(i);
                        string strID = OPC_item.ItemID;
                        //if (strID == "CPU224.Input.I00")
                        {
                            object quantity;
                            object time;
                            object dya;
                            OPC_item.Read(1, out dya, out quantity, out time);
                            foreach (var aaa in allservers)
                            {
                                itemvalue[i - 1, 0] = (string)aaa;
                            }
                            itemvalue[i - 1, 1] = strID;
                            itemvalue[i - 1, 2] = quantity.ToString();
                            itemvalue[i - 1, 3] = Convert.ToDateTime(time).AddHours(8).ToString("yyyy-MM-dd HH:mm");
                            itemvalue[i - 1, 4] = dya.ToString();
                            itemvalue[i - 1, 5] = i.ToString();
                        }
                    }
                }
                return(itemvalue);
            }
            catch (Exception ex)
            {
                MessageBox.Show("获取标签值失败\n" + ex.Message);
                OPC_item  = null;
                opc_group = null;
                OPC_server.Disconnect();
                connected   = false;
                groupadd    = false;
                string[,] a = new string[1, 6];
                a[0, 0]     = "";
                a[0, 1]     = "";
                a[0, 2]     = "";
                a[0, 3]     = "";
                a[0, 4]     = "";
                a[0, 5]     = "";
                return(a);
            }
        }
Exemplo n.º 29
0
        /// <summary>
        /// 添加监控点
        /// </summary>
        /// <param name="tagName"></param>
        public void AddTag()
        {
            try
            {
                monitorItemYT  = opcGroup.OPCItems.AddItem(configInfo.MonitorTagYT, 1);
                validTagFlagYT = true;
                if (sendSMSFlagYT == true)
                {
                    string smsContent = string.Format("烟台监控点位值恢复有效.");
                    SendSmsMessage(smsContent);
                }
                sendSMSFlagYT = false;
            }
            catch
            {
                validTagFlagYT = false;
                WriteMsg("烟台点位名有误,无法监控,请确认");

                if (sendSMSFlagYT == false)
                {
                    string smsContent = string.Format("烟台监控点位值无效.");
                    SendSmsMessage(smsContent);
                    sendSMSFlagYT = true;
                }
            }


            try
            {
                monitorItemNB  = opcGroup.OPCItems.AddItem(configInfo.MonitorTagNB, 2);
                validTagFlagNB = true;
                if (sendSMSFlagNB == true)
                {
                    string smsContent = string.Format("宁波监控点位值恢复有效.");
                    SendSmsMessage(smsContent);
                }
                sendSMSFlagNB = false;
            }
            catch
            {
                validTagFlagNB = false;
                WriteMsg("宁波点位名有误,无法监控,请确认");
                if (sendSMSFlagNB == false)
                {
                    string smsContent = string.Format("宁波监控点位值无效.");
                    SendSmsMessage(smsContent);
                    sendSMSFlagNB = true;
                }
            }

            WriteMsg("成功添加监控点");
        }
Exemplo n.º 30
0
        /// <summary>
        /// Инициализация. Настройка группы, установка асинхронного метода чтения данных для указанного тега.
        /// </summary>
        protected override void DoInitialize()
        {
            try {
                Logger.Debug("Инициализация");
                var server = opcConnection.GetOpcServer();
                opcGroup = server.OPCGroups.Add(Guid.NewGuid().ToString());
                opcItem = opcGroup.OPCItems.AddItem(activationItemName, 0);
                opcGroup.UpdateRate = 100;
                opcGroup.IsActive = true;
                opcGroup.IsSubscribed = true;
                opcGroup.DataChange += ActivationItemValueChanged;

                dataReader.Initialize();

                ReadItemFirstTime();
            }
            catch (Exception ex) {
                opcConnection.ProcessError(ex);
            }
        }
Exemplo n.º 31
0
Arquivo: LiveBit.cs Projeto: desla/AS
        /// <summary>
        /// Инициализация.
        /// </summary>
        protected override void DoInitialize()
        {
            try {
                Logger.Debug("Инициализация LiveBit...");
                var server = opcConnection.GetOpcServer();
                inGroup = server.OPCGroups.Add(Guid.NewGuid().ToString());
                outGroup = server.OPCGroups.Add(Guid.NewGuid().ToString());
                inItem = inGroup.OPCItems.AddItem(topicName + ITEMID_LIVEBIT_IN, 0);
                outItem = outGroup.OPCItems.AddItem(topicName + ITEMID_LIVEBIT_OUT, 0);

                outGroup.UpdateRate = 100;
                outGroup.IsActive = true;
                outGroup.IsSubscribed = true;
                outGroup.DataChange += OutDataChanged;

                liveBitTestThread = new Thread(LiveBitTest);
                liveBitTestThread.Start();

                Logger.Debug("Инициализация LiveBit завершена.");
            }
            catch (Exception ex) {
                opcConnection.ProcessError(ex);
            }
        }
Exemplo n.º 32
0
        public void Activate()
        {
            if (IsActive) {
                throw new OpcValueException("Двойная активация OPC тега: " + Name);
            }

            if (string.IsNullOrEmpty(Name)) {
                throw new OpcValueException("Имя OPC параметра не задано.");
            }

            if (server.ServerState != (int) OPCServerState.OPCRunning) {
                throw new OpcValueException(
                    "Ошибка при активации тега: OPC сервер не подключен.");
            }

            GroupName = Guid.NewGuid().ToString();
            opcGroup = server.OPCGroups.Add(GroupName);
            opcItem = opcGroup.OPCItems.AddItem(Name, opcGroup.ClientHandle);

            if (isListenValueChanging) {
                opcGroup.DataChange += ValueChanged;
                opcGroup.UpdateRate = UpdateRate;
                opcGroup.IsActive = true;
                opcGroup.IsSubscribed = true;
            }

            IsActive = true;
        }
Exemplo n.º 33
0
        //列表
        private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                if (_itmHandleClient != 0)
                {
                    TextBox3.Text = "";
                    Array errors;
                    OPCItem bItem = _kepItems.GetOPCItem(_itmHandleServer);
                    //注: OPC中以1为数组的基数
                    int[] temp = new int[] { 0, bItem.ServerHandle };
                    Array serverHandle = temp;
                    //移除上一次选择的项
                    _kepItems.Remove(_kepItems.Count, ref serverHandle, out errors);

                }
                _itmHandleClient = 1234;
                _kepItem = _kepItems.AddItem(ListBox1.SelectedItem.ToString(), _itmHandleClient);
                TextBox2.Text = Convert.ToString(ListBox1.SelectedItem);
                _itmHandleServer = _kepItem.ServerHandle;
            }
            catch (Exception err)
            {
                //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理
                _itmHandleClient = 0;
                TextBox3.Text = "Error ox";
                MessageBox.Show("此项为系统保留项:" + err.Message, "提示信息");
            }
        }
Exemplo n.º 34
0
 //读方法
 void Read(string u1,int u2)
 {
     _kepItem = _kepItems.AddItem(u1, u2);
     _itmHandleServer = _kepItem.ServerHandle;
     //OPCItem bItem = _kepItems.GetOPCItem(_itmHandleServer);
     var bItem = _kepItems.GetOPCItem(_itmHandleServer);
     var temp = new[] { 0, bItem.ServerHandle };
     //Array serverHandles = (Array)temp;
     var serverHandles = (Array)temp;
     Array errors;
     int cancelId;
     _kepGroup.AsyncRead(1, ref serverHandles, out errors, 2009, out cancelId);
     GC.Collect();
 }
Exemplo n.º 35
0
 // 写函数
 public void Write(string m1,string m2)
 {
     _itmHandleClient = 1234;
     _kepItem = _kepItems.AddItem(m1, _itmHandleClient);
     _itmHandleServer = _kepItem.ServerHandle;
     OPCItem bItem = _kepItems.GetOPCItem(_itmHandleServer);
     int[] temp = new int[] { 0, bItem.ServerHandle };
     Array serverHandles = temp;
     object[] valueTemp = new object[] { "", m2 };
     Array values = valueTemp;
     Array errors;
     int cancelId;
     _kepGroup.AsyncWrite(1, ref serverHandles, ref values, out errors, 2009, out cancelId);
     GC.Collect();
 }
Exemplo n.º 36
-1
        ///   <summary>
        ///   初始化OPC服务器
        ///   </summary>
        void InitOpc()
        {
            connected  = false;
            connecteds = false;
            isfirstuse = true;
            try
            {
                string severname = "KEPware.KEPServerEx.V4";
                string groupname = "S7-200.S7-200-1";
                string outname   = "S7-200.S7-200-1.OUT";
                string inname    = "S7-200.S7-200-1.IN";
                string chuanname = "S7-200.S7-200-1.CHUAN";
                string confname  = "S7-200.S7-200-1.CONF";

                myserver = new OPCServer();
                myserver.Connect(severname);
                mygroups             = myserver.OPCGroups;
                mygroup              = mygroups.Add(groupname);
                mygroup.DataChange  += new DIOPCGroupEvent_DataChangeEventHandler(ObjOPCGroup_DataChange);
                myitems              = mygroup.OPCItems;
                item_out             = myitems.AddItem(outname, 1);//opcitem标识,1out,2config,3in,4chuan
                item_conf            = myitems.AddItem(confname, 2);
                item_in              = myitems.AddItem(inname.ToString(), 3);
                item_chuan           = myitems.AddItem(chuanname.ToString(), 4);
                mygroup.UpdateRate   = 10;
                mygroup.IsActive     = true;
                mygroup.IsSubscribed = true;
                connected            = true;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());//如果连接不上,说明运行库有问题,关了软件重新安装必要组件再运行
            }
        }