Ejemplo n.º 1
1
 /// <summary>
 /// 选择列表项时处理的事情
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
 {
     try
     {
         if (itmHandleClient != 0)
         {
             this.txtTagValue.Text   = "";
             this.txtQualities.Text  = "";
             this.txtTimeStamps.Text = "";
             this.txtDataType.Text   = "";
             int     sd = KepItems.Count;
             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 = 0;
         //for (int i = 0; i < 5; i++)
         //{
         //    KepItem = KepItems.AddItem(listBox1.Items[i].ToString(), itmHandleClient);
         //    itmHandleClient += 1;
         //}
         //KepItem = KepItems.AddItem(listBoxItems.SelectedItem.ToString(), itmHandleClient);
         KepItem = KepItems.AddItem("Channel_0_User_Defined.User.User1", itmHandleClient);
         KepItems.AddItem("Channel_0_User_Defined.User.User2", 1235);
         //数据类型
         txtDataType.Text = Enum.GetName(typeof(CanonicalDataTypes), KepItem.CanonicalDataType);
         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, "提示信息");
     }
 }
        private void AddGroupItems()//添加组
        {
            //itmHandleServer;
            MyItems  = MyGroup.OPCItems;
            MyItems2 = MyGroup2.OPCItems;

            //添加item
            MyItem[0] = MyItems.AddItem("BPJ.Db1.dbb96", 0); //byte
            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
        }
Ejemplo n.º 3
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);
            }
        }
Ejemplo 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);
            }
        }
Ejemplo n.º 5
0
 public void Init()
 {
     MyServer = new OPCServer();
     //初始化item数组
     MyItem = new OPCItem[4];
     MyServer.Connect("KEPware.KEPServerEx.V4", "127.0.0.1");//连接本地服务器:服务器名+主机名或IP
     if (MyServer.ServerState == (int)OPCServerState.OPCRunning)
     {
         Console.WriteLine("已连接到:{0}", MyServer.ServerName);
         Console.WriteLine("几个组:{0}", MyServer.OPCGroups.Count);
     }
     else
     {
         //这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档
         string errMessage = MyServer.ServerState.ToString();
         throw new Exception(errMessage);
     }
     MyGroups             = MyServer.OPCGroups;
     MyGroup              = MyServer.OPCGroups.Add("GE.GE330.GEPLC");
     MyGroup.UpdateRate   = 250;
     MyGroup.IsActive     = true;
     MyGroup.IsSubscribed = true;
     //MyGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(GroupDataChange);
     MyItems = MyGroup.OPCItems;
     //添加item
     MyItem[0] = MyItems.AddItem("GE.GE330.GEPLC.M8001", 0);    //bool-buildable
     MyItem[1] = MyItems.AddItem("GE.GE330.GEPLC.M801", 1);     //bool-
     MyItem[2] = MyItems.AddItem("GE.GE330.GEPLC.M802", 2);     //bool-
     MyItem[3] = MyItems.AddItem("GE.GE330.GEPLC.PLC_PC_S", 3); //string
 }
Ejemplo n.º 6
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);
            }
        }
Ejemplo n.º 7
0
        //添加数据项
        private void AddGroupItems()
        {
            //itmHandleServer;
            MyItems = MyGroup.OPCItems;
            MyItems2 = MyGroup2.OPCItems;

            //添加item
            MyItem[0] = MyItems.AddItem("[" + strTopic + "]int1", 0);//[opc1]int1", 0);//int
            MyItem[1] = MyItems.AddItem("[" + strTopic + "]dint1", 1);//dint
            MyItem[2] = MyItems.AddItem("[" + strTopic + "]dint2", 1);//dint

            MyItem2[0] = MyItems2.AddItem("[" + strTopic + "]int2", 0);//int
            MyItem2[1] = MyItems2.AddItem("[" + strTopic + "]sint1", 1);//byte
        }
