示例#1
0
        /// <summary>
        /// 写入值
        /// </summary>
        /// <param name="group"></param>
        public override bool SyncWrite(OPCGroup group)
        {
            /// 写入条码信息
            int[]    SyncItemServerHandles = new int[2];
            object[] SyncItemValues        = new object[2];
            Array    SyncItemServerErrors;

            // 条码 index 是2
            SyncItemServerHandles[1] = (int)this.ItemServerHandles.GetValue(2);
            // OPCItem AnOpcItem = group.OPCItems.GetOPCItem((int)this.ItemServerHandles.GetValue(2));
            SyncItemValues[1] = this.ScanGetInposiBarcode;
            group.SyncWrite(1, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);
            if (SyncItemServerErrors != null && ((int)SyncItemServerErrors.GetValue(1) == 0))
            {
                if (this.SyncSetReadableFlag(group))
                {
                    return(true);
                }
            }
            else
            {
                this.ScanGetInposiBarcode = this.ScanGetInposiBarcodeWas;
            }
            return(false);
        }
示例#2
0
        private void WriteValueBtn_1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // 写入数据从index从 1开始
                int[]    SyncItemServerHandles = new int[2];
                object[] SyncItemValues        = new object[2];
                Array    SyncItemServerErrors;

                // 写入数据从index从 1开始
                SyncItemServerHandles[1] = (int)this.ItemServerHandles.GetValue(1);
                SyncItemValues[1]        = this.NewValueTB_1.Text;
                // 1--写入数据个数
                ConnectedGroup.SyncWrite(1, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);
                if (SyncItemServerErrors != null && ((int)SyncItemServerErrors.GetValue(1) == 0))
                {
                    // 写入成功
                    Logger.Info("写入成功");
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message, ex);
            }
        }
示例#3
0
        /// <summary>
        /// 设置可读
        /// </summary>
        /// <param name="group"></param>
        public bool SyncSetRWFlag(OPCGroup group, byte flag)
        {
            /// 写入flag
            int[]    SyncItemServerHandles = new int[2];
            object[] SyncItemValues        = new object[2];
            Array    SyncItemServerErrors;

            // FLAG index 是1
            SyncItemServerHandles[1] = (int)this.ItemServerHandles.GetValue(1);
            SyncItemValues[1]        = flag;
            group.SyncWrite(1, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);
            if (SyncItemServerErrors != null && ((int)SyncItemServerErrors.GetValue(1) == 0))
            {
                return(true);
            }
            return(false);
        }
