/// <summary> /// 监视标签重载 /// </summary> /// <param name="itemName"></param> public void MonitorOPCItem(string itemName) { try { if (!this.clientHandleDict.ContainsKey(itemName)) { //var bro = this.opcServer.CreateBrowser(); //bro.ShowBranches(); //foreach (var branch in bro) //{ // Console.WriteLine(branch.ToString()); //} var index = this.clientNameList.Count; OPCAutomation.OPCItem tempItem = opcAGroup.OPCItems.AddItem(itemName, index); TagItem item = new TagItem() { Name = itemName, ClientHandler = index, //ClientHandler = itemIndex, ServerHandler = tempItem.ServerHandle, }; this.clientNameList.Add(itemName); this.clientHandleDict.Add(itemName, item); object value, timeStamp, quality; tempItem.Read(1, out value, out quality, out timeStamp); } } catch { } }
public void Write(string name, object value) { if (this.clientHandleDict.ContainsKey(name)) { OPCAutomation.OPCItem item = opcAGroup.OPCItems.GetOPCItem(this.clientHandleDict[name].ServerHandler); item.Write(value); } }
public void Attach(string serverAddress, NativeOpcGroup group) { _clientHandleIndex++; var address = serverAddress + "." + group.Name + "." + Address; try { ClientHandle = _clientHandleIndex; _item = group.OPCItems.AddItem(address, _clientHandleIndex); } catch (Exception ex) { this.Fatal(new InvalidOperationException("创建OpcItem失败,错误原因" + ex)); } }
public OPCChangeModel ReadValue(string name) { if (this.clientHandleDict.ContainsKey(name)) { OPCAutomation.OPCItem item = opcAGroup.OPCItems.GetOPCItem(this.clientHandleDict[name].ServerHandler); object value, quality, timestamp; item.Read(2, out value, out quality, out timestamp); return(new OPCChangeModel() { Name = name, Quality = (TagQuality)((short)quality), Value = item.Value, TimeStamp = (DateTime)timestamp, }); } return(null); }
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); } }
public void Write(int index) { try { // Write only 1 item short ItemCount = 1; // Create some local scope variables to hold the value to be sent. // These arrays could just as easily contain all of the item we have added. int[] SyncItemServerHandles = new int[2]; object[] SyncItemValues = new object[2]; System.Array SyncItemServerErrors = null; OPCAutomation.OPCItem AnOpcItem = default(OPCAutomation.OPCItem); // Get the Servers handle for the desired item. The server handles // were returned in add item subroutine. SyncItemServerHandles[1] = (int)Module1.ItemServerHandles.GetValue(index); AnOpcItem = Module1._OPCGroup.OPCItems.GetOPCItem((int)Module1.ItemServerHandles.GetValue(index)); // Load the value to be written using Item's Canonical Data Type to // convert to correct type. // See Kepware Application note on Canonical Data Types Array ItsAnArray = null; short CanonDT = 0; short vbArray = 8192; CanonDT = AnOpcItem.CanonicalDataType; // If it is an array, figure out the base type if (CanonDT > vbArray) { CanonDT -= vbArray; } switch (CanonDT) { case (short)CanonicalDataTypes.CanonDtByte: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(byte), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Convert.ToByte((string)Module1.TagList[index].Value); } break; // End case case (short)CanonicalDataTypes.CanonDtChar: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(SByte), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Convert.ToSByte((string)Module1.TagList[index].Value); } break; // End case case (short)CanonicalDataTypes.CanonDtWord: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(UInt16), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Convert.ToUInt16(Module1.TagList[index].Value); } break; // End case case (short)CanonicalDataTypes.CanonDtShort: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(Int16), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Convert.ToInt16((string)Module1.TagList[index].Value); } break; // End case case (short)CanonicalDataTypes.CanonDtDWord: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(UInt32), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Convert.ToUInt32((string)Module1.TagList[index].Value); } break; // End case case (short)CanonicalDataTypes.CanonDtLong: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(Int32), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Convert.ToInt32((string)Module1.TagList[index].Value); } break; // End case case (short)CanonicalDataTypes.CanonDtFloat: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(float), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Convert.ToSingle((string)Module1.TagList[index].Value); } break; // End case case (short)CanonicalDataTypes.CanonDtDouble: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(double), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Module1.TagList[index].Value; } break; // End case case (short)CanonicalDataTypes.CanonDtBool: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(bool), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Convert.ToBoolean(Module1.TagList[index].Value); } break; // End case case (short)CanonicalDataTypes.CanonDtString: if ((int)Module1.OPCItemIsArray.GetValue(index) > 0) { ItsAnArray = Array.CreateInstance(typeof(string), (int)Module1.OPCItemIsArray.GetValue(index)); if (!LoadArray(ref ItsAnArray, CanonDT, (string)Module1.TagList[index].Name)) { } SyncItemValues[1] = (object)ItsAnArray; } else { SyncItemValues[1] = Convert.ToString((string)Module1.TagList[index].Value); } break; // End case } // Invoke the SyncWrite operation. Remember this call will wait until completion Module1._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); } }
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) { } }