Ejemplo n.º 8
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();
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 选择列表项时处理的事情
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void SelectedItem(List <string> itemName)
        {
            try
            {
                if (itmHandleClient != 0)
                {
                    TagValue   = "";
                    Qualities  = "";
                    TimeStamps = "";

                    //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;
                foreach (string name in itemName)
                {
                    KepItem = KepItems.AddItem(name, itmHandleClient);
                    if (KepItem != null)
                    {
                        itmHandleServer = KepItem.ServerHandle;
                        TagPath         = name;
                        QueryTime       = DateTime.Now;
                        QueryTimeBool   = true;
                        break;
                    }
                }
                if (KepItem == null)
                {
                    itmHandleClient = 0;//如果依然为空则说明没有添加成功,则itmHandleClient保持为0
                }
            }
            catch (Exception)
            {
                //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。
                itmHandleClient = 0;
                TagValue        = "Error ox";
                Qualities       = "Error ox";
                TimeStamps      = "Error ox";
                //MessageBox.Show("保留项1错误\n" + err);
            }
        }
Ejemplo n.º 10
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);
     }
 }
Ejemplo n.º 11
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
                    }
                }
            }
        }
Ejemplo n.º 12
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"
                                        );
                }
            }
        }
Ejemplo n.º 13
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, "提示信息");
            }
        }
Ejemplo n.º 14
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;
            }
        }
Ejemplo n.º 15
0
 public bool AddItem(string itemName)
 {
     try
     {
         opcItem = opcItems.AddItem(itemName, opcItems.Count + 1);
         Console.WriteLine(opcItems.Count);
         OpcDataItems.Add(new OPCDataItem {
             ItemName = itemName, ItemHandle = opcItems.Count
         });
     }
     catch
     {
         return(false);
     }
     return(true);
 }
Ejemplo n.º 16
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);
            }
        }
Ejemplo n.º 17
0
        //初始化OPC行
        static void InitItems()
        {
            OPCGroup group = _opcServer.OPCGroups.GetOPCGroup(groupName);

            OPCItems items = group.OPCItems;

            OPCItem a = items.AddItem(itemID1, 1);
            OPCItem b = items.AddItem(itemID2, 2);


            a = items.Item(2);

            b = items.Item(1);
            int c = 0;

            c = a.ClientHandle;
            c = b.ClientHandle;
            c = 0;
        }
Ejemplo n.º 18
0
        private void AddGroupItems()
        {
            opcItems = opcGroup.OPCItems;

            opcItem = new OPCItem[ItemList.Count];


            for (int i = 0; i < ItemList.Count; i++)
            {
                opcItem[i] = opcItems.AddItem(ItemList[i].name, ItemList[i].handler);
            }
        }
Ejemplo n.º 19
0
        public string AsyncWriteTagValue(string tag, string writeStr)
        {
            try
            {
                Array Errors;
                if (itmHandleClientWriteData != 0)
                {
                    OPCItem bItem = KepItemsWrite.GetOPCItem(itmHandleServerWriteData);
                    //注:OPC中以1为数组的基数
                    int[] temp = new int[2] {
                        0, bItem.ServerHandle
                    };
                    Array serverHandle = (Array)temp;
                    //移除上一次选择的项
                    KepItemsWrite.Remove(KepItemsWrite.Count, ref serverHandle, out Errors);
                }
                itmHandleClientWriteData = Array.IndexOf(tagList, tag) + 1;
                KepItemWrite             = KepItemsWrite.AddItem(tag, itmHandleClientWriteData);
                itmHandleServerWriteData = KepItemWrite.ServerHandle;

                OPCItem bItem_ = KepItemsWrite.GetOPCItem(itmHandleServerWriteData);
                int[]   temp_  = new int[2] {
                    0, bItem_.ServerHandle
                };
                Array    serverHandles = (Array)temp_;
                object[] valueTemp     = new object[2] {
                    "", writeStr
                };
                Array values = (Array)valueTemp;
                int   cancelID;
                KepGroupWriteData.AsyncWrite(1, ref serverHandles, ref values, out Errors, 2009, out cancelID);
                GC.Collect();
                return("OK");
            }
            catch (Exception err)
            {
                return(err.Message);
            }
        }
