コード例 #1
0
ファイル: OPCClient.cs プロジェクト: simple555a/OTlinkIT
        public void WriteData(string[] itemName, int[] value)
        {
            groupWrite.RemoveItems(groupWrite.Items);

            List <Item>      writeList = new List <Item>();
            List <ItemValue> valueList = new List <ItemValue>();

            for (int x = 0; x < itemName.Length; x++)
            {
                Item itemToWrite = new Item();
                itemToWrite.ItemName = itemName[x];
                ItemValue itemValue = new ItemValue(itemToWrite);
                itemValue.Value = value[x];
                writeList.Add(itemToWrite);
                valueList.Add(itemValue);
            }



            //IMPORTANT:
            //#1: assign the item to the group so the items gets a ServerHandle
            groupWrite.AddItems(writeList.ToArray());
            // #2: assign the server handle to the ItemValue
            for (int i = 0; i < valueList.Count; i++)
            {
                valueList[i].ServerHandle = groupWrite.Items[i].ServerHandle;
            }
            // #3: write
            groupWrite.Write(valueList.ToArray());
        }
コード例 #2
0
ファイル: OpcClient.cs プロジェクト: simple555a/OpcLib.Net
        /// <summary>
        /// Add items (according to "itemList" parameter) into OPC.Subscription
        /// </summary>
        /// <param name="itemList"></param>
        /// <param name="updateRate"></param>
        /// <returns></returns>
        public bool AddItems(Opc.Da.Item[] itemList, int updateRate = 0)
        {
            var state = new Opc.Da.SubscriptionState();

            try
            {
                // Remove items
                if (Items != null)
                {
                    Subscription.RemoveItems(Items);
                }

                state.Active = false;
                Subscription.ModifyState((int)Opc.Da.StateMask.Active, state);

                state.UpdateRate = updateRate > 0 ? updateRate : 1000;
                Subscription.ModifyState((int)Opc.Da.StateMask.UpdateRate, state);

                foreach (var item in itemList)
                {
                    item.ClientHandle = Guid.NewGuid().ToString();
                }

                Items   = Subscription.AddItems(itemList);
                Advised = false;
                return(true);
            }
            catch (Exception e)
            {
                //MessageBox.Show(ex.Message);
                throw e;
            }
        }
