Beispiel #1
0
        public int GetNodeValue(string nodeStrGuid, out object nodeValue)
        {
            int rtc = -1;

            nodeValue = null;
            try
            {
                OPCDATASOURCE opcDataSource = OPCDATASOURCE.OPC_DS_DEVICE;

                OPCItemState opcItemState = new OPCItemState();

                DriveNodeEntity driveNode = allOPCItemNodes.Find(p => nodeStrGuid.Equals(p.nodeId));

                ItemDef itemdef = syncIOGroup.Item(driveNode.nodeName);

                rtc = syncIOGroup.Read(opcDataSource, itemdef, out opcItemState);

                if (HRESULTS.Succeeded(rtc))
                {
                    nodeValue = opcItemState.DataValue;
                    //txtItemQuality.Text = syncIOGroup.GetQualityString(opcItemState.Quality);
                    //txtTimeStamp.Text = DateTime.FromFileTime(opcItemState.TimeStamp).ToString();
                }
            }
            catch (Exception ex)
            {
                NLogHelper.ExceptionInfo(ex, "GetNodeValue param:'{1}' ,exception:{0}", ex.Message, nodeStrGuid);
            }

            return(rtc);
        }
Beispiel #2
0
        public bool SyncRead(GroupName enumGrp, ItemName[] enumArryItem, out bool[] arrResult)
        {
            bool   bResult;
            string strGrp = enumGrp.ToString();
            var    grp    = opcResultsDic[strGrp];

            arrResult = new bool[enumArryItem.Length];
            int[] arrHandle = new int[enumArryItem.Length];
            for (int i = 0; i < enumArryItem.Length; i++)
            {
                string strItem = enumArryItem[i].ToString();
                arrHandle[i] = grp[strItem].HandleServer;
            }

            OPCItemState[] arrState = new OPCItemState[enumArryItem.Length];

            try
            {
                bResult = opcGrpsDic[strGrp].SyncRead(OPCDATASOURCE.OPC_DS_DEVICE, arrHandle, out arrState);
            }
            catch (Exception)
            {
                bResult = false;
            }

            for (int i = 0; i < arrState.Length; i++)
            {
                arrResult[i] = (bool)arrState[i].DataValue;
            }

            return(bResult);
        }
Beispiel #3
0
        public string WriteStringItem(String tagName, String value)
        {
            ItemDef ItemData = new ItemDef();

            ItemData = readGroup.Item(tagName);
            OPCItemState state = new OPCItemState();

            int rtc = readGroup.Write(ItemData, value);

            if (HRESULTS.Succeeded(rtc))                // read from OPC server successful
            {
                if (state != null)
                {
                    if (HRESULTS.Succeeded(state.Error))        // item read successful
                    {
                        return("Success");
                    }
                    else                        // the item could not be read
                    {
                        //           hf.LogException("Item cannot be readable: " + tagName);
                        return("ERROR");
                    }
                }
                else       // State not valid
                {
                    //      hf.LogException("Item cannot be readable due to state: " + tagName);
                    return("ERROR");
                }
            }
            else                // OPC server read error
            {
                //     hf.LogException("Item cannot be readable due to OPC: " + tagName);
                return("ERROR");
            }
        }
Beispiel #4
0
 public void readSyn(int[] arryHandleServer, int length, out String[] arryResult)
 {
     OPCItemState[] arrystate = new OPCItemState[length];
     arryResult = new String[length];
     try
     {
         if (arryHandleServer != null)
         {
             TheGrp.SyncRead(OPCDATASOURCE.OPC_DS_DEVICE, arryHandleServer, out arrystate);
         }
         if (arrystate != null)
         {
             for (int i = 0; i < arrystate.Length; i++)
             {
                 if (arrystate[i].Quality == 192)
                 {
                     arryResult[i] = arrystate[i].DataValue.ToString();
                 }
                 else
                 {
                     arryResult[i] = arrystate[i].Quality.ToString();
                 }
             }
         }
     }
     catch (Exception e)
     {
         System.Windows.Forms.MessageBox.Show(e.ToString());
     }
 }