Ejemplo n.º 20
0
 public OpcReadAndWrite(List <DSW_ParamTableModel> list)
     : base(list)
 {
     CreateGroup();
     opcItem  = new OPCAutomation.OPCItem[ModelList.Count];
     objItems = objGroup.OPCItems;
     myDcWrite.Clear();
     for (int i = 0; i < ModelList.Count; i++)
     {
         opcItem[i] = objItems.AddItem(ModelList[i].KepAddress, i);
         myDcWrite.Add(ModelList[i].KepAddress, opcItem[i]);
     }
 }
Ejemplo n.º 21
0
 public OpcReadAndWrite(ParamClass PC)
     : base(PC)
 {
     CreateGroup();
     opcItem  = new OPCAutomation.OPCItem[PC.ParamList.Count];
     objItems = objGroup.OPCItems;
     myDc.Clear();
     for (int i = 0; i < PC.ParamList.Count; i++)
     {
         opcItem[i] = objItems.AddItem(PC.ParamList[i].KepAddress, i);
         myDc.Add(PC.ParamList[i].LabelName, opcItem[i]);
     }
 }
Ejemplo n.º 22
0
 public void AddItems(string[] itemNamesAdded)
 {
     for (int i = 0; i < itemNamesAdded.Length; i++)
     {
         this.itemNames.Add(itemNamesAdded[i]);
         itemValues.Add(itemNamesAdded[i], "");
     }
     for (int i = 0; i < itemNamesAdded.Length; i++)
     {
         itemHandleClient.Add(itemHandleClient.Count != 0 ? itemHandleClient[itemHandleClient.Count - 1] + 1 : 1);
         opcItem = opcItems.AddItem(itemNamesAdded[i], itemHandleClient[itemHandleClient.Count - 1]);
         itemHandleServer.Add(opcItem.ServerHandle);
     }
 }
Ejemplo n.º 23
0
        public string AsyncReadTagValue(string tag)
        {
            try
            {
                Array Errors;
                if (itmHandleClientReadData != 0)
                {
                    OPCItem bItem = KepItemsRead.GetOPCItem(itmHandleServerReadData);
                    //注:OPC中以1为数组的基数
                    int[] temp = new int[2] {
                        0, bItem.ServerHandle
                    };
                    Array serverHandle = (Array)temp;
                    //移除上一次选择的项
                    KepItemsRead.Remove(KepItemsRead.Count, ref serverHandle, out Errors);
                }
                itmHandleClientReadData = Array.IndexOf(tagList, tag) + 1;
                KepItemRead             = KepItemsRead.AddItem(tag, itmHandleClientReadData);
                itmHandleServerReadData = KepItemRead.ServerHandle;

                OPCItem bItem_ = KepItemsRead.GetOPCItem(itmHandleServerReadData);
                int[]   temp_  = new int[2] {
                    0, bItem_.ServerHandle
                };
                Array serverHandles = (Array)temp_;
                int   cancelID;
                //KepGroupReadData.AsyncWrite(1, ref serverHandles, ref values, out Errors, 2009, out cancelID);
                KepGroupReadData.AsyncRead(1, ref serverHandles, out Errors, 2018, out cancelID);
                GC.Collect();
                return("OK");
            }
            catch (Exception err)
            {
                return(err.Message);
            }
        }
