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