//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); } }
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 { 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) { } }