Ejemplo n.º 24
0
        /// <summary>
        /// 根据列表中选中的当前标签,定位到需要发送数据的标签
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSetItem_Click(object sender, EventArgs e)
        {
            try
            {
                /**
                 * 需要注意,不同的OPC服务器的标签格式也是不同的
                 * 测试时,使用的是ICONICS Simulator OPC Server,标签格式如:Textual.Memory
                 * 生产环境时,使用的是SimaticNet_V13Sp1,标签格式如:S7:[S7_Connection_1]MReal120
                 * **/

                //根据ListBox选中的标签,处理得到分组名称
                string groupName = lstItems.Text;

                //实例化组
                myGroups = myServer.OPCGroups;
                myGroup  = myGroups.Add(groupName);

                //设置缺省的组属性
                myServer.OPCGroups.DefaultGroupIsActive = true;
                myServer.OPCGroups.DefaultGroupDeadband = 0;
                myGroup.UpdateRate   = 250;
                myGroup.IsActive     = true;
                myGroup.IsSubscribed = true;

                //定位需要发送数据的目标项
                myItems = myGroup.OPCItems;

                //实例化组内标签
                myItemArray = new OPCItem[1];

                //填充项目组
                myItemArray[0] = myItems.AddItem(lstItems.Text, 1);

                //获取服务端句柄
                itmHandleServer = myItemArray[0].ServerHandle;

                //监听组内数据变化
                myGroup.DataChange         += new DIOPCGroupEvent_DataChangeEventHandler(myGroup_DataChange);
                myGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(myGroup_AsyncWriteComplete);

                //开启发送参数按钮
                btnWrite.Enabled = true;
            }
            catch (Exception err)
            {
                MessageBox.Show("创建组出现错误:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Ejemplo n.º 25
0
        void CreateReadGroup()
        {
            opcGroups = opcServer.OPCGroups;
            opcGroup  = opcGroups.Add("PLCReadAddress");
            SetGroupProperty();

            opcItems = opcGroup.OPCItems;
            int i = 0;

            foreach (string address in opc_address)
            {
                opcItem[i] = opcItems.AddItem(address, i);
                i++;
            }
            //opcGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(opcGroup_DataChange);
        }
Ejemplo n.º 26
0
        public ItemReadSync(ParamClass PC)
        {
            CreateGroup();
            opcItem  = new OPCAutomation.OPCItem[PC.ParamList.Count];
            objItems = objGroup.OPCItems;
            for (int i = 0; i < PC.ParamList.Count; i++)
            {
                opcItem[i] = objItems.AddItem(PC.ParamList[i].KepAddress, i);
            }

            paramClass = PC;

            tTimer          = new System.Timers.Timer(100);
            tTimer.Elapsed += SyncRead;
            tTimer.Start();
        }
Ejemplo n.º 27
0
 public void AddItem(string itemName)
 {
     try
     {
         KepItems = KepGroup.OPCItems;
         KepItem  = KepItems.AddItem(itemName, KepItemServerHandles.Count);
         OpcDataItems.Add(new OPCDataItem {
             ItemName = itemName, ItemHandle = KepItemServerHandles.Count
         });
         KepItemServerHandles.Add(KepItem.ServerHandle);
         KeyItemServerHandles = KepItemServerHandles.ToArray();
     }
     catch (Exception ex)
     {
         SimpleLogHelper.Instance.WriteLog(LogType.Error, ex);
     }
 }
Ejemplo n.º 28
0
            //创建项
            private void CreateItems(string[] point)
            {
                _tagValue = new double[point.Length];
                int i;

                for (i = 0; i < point.Length; i++)
                {
                    try
                    {
                        _kepItem = _kepItems.AddItem(point[i], i);
                        _opcItemDic.Add(point[i].Substring(point[i].LastIndexOf('.') + 1, point[i].Length - point[i].LastIndexOf('.') - 1), _kepItem.ServerHandle);
                    }
                    catch (Exception ex)
                    {
                        LogHelper.WriteLog(typeof(OpcClient), ex.StackTrace + ex.Message);
                    }
                }
            }
Ejemplo n.º 29
0
 public void AddItems(List <string> ls)
 {
     try {
         itmHandleClient = 1000;
         foreach (string itm in ls)
         {
             itmHandleClient++;
             PxItem          = PxItems.AddItem(itm, itmHandleClient);
             itmHandleServer = PxItem.ServerHandle;
             OPCItemDic.Add(itm, PxItem);
         }
     }
     catch (Exception err) {
         //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。
         itmHandleClient = 0;
         Debug.WriteLine("此项为系统保留项:" + err.Message);
     }
 }
Ejemplo n.º 30
0
        public OPCItem[] AddGroupItems(OPCGroup group, string filename)
        {
            OPCItems             Items = group.OPCItems;
            IEnumerable <string> lines = File.ReadAllLines(filename);
            int itemsCount             = lines.Count();
            int linenum = 0;

            OPCItem[] item = new OPCItem[itemsCount];
            foreach (string line in lines)
            {
                string[] segs      = line.Split('-');
                string   strName   = segs[0].ToString();
                string   strHandle = segs[1].ToString();
                item[linenum] = Items.AddItem(strName, Int32.Parse(strHandle));
                linenum++;
            }
            return(item);         //返回的第一个值为OPCITEM数组
        }
Ejemplo n.º 31
0
        public void InitPt(int nNum, numInf[] nrst, int sNum, strInf[] srst)
        {
            try
            {
                MyItems = MyGroup.OPCItems;
                MyItem = new OPCItem[nNum + sNum];
                numinf = new numInf[nNum];
                strinf = new strInf[sNum];
                numNum = nNum;
                strNum = sNum;

                int i = 0;
                foreach (numInf nn in nrst)
                {
                    try
                    {
                        MyItem[i] = MyItems.AddItem(nn.srcId, i);//byte
                        i++;
                    }
                    catch
                    {
                        try
                        {
                            sw = File.AppendText(logfile);
                            sw.WriteLine("初始化点" + nn.srcId + "失败!");
                            sw.Close();
                        }
                        catch { }
                        //MyItem[i] = MyItems.AddItem(nrst[i - 1].srcId, i);
                        MyItem[i] = MyItem[i - 1];
                        i++;
                        continue;
                    }
                }
                foreach (strInf ss in srst)
                {
                    try
                    {
                        MyItem[i] = MyItems.AddItem(ss.srcId, i);//byte
                        i++;
                    }
                    catch
                    {
                        try
                        {
                            sw = File.AppendText(logfile);
                            sw.WriteLine("初始化点" + ss.srcId + "失败!");
                            sw.Close();
                        }
                        catch { }
                        MyItem[i] = MyItem[i - 1];
                        i++;
                        continue;
                    }
                }

                object ItemValuestemp; object Qualities; object TimeStamps;//同步读的临时变量:值、质量、时间戳
                for (int ii = 0; ii < nNum + sNum; ii++)
                {
                    MyItem[ii].Read(1, out ItemValuestemp, out Qualities, out TimeStamps);//同步读,第一个参数只能为1或2
                    if (ii < nNum)
                    {
                        numinf[ii].val = Convert.ToSingle(ItemValuestemp);//转换后获取item值
                        numinf[ii].dtm = Convert.ToDateTime(TimeStamps);
                    }
                    else
                    {
                        strinf[ii - numNum].val = Convert.ToString(ItemValuestemp);//转换后获取item值
                        strinf[ii - numNum].dtm = Convert.ToDateTime(TimeStamps);
                    }
                }

                MyGroup.IsSubscribed = true;//使用订阅功能,即可以异步,默认false
                try
                {
                    sw = File.AppendText(logfile);
                    sw.WriteLine("初始化点成功!");
                    sw.Close();
                }
                catch { }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
Ejemplo n.º 32
-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());//如果连接不上,说明运行库有问题,关了软件重新安装必要组件再运行
            }
        }