Beispiel #5
0
 static void group_ReadCompleted(object sender, ReadCompleteEventArgs e)
 {
     Console.WriteLine("Async read:");
     for (int i = 0; i < e.sts.Length; i++)
     {
         OPCItemState itemResult = e.sts[i];
         Console.WriteLine(" -> item:{0}; value:{1}; timestamp{2}; qualituy:{3}", "n/a", itemResult.DataValue.ToString(), itemResult.TimeStamp, itemResult.Quality);
     }
     ;
 }
Beispiel #6
0
        public void TestOPCItemStateString01()
        {
            OPCItemState itemState = new OPCItemState();

            itemState.Error        = 0;
            itemState.HandleClient = 1;
            itemState.DataValue    = 1;
            itemState.TimeStamp    = System.DateTime.Now.ToFileTime();
            itemState.Quality      = 8;
            //Test Procedure Call
            string result = itemState.ToString();
        }
Beispiel #7
0
        void pushValue(OPCItemState itemState, Action <int, PointValueType, object> onValueReceive)
        {
            int itemTranId = itemState.HandleClient;

            if (itemState.DataValue == null)
            {
                onValueReceive(itemTranId, PointValueType.String, "");
            }
            else if (itemState.DataValue is Array)
            {
                onValueReceive(itemTranId, PointValueType.String, Newtonsoft.Json.JsonConvert.SerializeObject(itemState.DataValue));
            }
            else
            {
                onValueReceive(itemTranId, PointValueType.String, itemState.DataValue.ToString());
            }
        }
Beispiel #8
0
        /// <summary>
        /// This function reads a analog double tag value from OPC, read will be from Device, Return ERROR in case of any error
        /// </summary>
        /// <param name="tagName"></param>
        /// <returns></returns>
        public int ReadBooleanItem(String tagName)
        {
            ItemDef ItemData;

            ItemData = readGroup.Item(tagName);
            OPCItemState state = new OPCItemState();

            // Read from device
            OPCDATASOURCE dsrc = OPCDATASOURCE.OPC_DS_DEVICE;
            int           rtc  = readGroup.Read(dsrc, ItemData, out state);

            if (HRESULTS.Succeeded(rtc))                // read from OPC server successful
            {
                if (state != null)
                {
                    if (HRESULTS.Succeeded(state.Error))        // item read successful
                    {
                        if (Convert.ToBoolean(state.DataValue) == true)
                        {
                            return(1);
                        }
                        else
                        {
                            return(0);
                        }
                    }
                    else                        // the item could not be read
                    {
                        //      hf.LogException("Item cannot be readable: " + tagName);
                        return(-10000);
                    }
                }
                else       // State not valid
                {
                    //    hf.LogException("Item cannot be readable due to State: " + tagName);
                    return(-10000);
                }
            }
            else                // OPC server read error
            {
                //    hf.LogException("Item cannot be readable due to OPC: " + tagName);
                return(-10000);
            }
        }
Beispiel #9
0
        public bool SyncRead(GroupName enumGrp, ItemName enumItem, out bool iResult)
        {
            bool   bExec;
            string strGrp = enumGrp.ToString();

            int[]          arrHandle = new int[] { opcResultsDic[strGrp][enumItem.ToString()].HandleServer };
            OPCItemState[] arrState  = new OPCItemState[1];

            try
            {
                bExec = opcGrpsDic[strGrp].SyncRead(OPCDATASOURCE.OPC_DS_DEVICE, arrHandle, out arrState);
            }
            catch (Exception ee)
            {
                bExec = false;
                LogImpl.Debug("plc错误:" + ee.ToString());
            }

            iResult = (bool)arrState[0].DataValue;
            return(bExec);
        }