示例#4
0
        public string  GetOPCItemSyncRead(string groupname, string adres)
        {
            SetConnectedGroup(groupname);

            if ((ConnectedGroup != null))
            {
                List <OpcItems> items = OPCItem.FindAll(p => p != null && p != null && p.OPCItemName == adres);

                try
                {
                    //        ' Read only 1 item
                    short ItemCount = 1;

                    //        ' Provide storage the arrays returned by the 'SyncRead' method
                    int[]        SyncItemServerHandles = new int[2];
                    System.Array SyncItemValues;
                    System.Array SyncItemServerErrors;

                    //        ' Get the Servers handle for the desired item.  The server handles were
                    //        ' returned in add item subroutine.
                    SyncItemServerHandles[1] = (int)ItemServerHandles.GetValue(items[0].AdresNo);

                    //        ' Invoke the SyncRead operation.  Remember this call will wait until
                    //        ' completion. The source flag in this case, 'OPCDevice' , is set to
                    //        ' read from device which may take some time.
                    object       timestamp             = null;
                    object       qualities             = null;
                    System.Array syncitemserverhandles = SyncItemServerHandles.ToArray <int>();
                    ConnectedGroup.SyncRead((short)OPCAutomation.OPCDataSource.OPCDevice, ItemCount, ref syncitemserverhandles, out SyncItemValues, out SyncItemServerErrors, out qualities, out timestamp);

                    //        ' Save off the value returned after checking for error
                    if (((int)SyncItemServerErrors.GetValue(1) == 0))
                    {
                        if (IsArray(SyncItemValues.GetValue(1).GetType()))
                        {
                            Array  ItsAnArray;
                            int    x;
                            string Suffix;
                            ItsAnArray = (System.Array)SyncItemValues.GetValue(1);
                            //((TextBox)OPCItemValue.GetValue(index)).Text = "";
                            items[0].OPCItemValue = "";
                            for (x = ItsAnArray.GetLowerBound(0); (x <= ItsAnArray.GetUpperBound(0)); x++)
                            {
                                if ((x == ItsAnArray.GetUpperBound(0)))
                                {
                                    Suffix = "";
                                }
                                else
                                {
                                    Suffix = ", ";
                                }
                                items[0].OPCItemValue = (items[0].OPCItemValue + (ItsAnArray.GetValue(x) + Suffix));
                                return(items[0].OPCItemValue);
                            }
                        }
                        else
                        {
                            items[0].OPCItemValue = SyncItemValues.GetValue(1).ToString();
                            return(items[0].OPCItemValue);
                        }
                    }
                    else
                    {
                        MessageBox.Show(("SyncItemServerError: " + SyncItemServerErrors.GetValue(1)));
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("OPC server read item failed with exception: " + ex.Message, "SimpleOPCInterface Exception", MessageBoxButtons.OK);
                }
            }
            return(string.Empty);
        }
示例#5
0
        public void OPCItemWrite(string groupname, string adres, string yazilacakdeger)
        {
            SetConnectedGroup(groupname);
            if (ConnectedGroup != null)
            {
                List <OpcItems> items = OPCItem.FindAll(p => p != null && p.OPCItemName == adres);
                items[0].OPCItemValue = yazilacakdeger;
                try
                {
                    short                 ItemCount             = 1;
                    int[]                 SyncItemServerHandles = new int[2];
                    object[]              SyncItemValues        = new object[2];
                    System.Array          SyncItemServerErrors;
                    OPCAutomation.OPCItem AnOpcItem;
                    SyncItemServerHandles[1] = Convert.ToInt32(ItemServerHandles.GetValue(items[0].AdresNo));
                    AnOpcItem = ((OPCAutomation.OPCItem)ConnectedGroup.OPCItems.GetOPCItem((int)ItemServerHandles.GetValue(items[0].AdresNo)));


                    Array ItsAnArray;
                    short CanonDT;
                    CanonDT = AnOpcItem.CanonicalDataType;

                    switch (CanonDT)
                    {
                    //items[0].OPCItemValue;

                    case (short)CanonicalDataTypes.CanonDtByte:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("Byte"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToByte(items[0].OPCItemValue);
                        }
                        break;

                    case (short)CanonicalDataTypes.CanonDtChar:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("SByte"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToByte(items[0].OPCItemValue);
                        }
                        break;

                    case (short)CanonicalDataTypes.CanonDtWord:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("UInt16"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToByte(items[0].OPCItemValue);
                        }
                        break;

                    case (short)CanonicalDataTypes.CanonDtShort:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("Int16"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToInt16(items[0].OPCItemValue);
                        }
                        break;


                    case (short)CanonicalDataTypes.CanonDtDWord:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("UInt32"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToByte(items[0].OPCItemValue);
                        }
                        break;

                    case (short)CanonicalDataTypes.CanonDtLong:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("Int32"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToByte(items[0].OPCItemValue);
                        }
                        break;

                    case (short)CanonicalDataTypes.CanonDtFloat:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("Single"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToByte(items[0].OPCItemValue);
                        }
                        break;

                    case (short)CanonicalDataTypes.CanonDtDouble:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("Double"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToByte(items[0].OPCItemValue);
                        }
                        break;

                    case (short)CanonicalDataTypes.CanonDtBool:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("Boolean"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToByte(items[0].OPCItemValue);
                        }
                        break;

                    case (short)CanonicalDataTypes.CanonDtString:
                        if (OPCItemIsArray[items[0].AdresNo] > 0)
                        {
                            string str = items[0].OPCItemValue;
                            ItsAnArray = Array.CreateInstance(Type.GetType("String"), OPCItemIsArray[items[0].AdresNo]);
                            if (!LoadArray(ref ItsAnArray, CanonDT, ref str))
                            {
                                return;
                            }
                            else
                            {
                                SyncItemValues[1] = (ItsAnArray);     //SyncItemValues[1] = CObj(ItsAnArray);
                            }
                        }
                        else
                        {
                            SyncItemValues[1] = Convert.ToByte(items[0].OPCItemValue);
                        }
                        break;

                    default:
                        MessageBox.Show("OPCItemWriteButton Unknown data type", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;

                        break;
                    }
                    Array syncitemserverhandles = SyncItemServerHandles.ToArray <int>();
                    Array syncitemvalues        = SyncItemValues.ToArray <object>();
                    //' Invoke the SyncWrite operation.  Remember this call will wait until completion
                    ConnectedGroup.SyncWrite(ItemCount, ref syncitemserverhandles, ref syncitemvalues, out SyncItemServerErrors);

                    if ((int)SyncItemServerErrors.GetValue(1) != 0)
                    {
                        MessageBox.Show("SyncItemServerError: " + SyncItemServerErrors.GetValue(1));
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("OPC server write item failed with exception: " + ex.Message, "SimpleOPCInterface Exception", MessageBoxButtons.OK);
                }
            }
        }