//Запись значений private bool TryWriteValues() { if (!IsConnected) { return(false); } try { if (_items.Count > 0) { int m = _itemsList == null ? 0 : _itemsList.Length;//Количество корректно добавленых точек + 1 Array serverHandles = new int[m]; Array valuesArr = new object[m]; Array errorsArr = new object[m]; for (int i = 1; i < m; i++) { var item = _itemsList[i]; serverHandles.SetValue(item.ServerHandler, i); valuesArr.SetValue(item.Value.LastMoment.Object, i); } _group.SyncWrite(m - 1, ref serverHandles, ref valuesArr, out errorsArr); } } catch (Exception ex) { Logger.AddError("Ошибка записи значений в OPC-сервер", ex); return(IsConnected = false); } return(true); }
/// <summary> /// 写入数据,handle,索引值数组,value对应值数组 /// 按照 OPC 规范,数组始终以索引 1 开始。 /// </summary> public bool WriteData(int[] handle, object[] value) { try { int[] temp = new int[handle.Length + 1]; temp[0] = 0; object[] temp1 = new object[handle.Length + 1]; temp1[0] = ""; for (int i = 1; i < temp.Length; i++) { temp[i] = handle[i - 1]; temp1[i] = value[i - 1]; } Array serverHandles = (Array)temp; Array values = (Array)temp1; Array Errors; //OPCAutomation.OPCDataSource.OPCCache; s7Group.SyncWrite(handle.Length, ref serverHandles, ref values, out Errors); return(true); } catch (Exception) { return(false); } }
/// <summary> /// 写入数据,handle,索引值数组,value对应值数组 /// </summary> public bool WriteData(int[] handle, int[] value) { try { int[] temp = new int[handle.Length + 1]; temp[0] = 0; object[] temp1 = new object[handle.Length + 1]; temp1[0] = ""; for (int i = 1; i < temp.Length; i++) { temp[i] = handle[i - 1]; temp1[i] = value[i - 1]; } Array serverHandles = (Array)temp; Array values = (Array)temp1; Array Errors; //OPCAutomation.OPCDataSource.OPCCache; //这种在断开的情况下,对应索引的Errors值非0(错误),正常情况下为0. s7Group.SyncWrite(handle.Length, ref serverHandles, ref values, out Errors); foreach (var item in Errors) { if (Convert.ToInt32(item) != 0) { return(false); } } //这种在断开的情况下会引发异常 ,适合单值写入,正常不会报异常。 //s7Group.OPCItems.GetOPCItem(handle[0]).Write(2400); return(true); } catch (Exception) { return(false); } }
public void SyncWrite(string[] writeItemNames, string[] writeItemValues) { OPCItem[] bItem = new OPCItem[writeItemNames.Length]; for (int i = 0; i < writeItemNames.Length; i++) { for (int j = 0; j < itemNames.Count; j++) { if (itemNames[j] == writeItemNames[i]) { bItem[i] = opcItems.GetOPCItem(itemHandleServer[j]); } } } int[] temp = new int[writeItemNames.Length + 1]; temp[0] = 0; for (int i = 1; i < writeItemNames.Length; i++) { temp[i] = bItem[i - 1].ServerHandle; } Array serverHandles = (Array)temp; object[] valueTemp = new object[writeItemNames.Length + 1]; valueTemp[0] = ""; for (int i = 1; i < writeItemNames.Length + 1; i++) { valueTemp[i] = writeItemValues[i - 1]; } Array values = (Array)valueTemp; Array Errors; opcGroup.SyncWrite(writeItemNames.Length, ref serverHandles, ref values, out Errors); GC.Collect(); }
/// <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); } }
public Boolean PutData(Array Values) { IntData.IsOPCConnected = true; OPCServer OPCSvr = new OPCServer(); try { Transacting = true; TransactionFlag = true; IntData.IsOPCConnected = true; opcgrp_server = new OPCServer(); opcgrp_server.Connect(ServerName); opcgrp_group = opcgrp_server.OPCGroups.Add(GroupName); TotalItemNumber = opcgrp_arrayPaths.Length - 1; opcgrp_group.OPCItems.DefaultIsActive = true; opcgrp_group.OPCItems.AddItems(TotalItemNumber, opcgrp_arrayPaths, opcgrp_arrayHandles, out opcgrp_arraySHandles, out opcgrp_arrayErrors); opcgrp_group.SyncWrite(TotalItemNumber, ref opcgrp_arraySHandles, ref Values, out opcgrp_arrayErrors); opcgrp_group.OPCItems.Remove(TotalItemNumber, ref opcgrp_arraySHandles, out opcgrp_arrayErrors); opcgrp_server.Disconnect(); OPCSvr = null; Transacting = false; Thread.Sleep(1000); return(true); } catch (Exception ex) { IntData.IsOPCConnected = false; Console.WriteLine(ex.Message); return(true); } }
public override void WriteOutputSignal(string signalName, object value) { int[] temp = new int[2] { 0, opcGroup.OPCItems.Item(signalName).ServerHandle }; Array serverHandles = (Array)temp; Array Errors; object[] valueTemp = new object[2] { "", value }; Array values = (Array)valueTemp; opcGroup.SyncWrite(1, ref serverHandles, ref values, out Errors);//同步写 if (Errors.GetValue(1).ToString() == "0") { throw new Exception("写入数据错误"); } else { } }
/// <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); }
//Запись значений protected internal override void WriteValues() { if (_items.Count > 0) { StartDanger(2, LoggerStability.Single, "Запись в OPC-сервер", true, 500) .Run(() => { int m = _itemsList == null ? 0 : _itemsList.Length; //Количество корректно добавленых точек + 1 Array serverHandles = new int[m]; Array valuesArr = new object[m]; Array errorsArr = new object[m]; for (int i = 1; i < m; i++) { var item = _itemsList[i]; serverHandles.SetValue(item.ServerHandler, i); valuesArr.SetValue(item.ValueSignal.InValue.Object, i); } _group.SyncWrite(m - 1, ref serverHandles, ref valuesArr, out errorsArr); }); } }
void WriteItems(OPCGroup ObjOPCGroup) { try { while (!stopThreads) { if (Workflow.plcInputs != null && Workflow.plcInputs.Count > 0) { CurrentPLCInput = Workflow.plcInputs.First(); if (previousPLCInput == null || !previousPLCInput.Equals(CurrentPLCInput)) { int index = Globals.INPUT_TAGS.FirstOrDefault(x => x.Name == "iPLC_STATUS").Index; ItemServerWriteValues.SetValue(CurrentPLCInput.iPlc_Status, index); // ItemServerWriteValues.SetValue(CurrentTestInput.input_bool, 1); // ItemServerWriteValues.SetValue(CurrentTestInput.input_int, 2); try { ObjOPCGroup.SyncWrite(tagIndexWriter - 1, ref writerItemServerHandles, ref ItemServerWriteValues, out writerItemServerErrors); } catch (Exception ex) { Console.WriteLine(ex.Message); throw; } previousPLCInput = CurrentPLCInput; } } //ItemServerWriteValues.SetValue(1.1, Array.IndexOf(OPCItemIDs,(object)("Bucket Brigade.Real1"))); System.Threading.Thread.Sleep(1000); } } catch (Exception ex) { Console.Write(ex.Message); throw; } }
public string SyncWriteTagValue(string tag, string writeStr) { try { Array Errors; if (itmHandleClientWriteData != 0) { OPCItem bItem = KepItemsWrite.GetOPCItem(itmHandleServerWriteData); //注:OPC中以1为数组的基数 int[] temp = new int[2] { 0, bItem.ServerHandle }; Array serverHandle = (Array)temp; //移除上一次选择的项 KepItemsWrite.Remove(KepItemsWrite.Count, ref serverHandle, out Errors); } itmHandleClientWriteData = Array.IndexOf(tagList, tag) + 1; KepItemWrite = KepItemsWrite.AddItem(tag, itmHandleClientWriteData); itmHandleServerWriteData = KepItemWrite.ServerHandle; OPCItem bItem_ = KepItemsWrite.GetOPCItem(itmHandleServerWriteData); int[] temp_ = new int[2] { 0, bItem_.ServerHandle }; Array serverHandles = (Array)temp_; object[] valueTemp = new object[2] { "", writeStr }; Array values = (Array)valueTemp; KepGroupWriteData.SyncWrite(1, ref serverHandles, ref values, out Errors); return("OK"); } catch (Exception err) { return(err.Message); } }
// 控制入口 public bool Write(string tagName, object value, out string errMsg) { errMsg = ""; try { // 为避免 COM 对象的并发访问, 再建一个连接 OPCServer client = new OPCServer(); client.Connect(this._progId, this._hostIp); OPCGroup group = client.OPCGroups.Add("WritingGroup"); OPCItem item = group.OPCItems.AddItem(tagName, 1); int[] serverHandle = new int[] { 0, item.ServerHandle }; object[] writingValue = new object[] { null, value }; group.SyncWrite(1, serverHandle, writingValue, out Array error); client.Disconnect(); // 据推测故障码是 COM 函数返回值, 0 表示正常 int errorCode = Convert.ToInt32(error.GetValue(1)); if (errorCode != 0) { errMsg = this._progId + "的条目: " + tagName + " 写入失败; " + errorCode; return(false); } return(true); } catch (Exception ex) { errMsg = this._progId + "的条目: " + tagName + "写入失败: " + ex.Message + "\n" + ex.StackTrace; TraceManagerForOPC.AppendErrMsg(errMsg); return(false); } }
public void SyncWrite(string[] sItemsID, object[] ivalue, string sGroupName, out Array Result) { try { int iNumItem = sItemsID.Length; int[] iServerHandler = GetServerHandles(sItemsID); object[] oValue = new object[ivalue.Length + 1]; for (int i = 0; i < ivalue.Length; i++) { oValue[i + 1] = ivalue[i]; } Array aServerHandler = (Array)iServerHandler; Array aValue = (Array)oValue; Array aError; KepGroup = KepGroups.GetOPCGroup(sGroupName); KepGroup.SyncWrite(iNumItem, ref aServerHandler, ref aValue, out aError); Result = aError; } catch { // Console.WriteLine("************** " + "SyncWrite Error" + " **************"); Result = null; } }