Beispiel #10
0
 private void cmdReadSync_Click(object sender, EventArgs e)
 {
     int[] aE = new int[2];
     _txtReadVal_0.Text = "";
     _txtReadVal_1.Text = "";
     int[]          arrHSrv = new int[2];
     OPCItemState[] arrStat = new OPCItemState[2];
     arrHSrv[0] = itemResults[0].HandleServer;
     arrHSrv[1] = itemResults[1].HandleServer;
     try
     {
         theGroup.SyncRead(OPCDATASOURCE.OPC_DS_DEVICE, arrHSrv, out arrStat);
         if (arrStat[0].Quality == 192)
         {
             _txtReadVal_0.Text      = arrStat[0].DataValue.ToString();
             _txtReadVal_0.BackColor = Color.White;
         }
         else
         {
             _txtReadVal_0.Text      = GetQualityText(arrStat[0].Quality);
             _txtReadVal_0.BackColor = Color.Red;
         }
         if (arrStat[1].Quality == 192)
         {
             _txtReadVal_1.Text      = arrStat[1].DataValue.ToString();
             _txtReadVal_1.BackColor = Color.White;
         }
         else
         {
             _txtReadVal_1.Text      = GetQualityText(arrStat[1].Quality);
             _txtReadVal_1.BackColor = Color.Red;
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Beispiel #11
0
        private string AddMyRefreshGroup1(OpcServer OpcSrv)
        {
            float deadBand = 90.0F;

            try
            {      // create group with 2 sec update rate
                oGrp = OpcSrv.AddGroup("Line1", true, UpdateRate, ref deadBand, 0, 0);
            }
            catch
            {
                DBLogging.InsertLogs("Exception: AddMyRefreshGroup1", false, "Group could not be added", _connStr);
                return("Group could not be added");
            }

            oGrp.DataChanged += new DataChangeEventHandler(DataChangedHandler);
            oGrp.AdviseIOPCDataCallback();


            //client handle as item index
            items1[0] = new OPCItemDef(TagLPG_Bay01_RFID_Puched, true, 0, VarEnum.VT_BOOL);
            items1[1] = new OPCItemDef(TagLPG_WB_RFIDPunched, true, 1, VarEnum.VT_BOOL);
            items1[2] = new OPCItemDef(TagLPG_Bay01_LPGBatchComplete, true, 2, VarEnum.VT_BOOL);

            int rtc;

            rtc = oGrp.AddItems(items1, out addRslt1);

            if (HRESULTS.Failed(rtc))
            {
                return("Error at AddItem");
            }
            for (int i = 0; i < addRslt1.Length; ++i)
            {
                ItemValues1[i] = new OPCItemState();
            }

            return("");
        }
Beispiel #12
0
        /// <summary>
        /// This function reads a tag value from OPC, read will be from Device, Return ERROR in case of any error
        /// </summary>
        /// <param name="tagName"></param>
        /// <returns></returns>
        public string ReadStringItem(String tagName)
        {
            ItemDef ItemData = new ItemDef();

            ItemData = readGroup.Item(tagName);
            OPCItemState state = new OPCItemState();

            // Read from device
            OPCDATASOURCE dsrc = OPCDATASOURCE.OPC_DS_CACHE;   //??????????
            int           rtc  = readGroup.Read(dsrc, ItemData, out state);

            if (HRESULTS.Succeeded(rtc))                // read from OPC server successful
            {
                if (state != null)
                {
                    if (HRESULTS.Succeeded(state.Error))        // item read successful
                    {
                        return(state.DataValue.ToString());
                    }
                    else                        // the item could not be read
                    {
                        //           hf.LogException("Item cannot be readable: " + tagName);
                        return("ERROR");
                    }
                }
                else       // State not valid
                {
                    //      hf.LogException("Item cannot be readable due to state: " + tagName);
                    return("ERROR");
                }
            }
            else                // OPC server read error
            {
                //     hf.LogException("Item cannot be readable due to OPC: " + tagName);
                return("ERROR");
            }
        }
Beispiel #13
0
        static void Main(string[] args)
        {
            /*create array of readable Tags*/
            var Tags = new List <OPCClientItem>();

            Tags.Add(new OPCClientItem()
            {
                Name        = ".test",
                ClientHanle = 1
            });

            OpcServer server = new OpcServer();

            try
            {
                int transactionID = new Random().Next(1024, 65535);
                int cancelID      = 0;
                int updateRate    = 1000;

                /*connect to the OPC Server and check it's state*/
                server.Connect("Matrikon.OPC.Simulation.1");
                var serverStatus = new SERVERSTATUS();
                server.GetStatus(out serverStatus);
                if (serverStatus.eServerState == OPCSERVERSTATE.OPC_STATUS_RUNNING)
                {
                    /*create group of items*/
                    OpcGroup group = server.AddGroup("Group1", true, updateRate);
                    group.ReadCompleted += group_ReadCompleted;
                    List <OPCItemDef> items = new List <OPCItemDef>();
                    Tags.ToList()
                    .ForEach(x => items.Add(new OPCItemDef(x.Name, true, x.ClientHanle, VarEnum.VT_EMPTY)));

                    /* add items and collect their attributes*/
                    OPCItemResult[] itemAddResults = null;
                    group.AddItems(items.ToArray(), out itemAddResults);
                    for (int i = 0; i < itemAddResults.Length; i++)
                    {
                        OPCItemResult itemResult = itemAddResults[i];
                        OPCClientItem tag        = Tags[i];
                        tag.ServerHandle = itemResult.HandleServer;
                        tag.AccessRight  = (itemResult.AccessRights == OPCACCESSRIGHTS.OPC_READABLE) ? OPCClientItem.EAccessRight.ReadOnly : OPCClientItem.EAccessRight.ReadAndWrite;
                    }
                    ;

                    /*Refresh items in group*/
                    // group.Refresh2(OPCDATASOURCE.OPC_DS_DEVICE, transactionID, out cancelID);

                    /*Async read data for the group items*/
                    int[] serverHandles = new int[Tags.Count];
                    for (int i = 0; i < Tags.Count; i++)
                    {
                        serverHandles[i] = Tags[i].ServerHandle;
                    }
                    ;
                    OPCItemState[] itemsStateResult = null;
                    /*sync read*/
                    group.Read(OPCDATASOURCE.OPC_DS_DEVICE, serverHandles, out itemsStateResult);
                    Console.WriteLine("Sync read:");
                    for (int i = 0; i < itemsStateResult.Length; i++)
                    {
                        OPCItemState itemResult = itemsStateResult[i];
                        Console.WriteLine(" -> item:{0}; value:{1}; timestamp{2}; qualituy:{3}", Tags[i].Name, itemResult.DataValue.ToString(), itemResult.TimeStamp, itemResult.Quality);
                    }
                    ;

                    /*sync write*/
                    object[] values       = new object[Tags.Count];
                    int[]    resultErrors = new int[Tags.Count];
                    values[0] = (object)256;
                    group.Write(serverHandles, values, out resultErrors);

                    /*async read*/
                    group.Read(serverHandles, transactionID, out cancelID, out resultErrors);

                    /*wait for a while befor remove group to process async event*/
                    System.Threading.Thread.Sleep(3000);

                    /*the group must be removed !!! */
                    group.Remove(true);
                }
                ;
            }
            finally
            {
                server.Disconnect();
                server = null;
                GC.Collect();
            };
            Console.ReadKey();
        }
Beispiel #14
0
        public void TestCreateOPCItemState01()
        {
            OPCItemState oPCItemState = CreateOPCItemState01();

            Assert.IsNotNull(oPCItemState);
        }
Beispiel #15
0
        public static OPCItemState CreateOPCItemState01()
        {
            OPCItemState oPCItemState = new OPCItemState();

            return(oPCItemState);
        }