コード例 #1
0
        //public bool CreateItemList(string[] itemList)
        //{

        //    string item = "";

        //    foreach (string tempLoopVar_item in itemList)
        //    {
        //        item = tempLoopVar_item;
        //        AddDataItem(item);
        //    }

        //    return false;
        //}

        //-----------------------------------------------------------------
        // write by ItemID

        private bool WriteOpcItem(short Index, object Value)
        {
            Array gsErrors = null;

            try
            {
                if (!Connected)
                {
                    LOG.Error("未连接到OPC写点失败");
                    return(false);
                }

                if (ObjOPCGroup == null)
                {
                    return(false);
                }

                //Add OPCItems
                Array tempArray_ServerHanlers = Array.CreateInstance(typeof(int), 2);
                tempArray_ServerHanlers.SetValue(Array_ServerHandlers.GetValue(Index), 1);

                Array tempArray_Values = Array.CreateInstance(typeof(object), 2);
                tempArray_Values.SetValue(Value, 1);

                //ObjOPCGroup.IsSubscribed = True

                ObjOPCGroup.SyncWrite(1, ref tempArray_ServerHanlers, ref tempArray_Values, out gsErrors);

                bool HasError = false;
                if ((int)gsErrors.GetValue(1) != 0)
                {
                    //MessageLog("clsDeviceOPC.WriteData(): Tag \'" + Array_Items[Index] + "\' has problem");
                    LOG.Error("Tag \'" + List_Address[Index - 1] + "\' 有问题写失败错误");
                    HasError = true;
                }

                return(!HasError);
            }
            catch (Exception ex)
            {
                //WarnLog("clsDeviceOPC.WriteData() " + ex.Message);
                LOG.Error(string.Format("OPCDataSource出错354行:{0},", ex.Message));
                return(false);
            }
        }
コード例 #2
0
        public void Write(int index)
        {
            try
            {
                short                 ItemCount             = 1;
                int[]                 SyncItemServerHandles = new int[2];
                object[]              SyncItemValues        = new object[2];
                System.Array          SyncItemServerErrors  = null;
                OPCAutomation.OPCItem AnOpcItem             = default(OPCItem);

                SyncItemServerHandles[1] = (int)Config.ServerHandles.GetValue(index);
                AnOpcItem = _OpcGroup.OPCItems.GetOPCItem((int)Config.ServerHandles.GetValue(index));

                Array ItsAnArray = null;
                short CanonDT    = 0;
                short vbArray    = 8192;

                CanonDT = AnOpcItem.CanonicalDataType;
                if (CanonDT > vbArray)
                {
                    CanonDT -= vbArray;
                }

                switch (CanonDT)
                {
                case (short)CanonicalDataTypes.CanonDtByte:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(byte), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToByte((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtChar:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(SByte), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSByte((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtWord:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt16), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt16(Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtShort:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int16), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt16((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtDWord:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt32), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt32((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtLong:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int32), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt32((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtFloat:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(float), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSingle((string)Config.ClientTags[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtDouble:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(double), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Config.ClientTags[index].Value;
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtBool:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(bool), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToBoolean(Config.ClientTags[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtString:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(string), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Config.ClientTags[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToString((string)Config.ClientTags[index].Value);
                    }
                    break;
                    // End case
                }

                // Invoke the SyncWrite operation.  Remember this call will wait until completion
                _OpcGroup.SyncWrite(ItemCount, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);

                if ((int)SyncItemServerErrors.GetValue(1) != 0)
                {
                    //MessageBox.Show("SyncItemServerError: " + SyncItemServerErrors.GetValue(1));
                }
            }
            catch (Exception ex)
            {
                // Error handling
                //MessageBox.Show("OPC server write item failed with exception: " + ex.Message + " INDEX = " + index.ToString() + " c=" + opcItemValueToWritte[index].Text + "/", "SimpleOPCInterface Exception", MessageBoxButtons.OK);
            }
        }
コード例 #3
0
        public void Write(int index)
        {
            try
            {
                short                 ItemCount             = 1;
                int[]                 SyncItemServerHandles = new int[2];
                object[]              SyncItemValues        = new object[2];
                System.Array          SyncItemServerErrors  = null;
                OPCAutomation.OPCItem AnOpcItem             = default(OPCItem);

                SyncItemServerHandles[1] = (int)Config.ServerHandles.GetValue(index);
                AnOpcItem = _OpcGroup.OPCItems.GetOPCItem((int)Config.ServerHandles.GetValue(index));

                Array ItsAnArray = null;
                short CanonDT    = 0;
                short vbArray    = 8192;

                CanonDT = AnOpcItem.CanonicalDataType;
                if (CanonDT > vbArray)
                {
                    CanonDT -= vbArray;
                }

                switch (CanonDT)
                {
                case (short)CanonicalDataTypes.CanonDtByte:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(byte), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToByte((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtChar:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(SByte), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSByte((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtWord:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt16), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt16(Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtShort:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int16), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt16((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtDWord:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(UInt32), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToUInt32((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtLong:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(Int32), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToInt32((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtFloat:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(float), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToSingle((string)Module1.TagList[index].Value);
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtDouble:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(double), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Module1.TagList[index].Value;
                    }
                    break;

                case (short)CanonicalDataTypes.CanonDtBool:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(bool), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToBoolean(Module1.TagList[index].Value);
                    }
                    break;
                // End case

                case (short)CanonicalDataTypes.CanonDtString:
                    if ((int)Config.ItemIsArray.GetValue(index) > 0)
                    {
                        ItsAnArray = Array.CreateInstance(typeof(string), (int)Config.ItemIsArray.GetValue(index));
                        if (!LoadArray(ref ItsAnArray, CanonDT, Module1.TagList[index].Name))
                        {
                        }
                        SyncItemValues[1] = ItsAnArray;
                    }
                    else
                    {
                        SyncItemValues[1] = Convert.ToString((string)Module1.TagList[index].Value);
                    }
                    break;
                    // End case
                }

                _OpcGroup.SyncWrite(ItemCount, SyncItemServerHandles, SyncItemValues, out SyncItemServerErrors);

                if ((int)SyncItemServerErrors.GetValue(1) != 0)
                {
                    //MessageBox.Show("SyncItemServerError: " + SyncItemServerErrors.GetValue(1));
                }
            }
            catch (Exception ex)
            {
            }
        }