コード例 #3
0
        private void OperationWriteOPC()
        {
            /*
             * Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[3];
             * OPC_ItemID[0] = new Opc.Da.Item();
             * OPC_ItemID[0].ItemName = BrakePressTag_OPC + "HMI_Operation_One_PB.VALUE";
             * OPC_ItemID[1] = new Opc.Da.Item();
             * OPC_ItemID[1].ItemName = BrakePressTag_OPC + "HMI_Operation_Two_PB.VALUE";
             * OPC_ItemID[2] = new Opc.Da.Item();
             * OPC_ItemID[2].ItemName = BrakePressTag_OPC + "HMI_Operation_Three_PB.VALUE";
             * OPC_ItemID = OperationSelection_Write.AddItems(OPC_ItemID);
             */

            Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[3];
            OPC_ItemID[0]          = new Opc.Da.Item();
            OPC_ItemID[0].ItemName = BrakePressTag_OPC + "HMI_Operation_One_PB";
            OPC_ItemID[1]          = new Opc.Da.Item();
            OPC_ItemID[1].ItemName = BrakePressTag_OPC + "HMI_Operation_Two_PB";
            OPC_ItemID[2]          = new Opc.Da.Item();
            OPC_ItemID[2].ItemName = BrakePressTag_OPC + "HMI_Operation_Three_PB";
            OPC_ItemID             = OperationSelection_Write.AddItems(OPC_ItemID);

            Opc.Da.ItemValue[] ItemID_OPCValue = new Opc.Da.ItemValue[3];
            ItemID_OPCValue[0] = new Opc.Da.ItemValue();
            ItemID_OPCValue[1] = new Opc.Da.ItemValue();
            ItemID_OPCValue[2] = new Opc.Da.ItemValue();

            switch (SelectedOperation)
            {
            case 1:     // Operation #1
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 1;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 0;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 0;
                break;

            case 2:     // Operation #2
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 0;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 1;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 0;
                break;

            case 3:     // Operation #3
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 0;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 0;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 1;
                break;
            }

            Opc.IRequest OPCRequest;
            OperationSelection_Write.Write(ItemID_OPCValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
        }
コード例 #4
0
ファイル: DaPoller.cs プロジェクト: trouble4you/WebSphere
        public override bool WriteTag(TagId tag, string value)
        {
            try
            {
                groupWrite.RemoveItems(groupWrite.Items);
                List <Item>      writeList = new List <Item>();
                List <ItemValue> valueList = new List <ItemValue>();

                Item itemToWrite = new Item();
                itemToWrite.ItemName = tag.TagName;
                ItemValue itemValue = new ItemValue(itemToWrite);
                itemValue.Value = value;

                writeList.Add(itemToWrite);
                valueList.Add(itemValue);
                groupWrite.AddItems(writeList.ToArray());
                for (int i = 0; i < valueList.Count; i++)
                {
                    valueList[i].ServerHandle = groupWrite.Items[i].ServerHandle;
                }

                groupWrite.Write(valueList.ToArray());
                return(true);
            }
            catch (Exception ex)
            {
                logger.Logged("Error", "Не удалось записать значние OPC DA сервера {" + tag.TagName + "[" + value + "]}: {" + ex.Message + "}", "OpcDaPoller", "WriteTag");
                return(false);
            }
        }
コード例 #5
0
        private void WriteComponentThree_OPC()
        {
            Opc.Da.Item[] OPC_CompThreeWrite = new Opc.Da.Item[4];
            OPC_CompThreeWrite[0]          = new Opc.Da.Item();
            OPC_CompThreeWrite[0].ItemName = SpotWeld_Tag_Name + "HMI_Operation_One_PB";
            OPC_CompThreeWrite[1]          = new Opc.Da.Item();
            OPC_CompThreeWrite[1].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Two_PB";
            OPC_CompThreeWrite[2]          = new Opc.Da.Item();
            OPC_CompThreeWrite[2].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Three_PB";
            OPC_CompThreeWrite[3]          = new Opc.Da.Item();
            OPC_CompThreeWrite[3].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Four_PB";
            OPC_CompThreeWrite             = GroupWriteCompThree.AddItems(OPC_CompThreeWrite);

            Opc.Da.ItemValue[] WriteCompThreeValue = new Opc.Da.ItemValue[4];
            WriteCompThreeValue[0] = new Opc.Da.ItemValue();
            WriteCompThreeValue[0].ServerHandle = GroupWriteCompThree.Items[0].ServerHandle;
            WriteCompThreeValue[0].Value        = 0;
            WriteCompThreeValue[1] = new Opc.Da.ItemValue();
            WriteCompThreeValue[1].ServerHandle = GroupWriteCompThree.Items[1].ServerHandle;
            WriteCompThreeValue[1].Value        = 0;
            WriteCompThreeValue[2] = new Opc.Da.ItemValue();
            WriteCompThreeValue[2].ServerHandle = GroupWriteCompThree.Items[2].ServerHandle;
            WriteCompThreeValue[2].Value        = 1;
            WriteCompThreeValue[3] = new Opc.Da.ItemValue();
            WriteCompThreeValue[3].ServerHandle = GroupWriteCompThree.Items[3].ServerHandle;
            WriteCompThreeValue[3].Value        = 0;

            Opc.IRequest req;
            GroupWriteCompThree.Write(WriteCompThreeValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out req);
        }
コード例 #6
0
        // Add Items To Group Read
        private void SensorRead_OPC()
        {
            List <Item> OPC_ItemsList = new List <Item>();

            Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[9];
            OPC_ItemID[0]          = new Opc.Da.Item();
            OPC_ItemID[0].ItemName = SpotWeld_Tag_Name + "HMI_PROBE_VALUE";
            OPC_ItemsList.Add(OPC_ItemID[0]);
            OPC_ItemID[1]          = new Opc.Da.Item();
            OPC_ItemID[1].ItemName = SpotWeld_Tag_Name + "TARGET_TRAVEL_VALUE";
            OPC_ItemsList.Add(OPC_ItemID[1]);
            OPC_ItemID[2]          = new Opc.Da.Item();
            OPC_ItemID[2].ItemName = SpotWeld_Tag_Name + "MULTI_COMPONENT_TARGET2";
            OPC_ItemsList.Add(OPC_ItemID[2]);
            OPC_ItemID[3]          = new Opc.Da.Item();
            OPC_ItemID[3].ItemName = SpotWeld_Tag_Name + "MULTI_COMPONENT_TARGET3";
            OPC_ItemsList.Add(OPC_ItemID[3]);
            OPC_ItemID[4]          = new Opc.Da.Item();
            OPC_ItemID[4].ItemName = SpotWeld_Tag_Name + "MULTI_COMPONENT_TARGET4";
            OPC_ItemsList.Add(OPC_ItemID[4]);
            OPC_ItemID[5]          = new Opc.Da.Item();
            OPC_ItemID[5].ItemName = SpotWeld_Tag_Name + "TARGET_TRAVEL_VALUE_SET";
            OPC_ItemsList.Add(OPC_ItemID[5]);
            OPC_ItemID[6]          = new Opc.Da.Item();
            OPC_ItemID[6].ItemName = SpotWeld_Tag_Name + "SEQUENCE_ONE_SET";
            OPC_ItemsList.Add(OPC_ItemID[6]);
            OPC_ItemID[7]          = new Opc.Da.Item();
            OPC_ItemID[7].ItemName = SpotWeld_Tag_Name + "SEQUENCE_TWO_SET";
            OPC_ItemsList.Add(OPC_ItemID[7]);
            OPC_ItemID[8]          = new Opc.Da.Item();
            OPC_ItemID[8].ItemName = SpotWeld_Tag_Name + "SEQUENCE_THREE_SET";
            OPC_ItemsList.Add(OPC_ItemID[8]);
            Sensor_Read.AddItems(OPC_ItemsList.ToArray());
        }
コード例 #7
0
ファイル: OPCClient.cs プロジェクト: simple555a/OTlinkIT
        public void ConnectToServer()
        {
            try
            {
                //LOCAL OPC CONNECTION kepware
                //url = new Opc.URL("opcda://PCNAME/Kepware.KEPServerEX.V6");
                //LOCAL OPC CONNECTION RSLinx
                //url = new Opc.URL("opcda://PCNAME/RSLinx OPC Server");

                //REMOTE OPC CONNECTION WHEN USING opcexpert tunneling
                url = new Opc.URL("opcda://PCNAME/RSLinx Remote OPC Server.REMOTEPCNAME");

                //REMOTE RSLinx OPC
                //this requires DCOM setup
                //url = new Opc.URL("opcda://PCNAME/RSLinx Remote OPC Server");

                server = new Opc.Da.Server(fact, url);
                System.Net.NetworkCredential networkCredential = new System.Net.NetworkCredential();
                Opc.ConnectData connecteddata = new Opc.ConnectData(networkCredential);
                server.Connect(url, connecteddata);
                groupState             = new Opc.Da.SubscriptionState();
                groupState.Name        = "Group";
                groupState.UpdateRate  = 1;                                                 // this isthe time between every reads from OPC server
                groupState.Active      = true;                                              //this must be true if you the group has to read value
                groupRead              = (Opc.Da.Subscription)server.CreateSubscription(groupState);
                groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(UpdateTagData); //callback when the data are readed

                Opc.Da.Item[] items_read = groupRead.AddItems(createSomeTags());
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }
        }
コード例 #8
0
        /// <summary>
        /// olga opc 서버용 command group 추가.
        /// </summary>
        /// <returns></returns>
        private bool SetOLGACmd()
        {
            bool result = true;

            SubscriptionState subscriptionstate = new SubscriptionState()
            {
                Active       = true,
                Deadband     = 0,
                KeepAlive    = 0,
                UpdateRate   = 1000,
                ClientHandle = Guid.NewGuid().ToString(),
                Name         = "cmd"
            };

            //현재 선택된 서버에 Group을 생성한다.
            Opc.Da.Subscription cmd = (Opc.Da.Subscription) this.Server.CreateSubscription(subscriptionstate);
            this.CommandSubscription = new OPCSubscription()
            {
                Subscription = cmd
            };



            List <Opc.Da.Item> cmdlist = new List <Opc.Da.Item>();

            cmdlist.Add(OPCServer.CreateOPCItem(string.Format("Sim.{0}.ExternalClock", this.Controller.OLGAModelName))); //0
            cmdlist.Add(OPCServer.CreateOPCItem(string.Format("Sim.{0}.TIME", this.Controller.OLGAModelName)));          //1
            cmdlist.Add(OPCServer.CreateOPCItem(string.Format("Sim.{0}.State", this.Controller.OLGAModelName)));         //2
            cmdlist.Add(OPCServer.CreateOPCItem(string.Format("Sim.{0}.LoadSnap", this.Controller.OLGAModelName)));      //3
            cmdlist.Add(OPCServer.CreateOPCItem(string.Format("Sim.{0}.LoadSnap.File", this.Controller.OLGAModelName))); //4
            cmdlist.Add(OPCServer.CreateOPCItem(string.Format("Sim.{0}.SaveSnap", this.Controller.OLGAModelName)));      //5
            cmdlist.Add(OPCServer.CreateOPCItem(string.Format("Sim.{0}.SaveSnap.File", this.Controller.OLGAModelName))); //6
            cmdlist.Add(OPCServer.CreateOPCItem(string.Format("Sim.{0}.LastMessage", this.Controller.OLGAModelName)));   //7

            ItemResult[] ir = cmd.AddItems(cmdlist.ToArray());

            StringBuilder strb = new StringBuilder();

            for (int i = 0; i < ir.Length; i++)
            {
                if (ir[i].ResultID.Failed())
                {
                    result = false;
                    strb.AppendFormat("{0}\n", ir[i].ItemName);
                }
            }
            if (result == false)
            {
                strb.Insert(0, "Check OLGA OPC Server configuration, can't find the tag\n");
                CommonController.Instance.PrintLog(strb.ToString());
            }

            return(result);
        }
コード例 #9
0
ファイル: OPCClient2.cs プロジェクト: simple555a/OTlinkIT
        public void ConnectToServer()
        {
            try
            {
                url = new Opc.URL("opcda://IAPENG1/RSLinx OPC Server");
                //server = new Opc.Da.Server(fact, null);
                server = new Opc.Da.Server(fact, url);
                System.Net.NetworkCredential networkCredential = new System.Net.NetworkCredential();
                Opc.ConnectData connecteddata = new Opc.ConnectData(networkCredential);
                server.Connect(url, connecteddata);
                groupState             = new Opc.Da.SubscriptionState();
                groupState.Name        = "Group";
                groupState.UpdateRate  = 1000;                                              // this isthe time between every reads from OPC server
                groupState.Active      = true;                                              //this must be true if you the group has to read value
                groupRead              = (Opc.Da.Subscription)server.CreateSubscription(groupState);
                groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(UpdateTagData); //callback when the data are readed

                if (items[0] == null)
                {
                    items[0] = new Opc.Da.Item();
                    items[1] = new Opc.Da.Item();
                    items[2] = new Opc.Da.Item();
                    items[3] = new Opc.Da.Item();
                    items[4] = new Opc.Da.Item();
                    items[5] = new Opc.Da.Item();
                    items[6] = new Opc.Da.Item();
                    items[7] = new Opc.Da.Item();
                }

                items[0].ItemName = "[PLC2]LocalDateTime[0]";
                items[1].ItemName = "[PLC2]LocalDateTime[1]";
                items[2].ItemName = "[PLC2]LocalDateTime[2]";
                items[3].ItemName = "[PLC2]LocalDateTime[3]";
                items[4].ItemName = "[PLC2]LocalDateTime[4]";
                items[5].ItemName = "[PLC2]LocalDateTime[5]";
                items[6].ItemName = "[PLC2]LocalDateTime[6]";
                items[7].ItemName = "[PLC2]LocalDateTime";

                items = groupRead.AddItems(items);

                // Create a write group
                groupStateWrite        = new Opc.Da.SubscriptionState();
                groupStateWrite.Name   = "Group Write";
                groupStateWrite.Active = false;//not needed to read if you want to write only
                groupWrite             = (Opc.Da.Subscription)server.CreateSubscription(groupStateWrite);
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }
        }
コード例 #10
0
        // Write The Component Value From Barcode Scanner
        private void ScanComponents_OPC()
        {
            Opc.Da.Item[] OPC_ScanComponent = new Opc.Da.Item[1];
            OPC_ScanComponent[0]          = new Opc.Da.Item();
            OPC_ScanComponent[0].ItemName = Spotweld_Tag_Name + "DM8050_READ_RESULTS.DATA";
            OPC_ScanComponent             = ScanNewPart_Write.AddItems(OPC_ScanComponent);

            Opc.Da.ItemValue[] OPC_ScanComponent_Value = new Opc.Da.ItemValue[1];
            OPC_ScanComponent_Value[0] = new Opc.Da.ItemValue();
            OPC_ScanComponent_Value[0].ServerHandle = ScanNewPart_Write.Items[0].ServerHandle;
            OPC_ScanComponent_Value[0].Value        = ScannerString;
            Opc.IRequest OPCRequest;
            ScanNewPart_Write.Write(OPC_ScanComponent_Value, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
        }
        // Turn on Reset Input
        private void ConfirmWeldReset_On_OPC(object sender, EventArgs e)
        {
            Opc.Da.Item[] OPC_Reset_On = new Opc.Da.Item[1];
            OPC_Reset_On[0]          = new Opc.Da.Item();
            OPC_Reset_On[0].ItemName = SpotWeld_Tag_Name + "HMI_PB_Reset_Part_Weld_Count";
            OPC_Reset_On             = ResetWeldCount_Write.AddItems(OPC_Reset_On);

            Opc.Da.ItemValue[] OPC_ResetValue_On = new Opc.Da.ItemValue[1];
            OPC_ResetValue_On[0] = new Opc.Da.ItemValue();
            OPC_ResetValue_On[0].ServerHandle = ResetWeldCount_Write.Items[0].ServerHandle;
            OPC_ResetValue_On[0].Value        = 1;
            Opc.IRequest OPCRequest;
            ResetWeldCount_Write.Write(OPC_ResetValue_On, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
            //ResetOff_Timer.Start(); // Start a Timer to turn off Input
        }
        // Turn off Reset Input
        private void ConfirmWeldReset_Off_OPC()
        {
            Opc.Da.Item[] OPC_Reset_Off = new Opc.Da.Item[1];
            OPC_Reset_Off[0]          = new Opc.Da.Item();
            OPC_Reset_Off[0].ItemName = SpotWeld_Tag_Name + "HMI_PB_Reset_Part_Weld_Count";
            OPC_Reset_Off             = ResetWeldCount_Off_Write.AddItems(OPC_Reset_Off);

            Opc.Da.ItemValue[] OPC_ResetValue_Off = new Opc.Da.ItemValue[1];
            OPC_ResetValue_Off[0] = new Opc.Da.ItemValue();
            OPC_ResetValue_Off[0].ServerHandle = ResetWeldCount_Write.Items[0].ServerHandle;
            OPC_ResetValue_Off[0].Value        = 0;

            Opc.IRequest OPCRequest;
            ResetWeldCount_Off_Write.Write(OPC_ResetValue_Off, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
        }
コード例 #13
0
        /*********************************************************************************************************************
        *
        * Buttons Region End
        *
        *********************************************************************************************************************/
        #endregion

        /********************************************************************************************************************
        *
        *  OPC Region Start
        *  -- Total:
        *
        ********************************************************************************************************************/
        #region

        // Write Both On and Off Using OPC_TeachSensorValue
        private void TeachSensor_OPC()
        {
            Opc.Da.Item[] OPC_SensorWrite = new Opc.Da.Item[1];
            OPC_SensorWrite[0]          = new Opc.Da.Item();
            OPC_SensorWrite[0].ItemName = SpotWeld_Tag_Name + "HMI_PB_TEACH_SENSOR";
            OPC_WriteSensor.Add(OPC_SensorWrite[0]);
            TeachSensor_Write.AddItems(OPC_WriteSensor.ToArray());

            Opc.Da.ItemValue[] WriteValue = new Opc.Da.ItemValue[1];
            WriteValue[0] = new Opc.Da.ItemValue();
            WriteValue[0].ServerHandle = TeachSensor_Write.Items[0].ServerHandle;
            WriteValue[0].Value        = OPC_TeachSensorValue;

            Opc.IRequest req;
            TeachSensor_Write.Write(WriteValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out req);
        }
コード例 #14
0
 // Initialize the Correct Components Bit From the PLC
 private void ComponentCheck_OPC()
 {
     try
     {
         List <Item>   OPC_ReadList      = new List <Item>();
         Opc.Da.Item[] OPC_ReadComponent = new Opc.Da.Item[1];
         OPC_ReadComponent[0]          = new Opc.Da.Item();
         OPC_ReadComponent[0].ItemName = Spotweld_Tag_Name + "CORRECT_COMPONENTS_BIT";
         OPC_ReadList.Add(OPC_ReadComponent[0]);
         Component_Read.AddItems(OPC_ReadList.ToArray());
     }
     catch (Exception er)
     {
         MessageBox.Show(er.ToString());
     }
 }
コード例 #15
0
        // Token: 0x0600004C RID: 76 RVA: 0x0000364C File Offset: 0x0000264C
        private Subscription EstablishSubscription(Subscription template)
        {
            Subscription subscription = new Subscription(this, ((IServer)this.m_server).CreateSubscription(template.State));

            subscription.SetResultFilters(template.Filters);
            try
            {
                subscription.AddItems(template.Items);
            }
            catch
            {
                subscription.Dispose();
                subscription = null;
            }
            return(subscription);
        }
コード例 #16
0
        // Turn off Scan New Part Input
        // Toggle Scan Hardware Input
        private void SetHardware_OPC()
        {
            Opc.Da.Item[] OPC_SetHardware = new Opc.Da.Item[2];
            OPC_SetHardware[0]          = new Opc.Da.Item();
            OPC_SetHardware[0].ItemName = Spotweld_Tag_Name + "HMI_PB_SCAN_NEW_PART";
            OPC_SetHardware[1]          = new Opc.Da.Item();
            OPC_SetHardware[1].ItemName = Spotweld_Tag_Name + "HMI_PB_SCAN_HARDWARE";
            OPC_SetHardware             = Hardware_Write.AddItems(OPC_SetHardware);

            Opc.Da.ItemValue[] OPC_SetHardware_Value = new Opc.Da.ItemValue[2];
            OPC_SetHardware_Value[0] = new Opc.Da.ItemValue();
            OPC_SetHardware_Value[0].ServerHandle = Hardware_Write.Items[0].ServerHandle;
            OPC_SetHardware_Value[0].Value        = 0;
            OPC_SetHardware_Value[1] = new Opc.Da.ItemValue();
            OPC_SetHardware_Value[1].ServerHandle = Hardware_Write.Items[1].ServerHandle;
            OPC_SetHardware_Value[1].Value        = HMI_PB_SCAN_HARDWARE_VALUE;
            Opc.IRequest OPCRequest;
            Hardware_Write.Write(OPC_SetHardware_Value, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
        }
コード例 #17
0
        private void Subscript()
        {
            //设定组状态
            state              = new Opc.Da.SubscriptionState(); //组(订阅者)状态,相当于OPC规范中组的参数
            state.Name         = "Welding";                      //组名
            state.ServerHandle = null;                           //服务器给该组分配的句柄。
            //state.ClientHandle = Guid.NewGuid().ToString();//客户端给该组分配的句柄。
            state.ClientHandle = Guid.NewGuid().GetHashCode();   //使用int类型, 效率可能有提高
            state.Active       = true;                           //激活该组。
            state.UpdateRate   = 1000;                           //刷新频率为1秒。
            state.Deadband     = 0;                              // 死区值,设为0时,服务器端该组内任何数据变化都通知组。
            state.Locale       = null;                           //不设置地区值。

            //添加组
            subscription = (Opc.Da.Subscription)m_server.CreateSubscription(state);//创建组
            subscription.AddItems(AccessAdapter.GetOPCItemList().ToArray());
            ////注册回调事件
            //subscription.DataChanged += new Opc.Da.DataChangedEventHandler(this.OnDataChange);
        }
コード例 #18
0
 /// <summary>
 /// 设置绑定数据项(Item)
 /// </summary>
 /// <param name="itemTags"></param>
 public void SetItems(string[] itemTags)
 {
     Item[] items = new Item[itemTags.Length];
     for (int i = 0; i < items.Length; i++)
     {
         items[i] = new Item();
         //客户端给该数据项分配的句柄。
         items[i].ClientHandle = Guid.NewGuid().ToString();
         //该数据项在服务器中的路径。
         items[i].ItemPath = null;
         //该数据项在服务器中的名字。
         items[i].ItemName = itemTags[i];
         //记录数据项对应的数组编号
         itemIndexDic.Add(items[i].ItemName, i);
     }
     ItemResult[] r = subscription.AddItems(items);
     Console.WriteLine(r.Length);
     Console.WriteLine(subscription.Items.Length.ToString() + "------count");
     addDataChangedListening();
 }
コード例 #19
0
ファイル: COpcServerCOM.cs プロジェクト: moruiyi/Parking2013
        /// <summary>
        /// 建立订阅
        /// </summary>
        public void CreateSubscription()
        {
            try
            {
                subsState              = new SubscriptionState();
                subsState.Name         = "OPCNJ";                   //组名
                subsState.ServerHandle = null;                      //服务器给该组分配的句柄。
                subsState.ClientHandle = Guid.NewGuid().ToString(); //客户端给该组分配的句柄
                subsState.Active       = true;
                subsState.UpdateRate   = 100;                       //刷新频率为1秒。
                subsState.Deadband     = 0;                         // 死区值,设为0时,服务器端该组内任何数据变化都通知组。
                subsState.Locale       = null;                      //不设置地区值。

                subscription = (Opc.Da.Subscription)m_Server.CreateSubscription(subsState);
                Item[] items = new Item[10];
                for (int i = 0; i < items.Length; i++)
                {
                    items[i] = new Item();
                    items[i].ClientHandle = Guid.NewGuid().ToString(); //客户端给该数据项分配的句柄。
                    items[i].ItemPath     = null;                      //该数据项在服务器中的路径
                }
                items[0].ItemName = IEGInterface.Properties.Settings.Default.strSendBuffer;
                items[1].ItemName = IEGInterface.Properties.Settings.Default.strSendFlag;
                items[2].ItemName = IEGInterface.Properties.Settings.Default.strReceiveBuffer;
                items[3].ItemName = IEGInterface.Properties.Settings.Default.strReceiveFlag;
                items[4].ItemName = IEGInterface.Properties.Settings.Default.strEtv1Alarms;
                items[5].ItemName = IEGInterface.Properties.Settings.Default.strEtv2Alarms;
                items[6].ItemName = IEGInterface.Properties.Settings.Default.strHall1Alarms;
                items[7].ItemName = IEGInterface.Properties.Settings.Default.strHall2Alarms;
                items[8].ItemName = IEGInterface.Properties.Settings.Default.strHall3Alarms;
                items[9].ItemName = IEGInterface.Properties.Settings.Default.strHall4Alarms;

                subscription.AddItems(items);
            }
            catch (Exception ex)
            {
                throw new Exception("OPC建立订阅(CreateSubscription)异常:" + ex.ToString());
            }
        }
コード例 #20
0
        //======================================================================
        // Private Methods

        /// <summary>
        /// Establishes a subscription based on the template provided.
        /// </summary>
        private Subscription EstablishSubscription(Subscription template)
        {
            // create subscription.
            Subscription subscription = new Subscription(this, ((IServer)m_server).CreateSubscription(template.State));

            // set filters.
            subscription.SetResultFilters(template.Filters);

            // add items.
            try
            {
                subscription.AddItems(template.Items);
            }
            catch
            {
                subscription.Dispose();
                subscription = null;
            }

            // return new subscription.
            return(subscription);
        }
コード例 #21
0
ファイル: OPCClient.cs プロジェクト: simple555a/OTlinkIT
        public void ConnectToServer()
        {
            try
            {
                //url = new Opc.URL("opcda://MUHUMTHA/Kepware.KEPServerEX.V6");
                //url = new Opc.URL("opcda://IAPENG1/RSLinx OPC Server");
                //REMOTE OPC CONNECTION
                url    = new Opc.URL("opcda://MUHUMTHA/RSLinx OPC Server.MUHUNTHANPC");
                server = new Opc.Da.Server(fact, url);
                System.Net.NetworkCredential networkCredential = new System.Net.NetworkCredential();
                Opc.ConnectData connecteddata = new Opc.ConnectData(networkCredential);
                server.Connect(url, connecteddata);
                groupState             = new Opc.Da.SubscriptionState();
                groupState.Name        = "Group";
                groupState.UpdateRate  = 1;                                                 // this isthe time between every reads from OPC server
                groupState.Active      = true;                                              //this must be true if you the group has to read value
                groupRead              = (Opc.Da.Subscription)server.CreateSubscription(groupState);
                groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(UpdateTagData); //callback when the data are readed
                //Opc.Da.Item[] items_read = groupRead.AddItems(createSomeTags());
                Opc.Da.Item[] items_read = groupRead.AddItems(createSomeTags());

                // Create a write group
                //groupStateWrite = new Opc.Da.SubscriptionState();
                //groupStateWrite.Name = "Group_Write";
                //groupStateWrite.UpdateRate = 1000;
                //groupStateWrite.Active = false;//not needed to read if you want to write only
                //groupWrite = (Opc.Da.Subscription)server.CreateSubscription(groupStateWrite);
                //groupWrite.DataChanged += new Opc.Da.DataChangedEventHandler(ReadCompleted);

                Global.flag1 = true;
            }
            catch (Exception E)
            {
                Console.WriteLine(E.Message);
            }
        }
コード例 #22
0
ファイル: Program.cs プロジェクト: ChemIter2018/OPCClient
        public void Work()
        {
            int i = 5;

            if (i == 1)
            {
                url    = new Opc.URL("opcda://192.168.0.4/OPC.PHDServerDA.1");
                server = new Opc.Da.Server(fact, null);
                server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                Opc.Da.Item[] itemCollection = new Opc.Da.Item[1];
                itemCollection[0] = new Opc.Da.Item {
                    ItemName = "RTOS.TEST.PV", MaxAge = -1
                };
                Opc.Da.ItemValueResult[] result = server.Read(itemCollection);

                Console.WriteLine(result[0].Value);
                server.Disconnect();
            }
            else if (i == 2)
            {
                url    = new Opc.URL("opcda://192.168.0.4/OPC.PHDServerDA.1");
                server = new Opc.Da.Server(fact, null);
                server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                groupState              = new Opc.Da.SubscriptionState();
                groupState.Name         = "Group";
                groupState.ServerHandle = null;
                groupState.ClientHandle = Guid.NewGuid().ToString();
                groupState.Active       = true;
                groupState.UpdateRate   = 1000;
                groupState.Deadband     = 0;
                groupState.Locale       = null;

                groupRead = (Opc.Da.Subscription)server.CreateSubscription(groupState);


                string[] itemName = { "RTOS.TEST.PV", "RTOR.TI1237.DACA.PV" };

                Opc.Da.Item[] items = new Opc.Da.Item[2];

                for (int j = 0; j < items.Length; j++)
                {
                    items[j] = new Opc.Da.Item();
                    items[j].ClientHandle = Guid.NewGuid().ToString();
                    items[j].ItemPath     = null;
                    items[j].ItemName     = itemName[j];
                }

                groupRead.AddItems(items);
                //groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(group_DataChanged);

                Opc.Da.ItemValueResult[] results = groupRead.Read(groupRead.Items);
                foreach (ItemValueResult result in results)
                {
                    Console.WriteLine("{0},{1},{2},{3}", result.ItemName, result.Value, result.Quality, result.Timestamp);
                }
                //groupRead.DataChanged -= new Opc.Da.DataChangedEventHandler(group_DataChanged);

                groupRead.RemoveItems(groupRead.Items);
                server.CancelSubscription(groupRead);
                groupRead.Dispose();
                server.Disconnect();
            }
            else if (i == 3)
            {
                url    = new Opc.URL("opcda://192.168.0.4/OPC.PHDServerDA.1");
                server = new Opc.Da.Server(fact, null);
                server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                groupState              = new Opc.Da.SubscriptionState();
                groupState.Name         = "Group";
                groupState.ServerHandle = null;
                groupState.ClientHandle = Guid.NewGuid().ToString();
                groupState.Active       = true;
                groupState.UpdateRate   = 1000;
                groupState.Deadband     = 0;
                groupState.Locale       = null;

                groupWrite = (Opc.Da.Subscription)server.CreateSubscription(groupState);

                string[] itemName = { "RTOS.TEST.PV", "RTOS.TEST2.PV" };

                Opc.Da.Item[] items = new Opc.Da.Item[2];

                for (int j = 0; j < items.Length; j++)
                {
                    items[j] = new Opc.Da.Item();
                    items[j].ClientHandle = Guid.NewGuid().ToString();
                    items[j].ItemPath     = null;
                    items[j].ItemName     = itemName[j];
                }

                groupWrite.AddItems(items);

                //groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(group_DataChanged);

                Opc.Da.ItemValue[] writeValues = new Opc.Da.ItemValue[groupWrite.Items.Length];
                for (int k = 0; k < groupWrite.Items.Length; k++)
                {
                    writeValues[k] = new Opc.Da.ItemValue((ItemIdentifier)groupWrite.Items[k]);
                }

                writeValues[0].Value = 5;
                writeValues[1].Value = 6;

                groupWrite.Write(writeValues);

                Console.WriteLine("Press any key to close...");
                Console.ReadLine();

                //groupRead.DataChanged -= new Opc.Da.DataChangedEventHandler(group_DataChanged);

                groupWrite.RemoveItems(groupWrite.Items);
                server.CancelSubscription(groupWrite);
                groupWrite.Dispose();
                server.Disconnect();
            }
            else if (i == 4)
            {
                url       = new Opc.URL("opchda://192.168.0.4/OPC.PHDServerHDA.1");
                serverHda = new Opc.Hda.Server(fact, null);
                serverHda.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                try
                {
                }
                catch (Opc.ConnectFailedException opcConnEx)
                {
                    Console.WriteLine(string.Format("Could not connect to server {0}", "OPC.PHDServerHDA.1"));
                    Console.WriteLine(opcConnEx.ToString());
                }

                Console.WriteLine("Are we connected? " + serverHda.IsConnected);

                string[] itemName = { "RTOS.TEST.PV", "RTOS.TEST2.PV" };

                Opc.Hda.Trend groupHda = new Trend(serverHda);

                groupHda.Name        = "HDA";
                groupHda.AggregateID = AggregateID.NOAGGREGATE;
                DateTime startTime = DateTime.Now.AddHours(-1);
                DateTime endTime   = DateTime.Now;
                groupHda.StartTime     = new Opc.Hda.Time(startTime);
                groupHda.EndTime       = new Opc.Hda.Time(endTime);
                groupHda.MaxValues     = 0;
                groupHda.IncludeBounds = false;

                serverHda.Trends.Add(groupHda);

                Opc.Hda.Item[] items = new Opc.Hda.Item[2];
                for (int m = 0; m < 2; m++)
                {
                    items[m]              = new Opc.Hda.Item();
                    items[m].ItemName     = itemName[m];
                    items[m].ItemPath     = null;
                    items[m].ClientHandle = Guid.NewGuid().ToString();
                }

                IdentifiedResult[] identifiedResult = serverHda.CreateItems(items);

                if (identifiedResult != null)
                {
                    foreach (IdentifiedResult item in identifiedResult)
                    {
                        if (item.ResultID.Succeeded())
                        {
                            groupHda.Items.Add(new Opc.Hda.Item(item));
                        }
                    }
                }

                Opc.Hda.ItemValueCollection[] results = groupHda.ReadRaw();

                Opc.Hda.ItemValueCollection result1 = results[0];

                foreach (Opc.Hda.ItemValue result in result1)
                {
                    Console.WriteLine("{0},{1},{2}", result.Value, result.Quality, result.Timestamp);
                }

                serverHda.Disconnect();
            }
            else if (i == 5)
            {
                url       = new Opc.URL("opchda://192.168.0.4/OPC.PHDServerHDA.1");
                serverHda = new Opc.Hda.Server(fact, null);
                serverHda.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

                try
                {
                }
                catch (Opc.ConnectFailedException opcConnEx)
                {
                    Console.WriteLine(string.Format("Could not connect to server {0}", "OPC.PHDServerHDA.1"));
                    Console.WriteLine(opcConnEx.ToString());
                }

                Console.WriteLine("Are we connected? " + serverHda.IsConnected);

                string[] itemName = { "RTOR.TI1237.DACA.PV", "RTOS.TEST2.PV" };

                Opc.Hda.Trend groupHda = new Trend(serverHda);

                groupHda.Name        = "HDA";
                groupHda.AggregateID = AggregateID.AVERAGE;

                DateTime startTime = DateTime.Now.AddHours(-1);
                DateTime endTime   = DateTime.Now;
                //TimeSpan span = endTime.Subtract(startTime);
                //int calcInterval = ((int)span.TotalSeconds);
                //groupHda.ResampleInterval = (decimal)calcInterval;

                //DateTime startTime = new DateTime(2020, 6, 12, 9, 0, 0, 0);
                //DateTime endTime = new DateTime(2020, 6, 12, 10, 0, 0, 0);
                int calcInterval = 300;
                groupHda.ResampleInterval = (decimal)calcInterval;


                groupHda.StartTime     = new Opc.Hda.Time(startTime);
                groupHda.EndTime       = new Opc.Hda.Time(endTime);
                groupHda.MaxValues     = 0;
                groupHda.IncludeBounds = false;

                serverHda.Trends.Add(groupHda);

                Opc.Hda.Item[] items = new Opc.Hda.Item[2];
                for (int m = 0; m < 2; m++)
                {
                    items[m]              = new Opc.Hda.Item();
                    items[m].ItemName     = itemName[m];
                    items[m].ItemPath     = null;
                    items[m].ClientHandle = Guid.NewGuid().ToString();
                }

                IdentifiedResult[] identifiedResult = serverHda.CreateItems(items);

                if (identifiedResult != null)
                {
                    foreach (IdentifiedResult item in identifiedResult)
                    {
                        if (item.ResultID.Succeeded())
                        {
                            groupHda.Items.Add(new Opc.Hda.Item(item));
                        }
                    }
                }

                Opc.Hda.ItemValueCollection[] results = groupHda.ReadProcessed();

                Opc.Hda.ItemValueCollection result1 = results[0];

                foreach (Opc.Hda.ItemValue result in result1)
                {
                    Console.WriteLine("{0},{1},{2}", result.Value, result.Quality, result.Timestamp);
                }

                serverHda.Disconnect();
            }
        }
コード例 #23
0
ファイル: OpcDriver.cs プロジェクト: DragonXYZ/iview-scada
        public override void Add(string itemName)
        {
            lock (_thisLock)
            {
                try
                {
                    OpcAddress addr = Find(itemName);

                    if (addr == null)
                    {
                        string[] itemIdSplited = itemName.Split(']');
                        string[] addressSplited;
                        string   topic = "";

                        //Encontra o nome do topico
                        if (itemName.Contains(']'))
                        {
                            topic = itemName.Split(']')[0].Substring(1);
                        }

                        if (itemIdSplited.Length > 1)
                        {
                            addressSplited = itemIdSplited[1].Split(':');
                        }
                        else
                        {
                            itemIdSplited  = itemName.Split('.');
                            addressSplited = itemIdSplited[2].Split(':');
                        }

                        Opc.Da.Subscription opcDaGroup = null;
                        foreach (Opc.Da.Subscription opcDaGrp in _opcDaServer.Subscriptions)
                        {
                            if (opcDaGrp.Name == topic + addressSplited[0])
                            {
                                opcDaGroup = opcDaGrp;
                            }
                        }

                        if (opcDaGroup == null)
                        {
                            Opc.Da.SubscriptionState groupState = new Opc.Da.SubscriptionState();
                            groupState.ClientHandle = Guid.NewGuid().ToString();
                            groupState.Name         = topic + addressSplited[0];
//							groupState.UpdateRate = 250;

                            opcDaGroup = (Opc.Da.Subscription)_opcDaServer.CreateSubscription(groupState);
                            //opcDaGroup.DataChanged += new Opc.Da.DataChangedEventHandler(OpcDataChanged);
                            opcDaGroup.DataChanged += delegate(object subscriptionHandle, object requestHandle, ItemValueResult[] values)
                            {
//								BackgroundWorker back = new BackgroundWorker();
//								back.DoWork += delegate(object sender, DoWorkEventArgs e)
//								{
//									foreach (Opc.Da.ItemValueResult ivr in values)
//									{
//										OpcAddress adr = Find(ivr.ItemName);
//										adr.SetValue(ivr.Value.ToString());
//										OnDataChanged(new DataChangedEventArgs(ivr.ItemName, ivr.Value));
//									}
//								};
//								back.RunWorkerAsync();
                                foreach (Opc.Da.ItemValueResult ivr in values)
                                {
                                    OpcAddress adr = Find(ivr.ItemName);
                                    adr.SetValue(ivr.Value.ToString());
                                    OnDataChanged(new DataChangedEventArgs(ivr.ItemName, ivr.Value));
                                }
                            };
                        }

                        Opc.Da.Item opcDaItem = new Opc.Da.Item();
                        opcDaItem.ClientHandle          = Guid.NewGuid().ToString();
                        opcDaItem.ItemName              = itemName;
                        opcDaItem.MaxAgeSpecified       = true;
                        opcDaItem.MaxAge                = 100;
                        opcDaItem.SamplingRateSpecified = true;
                        opcDaItem.SamplingRate          = 10;

                        opcDaGroup.AddItems(new Opc.Da.Item[] { opcDaItem });

                        addr = new OpcAddress(opcDaItem, opcDaGroup);
                        _addrList.Add(addr);
                    }

                    return;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
            }
        }
コード例 #24
0
        /// <summary>
        /// 创建订阅,并添加Items
        /// </summary>
        private void CreatSubscription(List <string> lstConnect)
        {
            try
            {
                if (null == lstConnect)// || null != m_subscription)
                {
                    return;
                }

                if (null != m_subscription)
                {
                    if (0 < m_subscription.Items.Count() && lstConnect.Contains(m_subscription.Items.First().ItemName))
                    {
                        return;
                    }

                    #region 添加items
                    Item[]   itemNames1 = new Item[lstConnect.Count];
                    string[] fConnects1 = lstConnect.ToArray();
                    for (int i = 0; i < itemNames1.Length; i++)
                    {
                        itemNames1[i] = new Item();                             // 创建一个项Item对象。
                        itemNames1[i].ClientHandle = Guid.NewGuid().ToString(); // 客户端给该数据项分配的句柄。
                        itemNames1[i].ItemPath     = null;                      // 该数据项在服务器中的路径。
                        itemNames1[i].ItemName     = fConnects1[i];             // 该数据项在服务器中定义的名字
                        ItemValueResult itemValue = new ItemValueResult();
                        itemValue.ItemName = fConnects1[i];                     // 该数据项在服务器中定义的名字
                        m_lstItemValueResult.Add(itemValue);
                    }
                    #endregion

                    m_subscription.AddItems(itemNames1);
                    return;
                }

                m_sendState              = new SubscriptionState();
                m_sendState.Name         = m_groupName;               // 组名
                m_sendState.ServerHandle = null;                      // 服务器给该组分配的句柄。
                m_sendState.ClientHandle = Guid.NewGuid().ToString(); // 客户端给该组分配的句柄。
                m_sendState.Active       = true;                      // 激活该组。
                m_sendState.UpdateRate   = m_updateRate;              // 刷新频率
                m_sendState.Deadband     = 0;                         // 死区值,设为0时,服务器端该组内任何数据变化都通知组。
                m_sendState.Locale       = null;                      // 不设置地区值。
                m_subscription           = (Opc.Da.Subscription)m_server.CreateSubscription(m_sendState);

                #region 添加items
                Item[]   itemNames = new Item[lstConnect.Count];
                string[] fConnects = lstConnect.ToArray();
                for (int i = 0; i < itemNames.Length; i++)
                {
                    itemNames[i] = new Item();                             // 创建一个项Item对象。
                    itemNames[i].ClientHandle = Guid.NewGuid().ToString(); // 客户端给该数据项分配的句柄。
                    itemNames[i].ItemPath     = null;                      // 该数据项在服务器中的路径。
                    itemNames[i].ItemName     = fConnects[i];              // 该数据项在服务器中定义的名字
                    ItemValueResult itemValue = new ItemValueResult();
                    itemValue.ItemName = fConnects[i];                     // 该数据项在服务器中定义的名字
                    m_lstItemValueResult.Add(itemValue);
                }
                #endregion

                m_subscription.AddItems(itemNames);
            }
            catch (Exception ex)
            {
                CLOGException.Trace("函数CommunicationLib.COPCAccessTimer.CreatSubscription 异常", CBaseMethods.MyBase.GetExceptionInfo(ex));
            }
        }
        // Write the Selected Operation Value to the PLC
        private void OperationWriteOPC()
        {
            Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[8];
            OPC_ItemID[0]          = new Opc.Da.Item();
            OPC_ItemID[0].ItemName = SpotWeld_Tag_Name + "HMI_Operation_One_PB";
            OPC_ItemID[1]          = new Opc.Da.Item();
            OPC_ItemID[1].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Two_PB";
            OPC_ItemID[2]          = new Opc.Da.Item();
            OPC_ItemID[2].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Three_PB";
            OPC_ItemID[3]          = new Opc.Da.Item();
            OPC_ItemID[3].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Four_PB";

            OPC_ItemID[4]          = new Opc.Da.Item();
            OPC_ItemID[4].ItemName = SpotWeld_Tag_Name + "HMI_Operation_One_Selected";
            OPC_ItemID[5]          = new Opc.Da.Item();
            OPC_ItemID[5].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Two_Selected";
            OPC_ItemID[6]          = new Opc.Da.Item();
            OPC_ItemID[6].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Three_Selected";
            OPC_ItemID[7]          = new Opc.Da.Item();
            OPC_ItemID[7].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Four_Selected";
            OPC_ItemID             = OperationSelection_Write.AddItems(OPC_ItemID);

            Opc.Da.ItemValue[] ItemID_OPCValue = new Opc.Da.ItemValue[8];
            ItemID_OPCValue[0] = new Opc.Da.ItemValue();
            ItemID_OPCValue[1] = new Opc.Da.ItemValue();
            ItemID_OPCValue[2] = new Opc.Da.ItemValue();
            ItemID_OPCValue[3] = new Opc.Da.ItemValue();
            ItemID_OPCValue[4] = new Opc.Da.ItemValue();
            ItemID_OPCValue[5] = new Opc.Da.ItemValue();
            ItemID_OPCValue[6] = new Opc.Da.ItemValue();
            ItemID_OPCValue[7] = new Opc.Da.ItemValue();

            // switch the values written based on which operation was selected
            switch (SelectedOperation)
            {
            case 1:     // Operation #1
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 1;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 0;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 0;
                ItemID_OPCValue[3].ServerHandle = OperationSelection_Write.Items[3].ServerHandle;
                ItemID_OPCValue[3].Value        = 0;

                ItemID_OPCValue[4].ServerHandle = OperationSelection_Write.Items[4].ServerHandle;
                ItemID_OPCValue[4].Value        = 1;
                ItemID_OPCValue[5].ServerHandle = OperationSelection_Write.Items[5].ServerHandle;
                ItemID_OPCValue[5].Value        = 0;
                ItemID_OPCValue[6].ServerHandle = OperationSelection_Write.Items[6].ServerHandle;
                ItemID_OPCValue[6].Value        = 0;
                ItemID_OPCValue[7].ServerHandle = OperationSelection_Write.Items[7].ServerHandle;
                ItemID_OPCValue[7].Value        = 0;
                break;

            case 2:     // Operation #2
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 0;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 1;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 0;
                ItemID_OPCValue[3].ServerHandle = OperationSelection_Write.Items[3].ServerHandle;
                ItemID_OPCValue[3].Value        = 0;

                ItemID_OPCValue[4].ServerHandle = OperationSelection_Write.Items[4].ServerHandle;
                ItemID_OPCValue[4].Value        = 0;
                ItemID_OPCValue[5].ServerHandle = OperationSelection_Write.Items[5].ServerHandle;
                ItemID_OPCValue[5].Value        = 1;
                ItemID_OPCValue[6].ServerHandle = OperationSelection_Write.Items[6].ServerHandle;
                ItemID_OPCValue[6].Value        = 0;
                ItemID_OPCValue[7].ServerHandle = OperationSelection_Write.Items[7].ServerHandle;
                ItemID_OPCValue[7].Value        = 0;
                break;

            case 3:     // Operation #3
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 0;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 0;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 1;
                ItemID_OPCValue[3].ServerHandle = OperationSelection_Write.Items[3].ServerHandle;
                ItemID_OPCValue[3].Value        = 0;

                ItemID_OPCValue[4].ServerHandle = OperationSelection_Write.Items[4].ServerHandle;
                ItemID_OPCValue[4].Value        = 0;
                ItemID_OPCValue[5].ServerHandle = OperationSelection_Write.Items[5].ServerHandle;
                ItemID_OPCValue[5].Value        = 0;
                ItemID_OPCValue[6].ServerHandle = OperationSelection_Write.Items[6].ServerHandle;
                ItemID_OPCValue[6].Value        = 1;
                ItemID_OPCValue[7].ServerHandle = OperationSelection_Write.Items[7].ServerHandle;
                ItemID_OPCValue[7].Value        = 0;
                break;

            case 4:     // Operation #4
                ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle;
                ItemID_OPCValue[0].Value        = 0;
                ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle;
                ItemID_OPCValue[1].Value        = 0;
                ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle;
                ItemID_OPCValue[2].Value        = 0;
                ItemID_OPCValue[3].ServerHandle = OperationSelection_Write.Items[3].ServerHandle;
                ItemID_OPCValue[3].Value        = 1;

                ItemID_OPCValue[4].ServerHandle = OperationSelection_Write.Items[4].ServerHandle;
                ItemID_OPCValue[4].Value        = 0;
                ItemID_OPCValue[5].ServerHandle = OperationSelection_Write.Items[5].ServerHandle;
                ItemID_OPCValue[5].Value        = 0;
                ItemID_OPCValue[6].ServerHandle = OperationSelection_Write.Items[6].ServerHandle;
                ItemID_OPCValue[6].Value        = 0;
                ItemID_OPCValue[7].ServerHandle = OperationSelection_Write.Items[7].ServerHandle;
                ItemID_OPCValue[7].Value        = 1;
                break;
            }
            Opc.IRequest OPCRequest;
            OperationSelection_Write.Write(ItemID_OPCValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest);
        }
コード例 #26
0
        /// <summary>
        /// 注册Opc数据项集合
        /// </summary>
        /// <param name="opcDataItems"></param>
        private void registerOpcDataItems(IList <OpcDataItem> opcDataItems)
        {
            this.OpcDataItems   = opcDataItems;
            daemonTimer.Enabled = false;
            daemonTimer.Stop();

            //如果未连接那么返回
            if (!this.IsConnected)
            {
                if (!Equals(null, OnErrorHappened))
                {
                    OnErrorHappened(this, new OpcErrorEventArgs(OpcResult.E_FAIL, "Opc服务器未连接,请先连接在订阅数据项", null));
                }
                return;
            }
            #region 没有数据项那么清空所有订阅

            //如果订阅的DataItem没有,那么清空现在所有订阅
            if (Equals(null, opcDataItems) || opcDataItems.Count() < 1)
            {
                if (!Equals(this.opcServer.Subscriptions, null) && this.opcServer.Subscriptions.Count > 0)
                {
                    foreach (Opc.Da.Subscription thisSubscription in this.opcServer.Subscriptions)
                    {
                        thisSubscription.RemoveItems(thisSubscription.Items);
                        thisSubscription.DataChanged -= ThisSubscription_DataChanged;
                        this.opcServer.CancelSubscription(thisSubscription);
                        thisSubscription.Dispose();
                    }
                    this.opcServer.Subscriptions.Clear();

                    //订阅项取消后通知外部程序
                    if (!Equals(null, OnLogHappened))
                    {
                        OnLogHappened(this, new OpcHelper.OpcLogEventArgs("已经取消所有订阅"));
                    }
                    return;
                }
            }

            #endregion   数据项需要更新或者删除

            //根据要订阅的新数据项,增加或者移除现在的订阅
            if (!IsConnected)
            {
                if (!Equals(null, OnLogHappened))
                {
                    OnLogHappened(this, new OpcLogEventArgs("Opc服务器已断开"));
                }
                return;
            }
            //根据更新频率分组
            var dataItemGroups = from a in opcDataItems
                                 group a by a.UpdateRate into g
                                 select new { UpdateRate = g.Key, DataItems = g };

            //循环每组订阅对象,查询是否实际订阅,有则更新,没有则新建
            foreach (var dataItemGroup in dataItemGroups)
            {
                Opc.Da.Subscription thisSubscription = this.opcServer.Subscriptions.Cast <Opc.Da.Subscription>().FirstOrDefault(a => a.State.UpdateRate == dataItemGroup.UpdateRate);
                //未找到已经订阅的组,那么新建组并添加订阅项
                if (Equals(null, thisSubscription))
                {
                    if (!IsConnected)
                    {
                        if (!Equals(null, OnLogHappened))
                        {
                            OnLogHappened(this, new OpcLogEventArgs("Opc服务器已断开"));
                        }
                        return;
                    }
                    #region 增加订阅

                    //创建订阅组。订阅组状态的名称是更新频率
                    Opc.Da.Subscription newSubscription = this.opcServer.CreateSubscription
                                                              (CreateSubscriptionState(dataItemGroup.UpdateRate.ToString(), dataItemGroup.UpdateRate))
                                                          as Opc.Da.Subscription;//创建组
                    //创建opc订阅项
                    var opcItems = ConvertItems(dataItemGroup.DataItems);
                    //添加订阅项
                    var results = newSubscription.AddItems(opcItems.ToArray());
                    newSubscription.DataChanged += ThisSubscription_DataChanged;
                    //订阅的结果通过事件通知给外部调用程序
                    foreach (var v in results)
                    {
                        if (!IsConnected)
                        {
                            if (!Equals(null, OnLogHappened))
                            {
                                OnLogHappened(this, new OpcLogEventArgs("Opc服务器已断开"));
                            }
                            return;
                        }
                        //订阅成功更新状态
                        if (v.ResultID == Opc.ResultID.S_OK)
                        {
                            OpcResult opcResult = OpcResult.Unknow;
                            Enum.TryParse <OpcResult>(v.ResultID.ToString(), out opcResult);
                            OpcDataItems.FirstOrDefault(a => a.Name == v.ItemName).Quality = opcResult;
                        }
                        //未订阅成功,异常事件通知
                        else if (v.ResultID == Opc.ResultID.S_OK && !Equals(null, OnDataChanged))
                        {
                            OnDataChanged(this, new OpcDataEventArgs(OpcResult.DataItemRegistered,
                                                                     dataItemGroup.DataItems.FirstOrDefault(a => a.Name == v.ItemName)));
                        }
                        else if (v.ResultID != Opc.ResultID.S_OK && !Equals(null, OnErrorHappened))
                        {
                            OpcResult opcResult = OpcResult.Unknow;
                            Enum.TryParse <OpcResult>(v.ResultID.ToString(), out opcResult);
                            this.OpcDataItems.FirstOrDefault(a => a.Name == v.ItemName).Quality = opcResult;
                            OnErrorHappened(this, new OpcErrorEventArgs(opcResult, "订阅数据项时发生错误" + v.ResultID.Name, null));
                        }
                    }//end foreach
                    #endregion
                }
                else//已经有订阅组,那么更新订阅项
                {
                    if (!IsConnected)
                    {
                        if (!Equals(null, OnLogHappened))
                        {
                            OnLogHappened(this, new OpcLogEventArgs("Opc服务器已断开"));
                        }
                        return;
                    }
                    #region 已经有订阅组,那么更新订阅项

                    //查询要新增加的点,
                    IList <OpcDataItem> newItems = new List <OpcDataItem>();
                    foreach (var v in dataItemGroup.DataItems)
                    {
                        if (!thisSubscription.Items.Any(a => a.ItemName == v.Name))
                        {
                            newItems.Add(v);
                        }
                    }
                    var opcItems = ConvertItems(newItems);
                    //添加订阅项
                    var addResults = thisSubscription.AddItems(opcItems.ToArray());

                    //订阅的结果通过事件通知给外部调用程序
                    foreach (var v in addResults)
                    {
                        if (!IsConnected)
                        {
                            if (!Equals(null, OnLogHappened))
                            {
                                OnLogHappened(this, new OpcLogEventArgs("Opc服务器已断开"));
                            }
                            return;
                        }
                        //订阅成功更新状态
                        if (v.ResultID == Opc.ResultID.S_OK)
                        {
                            OpcResult opcResult = OpcResult.Unknow;
                            Enum.TryParse <OpcResult>(v.ResultID.ToString(), out opcResult);
                            OpcDataItems.FirstOrDefault(a => a.Name == v.ItemName).Quality = opcResult;
                        }
                        //未订阅成功,异常事件通知
                        else if (v.ResultID == Opc.ResultID.S_OK && !Equals(null, OnDataChanged))
                        {
                            OnDataChanged(this, new OpcDataEventArgs(OpcResult.DataItemRegistered,
                                                                     dataItemGroup.DataItems.FirstOrDefault(a => a.Name == v.ItemName)));
                        }
                        else if (v.ResultID != Opc.ResultID.S_OK && !Equals(null, OnErrorHappened))
                        {
                            OpcResult opcResult = OpcResult.Unknow;
                            Enum.TryParse <OpcResult>(v.ResultID.ToString(), out opcResult);
                            this.OpcDataItems.FirstOrDefault(a => a.Name == v.ItemName).Quality = opcResult;
                            OnErrorHappened(this, new OpcErrorEventArgs(opcResult, "订阅数据项时发生错误:" + v.ItemName + " 无效,OpcResult=" + v.ResultID.Name, null));
                        }
                    }//end foreach

                    //查询要删除的点,
                    IList <Opc.Da.Item> deleteItems = new List <Opc.Da.Item>();
                    foreach (var v in thisSubscription.Items)
                    {
                        if (!dataItemGroup.DataItems.Any(a => a.Name == v.ItemName))
                        {
                            deleteItems.Add(v);
                        }
                    }

                    //删除已经订阅点
                    var deleteResults = thisSubscription.RemoveItems(deleteItems.ToArray());
                    //订阅的结果通过事件通知给外部调用程序
                    foreach (var v in deleteResults)
                    {
                        if (!IsConnected)
                        {
                            if (!Equals(null, OnLogHappened))
                            {
                                OnLogHappened(this, new OpcLogEventArgs("Opc服务器已断开"));
                            }
                            return;
                        }
                        //未订阅成功,异常事件通知
                        if (v.ResultID == Opc.ResultID.S_OK && !Equals(null, OnDataChanged))
                        {
                            OpcDataItem tmp2 = new OpcDataItem(v.ItemName, thisSubscription.State.UpdateRate, "", "", OpcResult.DataItemUnregistered);
                            OnDataChanged(this, new OpcDataEventArgs(OpcResult.DataItemUnregistered, tmp2));
                        }
                        else if (v.ResultID != Opc.ResultID.S_OK && !Equals(null, OnErrorHappened))
                        {
                            OnErrorHappened(this, new OpcErrorEventArgs(OpcResult.E_FAIL, "取消订阅数据项时发生错误" + v.ResultID.Name, null));
                        }
                    }//end foreach
                    //删除订阅项后没有item了,那么删除thisSubscription
                    if (thisSubscription.Items.Count() < 1)
                    {
                        thisSubscription.DataChanged -= ThisSubscription_DataChanged;
                        string name = thisSubscription.Name;
                        //this.opcServer.Subscriptions.Remove(thisSubscription);
                        this.opcServer.CancelSubscription(thisSubscription);
                        thisSubscription.Dispose();//
                        if (!Equals(null, OnLogHappened))
                        {
                            OnLogHappened(this, new OpcLogEventArgs("Subscription " + name + " 已经从订阅组中移除"));
                        }
                        name = null;
                    }
                    #endregion
                }
            }//end foreach (var dataItemGroup in dataItemGroups)
            //删除订阅项后没有item了,那么删除subscription
            foreach (var subscription in this.opcServer.Subscriptions.Cast <Opc.Da.Subscription>())
            {
                var isHave = dataItemGroups.Any(a => a.UpdateRate == subscription.State.UpdateRate);

                if (!isHave)
                {
                    subscription.DataChanged -= ThisSubscription_DataChanged;
                    string name = subscription.Name;
                    //his.opcServer.Subscriptions.Remove(thisSubscription);
                    this.opcServer.CancelSubscription(subscription);
                    subscription.Dispose();//
                    if (!Equals(null, OnLogHappened))
                    {
                        OnLogHappened(this, new OpcLogEventArgs("Subscription " + name + " 已经从订阅组中移除"));
                    }
                    name = null;
                }
            }
            if (!Equals(null, OnLogHappened))
            {
                OnLogHappened(this, new OpcLogEventArgs("OPC Subscriptions Count:" + this.opcServer.Subscriptions.Count + "."));
            }
            daemonTimer.Enabled = true;
            daemonTimer.Start();
        }
コード例 #27
0
        /// <summary>
        /// OPC连接
        /// </summary>
        /// <param name="barcode"></param>
        public void OPC_connect()
        {
            #region 连接OPCSever
            //if (!OpcGroupClassm_server.IsConnected) { return; }
            //获取本地的IP地址
            var addr = "192.168.3.89";
            OpcServerName = addr + ".KEPware.KEPServerEx.V6";
            Opc.Server[] servers = OpcGroupClassm_discovery.GetAvailableServers(Specification.COM_DA_20, addr, null);//查询服务器
            if (servers != null)
            {
                foreach (Opc.Da.Server server in servers)
                {
                    //server即为需要连接的OPC数据存取服务器
                    if (String.Compare(server.Name, OpcServerName, true) == 0) //true表示忽略大小写
                    {
                        OpcGroupClassm_server = server;                        //建立连接
                        break;
                    }
                }
            }
            //连接服务器
            if (OpcGroupClassm_server != null)
            {
                OpcGroupClassm_server.Connect();                               //非空连接服务器
            }
            #endregion

            #region 往OPCSever中添加Group
            OpcGroupClassstate              = new Opc.Da.SubscriptionState();                                                    //组(订阅者)状态,相当于OPC规范中组的参数
            OpcGroupClassstate.Name         = "OpcGroupClasss";                                                                  //组名
            OpcGroupClassstate.ServerHandle = null;                                                                              //服务器给该组分配的句柄。
            OpcGroupClassstate.ClientHandle = Guid.NewGuid().ToString();                                                         //客户端给该组分配的句柄
            OpcGroupClassstate.Active       = true;                                                                              //激活该组
            OpcGroupClassstate.UpdateRate   = 100;                                                                               //刷新频率为1秒
            OpcGroupClassstate.Deadband     = 0;                                                                                 // 死区值,设为0时,服务器端该组内任何数据变化都通知组
            OpcGroupClassstate.Locale       = null;                                                                              //不设置地区值
            OpcGroupClasssubscription       = (Opc.Da.Subscription)OpcGroupClassm_server.CreateSubscription(OpcGroupClassstate); //添加组
                                                                                                                                 //添加监控地址
            #endregion

            #region  往Group添加 Items
            try
            {
                List <Item> items = new List <Item>();
                foreach (var adress in dicTest)
                {
                    var item = new Item()
                    {
                        ClientHandle = Guid.NewGuid().ToString(), //客户端给该数据项分配的句柄。
                        ItemName     = adress.Key                 //该数据项在服务器中的名字
                    };
                    items.Add(item);
                }
                OpcGroupClasssubscription.AddItems(items.ToArray());
            }
            catch (Exception ex)
            {
                MessageBox.Show("初始化监控地址失败:" + ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            OpcGroupClasssubscription.DataChanged += new DataChangedEventHandler(OnDataChange);
            //Thread.Sleep(1000);
            #endregion
        }