/// <summary> /// 写PLC数据,写入1个object数据 /// </summary> /// <param name="msg">写入数据</param> /// <param name="itemNum">操作的Items,0-sendDB,1-sendflag,2-recvDB,3-recvflag,4-TV1alarm,5-TV1ResetAlarm,以此类推</param> /// <returns>true表示成功</returns> public override bool Write(object msg, int itemNum) { try { if (m_subscription == null || m_subscription.Items == null || itemNum >= m_subscription.Items.Count()) { return(false); } ItemValue[] itemvalues = new ItemValue[1]; itemvalues[0] = new ItemValue((Opc.ItemIdentifier)m_subscription.Items[itemNum]); itemvalues[0].Value = msg; Opc.IdentifiedResult[] idr = m_subscription.Write(itemvalues); if (idr != null && idr.Length > 0) { return(true); } else { return(false); } } catch (Exception ex) { CLOGException.Trace("函数CommunicationLib.COPCAccessTimer.Write 异常", CBaseMethods.MyBase.GetExceptionInfo(ex)); return(false); } }
/// <summary> /// 写数据 /// </summary> /// <param name="opcDataItem"></param> /// <param name="value"></param> /// <returns></returns> public OpcResult Write(OpcDataItem opcDataItem, object value) { OpcResult opcResult = OpcResult.Unknow; //如果未连接那么返回 if (!this.IsConnected) { if (!Equals(null, OnErrorHappened)) { OnErrorHappened(this, new OpcErrorEventArgs(OpcResult.E_FAIL, "Opc服务器未连接,请先连接再写数据项", null)); } return(opcResult); } try { if (Equals(null, opcDataItem)) { throw new ArgumentNullException("opcDataItem参数不能为空。"); } Opc.Da.Subscription tmpSubscription = this.opcServer.Subscriptions.Cast <Opc.Da.Subscription>().FirstOrDefault(a => a.State.UpdateRate == opcDataItem.UpdateRate); var itemValue = new ItemValue((ItemIdentifier)tmpSubscription.Items.FirstOrDefault(a => a.ItemName == opcDataItem.Name)); //itemValue.Value = opcDataItem.NewValue; itemValue.Value = value; var results = tmpSubscription.Write(new ItemValue[] { itemValue }); //写多次 //for (int i = 0; i < 20; i++) //{ results = tmpSubscription.Write(new ItemValue[] { itemValue }); //} if (results.Count() < 1 && !Equals(null, OnErrorHappened)) { opcResult = OpcResult.E_UNKNOWN_ITEM_NAME; OnErrorHappened(this, new OpcErrorEventArgs(opcResult, "写入数据项时发生错误,未找到数据项:" + opcDataItem.Name, null)); opcDataItem.Quality = OpcResult.Unknow; return(opcResult); } foreach (var v in results) { Enum.TryParse <OpcResult>(v.ResultID.ToString(), out opcResult); if (v.ResultID != Opc.ResultID.S_OK && !Equals(null, OnErrorHappened)) { Enum.TryParse <OpcResult>(v.ResultID.ToString(), out opcResult); OnErrorHappened(this, new OpcErrorEventArgs(opcResult, "写入数据项时发生错误:" + v.ResultID.Name, null)); } }//end foreach return(opcResult); } catch (Exception ex) { if (!Equals(null, OnErrorHappened)) { OnErrorHappened(this, new OpcHelper.OpcErrorEventArgs(OpcResult.E_FAIL, "写入数据时错误。", ex)); } return(opcResult); } }
/// <summary> /// 同步方式向指定item名称的数据项写入内容 /// </summary> /// <param name="writeItemDataDic">写入的数据项Dictionary</param> public void WriteSynchronization(Dictionary <string, object> writeItemDataDic) { List <ItemValue> itemValueList = new List <ItemValue>(); foreach (string itemName in writeItemDataDic.Keys) { if (itemIndexDic.ContainsKey(itemName)) { ItemValue item = new ItemValue((ItemIdentifier)subscription.Items[itemIndexDic[itemName]]); item.Value = writeItemDataDic[itemName]; itemValueList.Add(item); } } subscription.Write(itemValueList.ToArray()); }
/// <summary> /// 写入数据 /// </summary> /// <param name="para">上位机需要发送的参数</param> /// <returns></returns> public bool Write(UpperPara para) { System.Type t = para.GetType(); FieldInfo[] infos = t.GetFields(); List <ItemValue> items = new List <ItemValue>(); foreach (FieldInfo info in infos) { ItemValue item = new ItemValue(subscription.Items.First(subItem => subItem.ItemName.EndsWith(info.Name))) { Value = info.GetValue(para) }; items.Add(item); } try { IdentifiedResult[] res = subscription.Write(items.ToArray()); foreach (var re in res) { if (!re.ResultID.Equals(Opc.ResultID.S_OK)) { return(false); } } return(true); } catch (Exception e) { return(false); } }
private void EnableDataWriteCallback(Subscription group, ItemValue[] writeValues) { Opc.IRequest req; group.Write(writeValues, 44.0, new WriteCompleteEventHandler(WriteCompleteCallback), out req); group.State.Active = true; Console.WriteLine(); }
private void OperationWriteOPC() { /* * Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[3]; * OPC_ItemID[0] = new Opc.Da.Item(); * OPC_ItemID[0].ItemName = BrakePressTag_OPC + "HMI_Operation_One_PB.VALUE"; * OPC_ItemID[1] = new Opc.Da.Item(); * OPC_ItemID[1].ItemName = BrakePressTag_OPC + "HMI_Operation_Two_PB.VALUE"; * OPC_ItemID[2] = new Opc.Da.Item(); * OPC_ItemID[2].ItemName = BrakePressTag_OPC + "HMI_Operation_Three_PB.VALUE"; * OPC_ItemID = OperationSelection_Write.AddItems(OPC_ItemID); */ Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[3]; OPC_ItemID[0] = new Opc.Da.Item(); OPC_ItemID[0].ItemName = BrakePressTag_OPC + "HMI_Operation_One_PB"; OPC_ItemID[1] = new Opc.Da.Item(); OPC_ItemID[1].ItemName = BrakePressTag_OPC + "HMI_Operation_Two_PB"; OPC_ItemID[2] = new Opc.Da.Item(); OPC_ItemID[2].ItemName = BrakePressTag_OPC + "HMI_Operation_Three_PB"; OPC_ItemID = OperationSelection_Write.AddItems(OPC_ItemID); Opc.Da.ItemValue[] ItemID_OPCValue = new Opc.Da.ItemValue[3]; ItemID_OPCValue[0] = new Opc.Da.ItemValue(); ItemID_OPCValue[1] = new Opc.Da.ItemValue(); ItemID_OPCValue[2] = new Opc.Da.ItemValue(); switch (SelectedOperation) { case 1: // Operation #1 ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle; ItemID_OPCValue[0].Value = 1; ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle; ItemID_OPCValue[1].Value = 0; ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle; ItemID_OPCValue[2].Value = 0; break; case 2: // Operation #2 ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle; ItemID_OPCValue[0].Value = 0; ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle; ItemID_OPCValue[1].Value = 1; ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle; ItemID_OPCValue[2].Value = 0; break; case 3: // Operation #3 ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle; ItemID_OPCValue[0].Value = 0; ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle; ItemID_OPCValue[1].Value = 0; ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle; ItemID_OPCValue[2].Value = 1; break; } Opc.IRequest OPCRequest; OperationSelection_Write.Write(ItemID_OPCValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest); }
private void WriteComponentThree_OPC() { Opc.Da.Item[] OPC_CompThreeWrite = new Opc.Da.Item[4]; OPC_CompThreeWrite[0] = new Opc.Da.Item(); OPC_CompThreeWrite[0].ItemName = SpotWeld_Tag_Name + "HMI_Operation_One_PB"; OPC_CompThreeWrite[1] = new Opc.Da.Item(); OPC_CompThreeWrite[1].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Two_PB"; OPC_CompThreeWrite[2] = new Opc.Da.Item(); OPC_CompThreeWrite[2].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Three_PB"; OPC_CompThreeWrite[3] = new Opc.Da.Item(); OPC_CompThreeWrite[3].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Four_PB"; OPC_CompThreeWrite = GroupWriteCompThree.AddItems(OPC_CompThreeWrite); Opc.Da.ItemValue[] WriteCompThreeValue = new Opc.Da.ItemValue[4]; WriteCompThreeValue[0] = new Opc.Da.ItemValue(); WriteCompThreeValue[0].ServerHandle = GroupWriteCompThree.Items[0].ServerHandle; WriteCompThreeValue[0].Value = 0; WriteCompThreeValue[1] = new Opc.Da.ItemValue(); WriteCompThreeValue[1].ServerHandle = GroupWriteCompThree.Items[1].ServerHandle; WriteCompThreeValue[1].Value = 0; WriteCompThreeValue[2] = new Opc.Da.ItemValue(); WriteCompThreeValue[2].ServerHandle = GroupWriteCompThree.Items[2].ServerHandle; WriteCompThreeValue[2].Value = 1; WriteCompThreeValue[3] = new Opc.Da.ItemValue(); WriteCompThreeValue[3].ServerHandle = GroupWriteCompThree.Items[3].ServerHandle; WriteCompThreeValue[3].Value = 0; Opc.IRequest req; GroupWriteCompThree.Write(WriteCompThreeValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out req); }
public override bool WriteTag(TagId tag, string value) { try { groupWrite.RemoveItems(groupWrite.Items); List <Item> writeList = new List <Item>(); List <ItemValue> valueList = new List <ItemValue>(); Item itemToWrite = new Item(); itemToWrite.ItemName = tag.TagName; ItemValue itemValue = new ItemValue(itemToWrite); itemValue.Value = value; writeList.Add(itemToWrite); valueList.Add(itemValue); groupWrite.AddItems(writeList.ToArray()); for (int i = 0; i < valueList.Count; i++) { valueList[i].ServerHandle = groupWrite.Items[i].ServerHandle; } groupWrite.Write(valueList.ToArray()); return(true); } catch (Exception ex) { logger.Logged("Error", "Не удалось записать значние OPC DA сервера {" + tag.TagName + "[" + value + "]}: {" + ex.Message + "}", "OpcDaPoller", "WriteTag"); return(false); } }
public void WriteData(string[] itemName, int[] value) { groupWrite.RemoveItems(groupWrite.Items); List <Item> writeList = new List <Item>(); List <ItemValue> valueList = new List <ItemValue>(); for (int x = 0; x < itemName.Length; x++) { Item itemToWrite = new Item(); itemToWrite.ItemName = itemName[x]; ItemValue itemValue = new ItemValue(itemToWrite); itemValue.Value = value[x]; writeList.Add(itemToWrite); valueList.Add(itemValue); } //IMPORTANT: //#1: assign the item to the group so the items gets a ServerHandle groupWrite.AddItems(writeList.ToArray()); // #2: assign the server handle to the ItemValue for (int i = 0; i < valueList.Count; i++) { valueList[i].ServerHandle = groupWrite.Items[i].ServerHandle; } // #3: write groupWrite.Write(valueList.ToArray()); }
/// <summary> /// 写入一个int16字型数据 /// </summary> /// <param name="data">待写入的字数据</param> /// <param name="itemNum">待写入项</param> /// <returns></returns> public bool Write(Int16 data, int itemNum) { try { ItemValue[] values = new ItemValue[1]; values[0] = new ItemValue((Opc.ItemIdentifier)subscription.Items[itemNum]); values[0].Value = data; Opc.IdentifiedResult[] idr = subscription.Write(values); if (idr != null && idr.Length > 0) { return(true); } else { return(false); } } catch (Exception ex) { throw new Exception("opc函数Write异常:" + ex.ToString()); } }
// Write The Component Value From Barcode Scanner private void ScanComponents_OPC() { Opc.Da.Item[] OPC_ScanComponent = new Opc.Da.Item[1]; OPC_ScanComponent[0] = new Opc.Da.Item(); OPC_ScanComponent[0].ItemName = Spotweld_Tag_Name + "DM8050_READ_RESULTS.DATA"; OPC_ScanComponent = ScanNewPart_Write.AddItems(OPC_ScanComponent); Opc.Da.ItemValue[] OPC_ScanComponent_Value = new Opc.Da.ItemValue[1]; OPC_ScanComponent_Value[0] = new Opc.Da.ItemValue(); OPC_ScanComponent_Value[0].ServerHandle = ScanNewPart_Write.Items[0].ServerHandle; OPC_ScanComponent_Value[0].Value = ScannerString; Opc.IRequest OPCRequest; ScanNewPart_Write.Write(OPC_ScanComponent_Value, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest); }
/// <summary> /// OPC同步写一个数据 /// </summary> /// <param name="opcitem">地址Name</param> /// <param name="WriteVaule">待写的地址Value</param> /// <returns>是否写成功</returns> public bool SynWriteOpcItem(string itemName, string writeValue) { try { ItemValue[] itemvalues = new ItemValue[1]; foreach (var item in OpcGroupClasssubscription.Items) { if (itemName == item.ItemName) { itemvalues[0] = new ItemValue((ItemIdentifier)item); itemvalues[0].Value = writeValue; break; } } OpcGroupClasssubscription.Write(itemvalues); return(true); } catch (Exception ex) { //ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); //log.Fatal("写心跳信号失败!", ex); return(false); } }
// Turn off Reset Input private void ConfirmWeldReset_Off_OPC() { Opc.Da.Item[] OPC_Reset_Off = new Opc.Da.Item[1]; OPC_Reset_Off[0] = new Opc.Da.Item(); OPC_Reset_Off[0].ItemName = SpotWeld_Tag_Name + "HMI_PB_Reset_Part_Weld_Count"; OPC_Reset_Off = ResetWeldCount_Off_Write.AddItems(OPC_Reset_Off); Opc.Da.ItemValue[] OPC_ResetValue_Off = new Opc.Da.ItemValue[1]; OPC_ResetValue_Off[0] = new Opc.Da.ItemValue(); OPC_ResetValue_Off[0].ServerHandle = ResetWeldCount_Write.Items[0].ServerHandle; OPC_ResetValue_Off[0].Value = 0; Opc.IRequest OPCRequest; ResetWeldCount_Off_Write.Write(OPC_ResetValue_Off, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest); }
// Turn on Reset Input private void ConfirmWeldReset_On_OPC(object sender, EventArgs e) { Opc.Da.Item[] OPC_Reset_On = new Opc.Da.Item[1]; OPC_Reset_On[0] = new Opc.Da.Item(); OPC_Reset_On[0].ItemName = SpotWeld_Tag_Name + "HMI_PB_Reset_Part_Weld_Count"; OPC_Reset_On = ResetWeldCount_Write.AddItems(OPC_Reset_On); Opc.Da.ItemValue[] OPC_ResetValue_On = new Opc.Da.ItemValue[1]; OPC_ResetValue_On[0] = new Opc.Da.ItemValue(); OPC_ResetValue_On[0].ServerHandle = ResetWeldCount_Write.Items[0].ServerHandle; OPC_ResetValue_On[0].Value = 1; Opc.IRequest OPCRequest; ResetWeldCount_Write.Write(OPC_ResetValue_On, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest); //ResetOff_Timer.Start(); // Start a Timer to turn off Input }
/********************************************************************************************************************* * * Buttons Region End * *********************************************************************************************************************/ #endregion /******************************************************************************************************************** * * OPC Region Start * -- Total: * ********************************************************************************************************************/ #region // Write Both On and Off Using OPC_TeachSensorValue private void TeachSensor_OPC() { Opc.Da.Item[] OPC_SensorWrite = new Opc.Da.Item[1]; OPC_SensorWrite[0] = new Opc.Da.Item(); OPC_SensorWrite[0].ItemName = SpotWeld_Tag_Name + "HMI_PB_TEACH_SENSOR"; OPC_WriteSensor.Add(OPC_SensorWrite[0]); TeachSensor_Write.AddItems(OPC_WriteSensor.ToArray()); Opc.Da.ItemValue[] WriteValue = new Opc.Da.ItemValue[1]; WriteValue[0] = new Opc.Da.ItemValue(); WriteValue[0].ServerHandle = TeachSensor_Write.Items[0].ServerHandle; WriteValue[0].Value = OPC_TeachSensorValue; Opc.IRequest req; TeachSensor_Write.Write(WriteValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out req); }
/// <summary> /// Synchronize write to the OPC Server /// </summary> public bool SyncWrite(ref ItemValue[] items) { if (Subscription == null) { return(false); } try { var results = Subscription.Write(items); return(true); } catch (Exception e) { //MessageBox.Show(e.Message); throw e; } }
// Turn off Scan New Part Input // Toggle Scan Hardware Input private void SetHardware_OPC() { Opc.Da.Item[] OPC_SetHardware = new Opc.Da.Item[2]; OPC_SetHardware[0] = new Opc.Da.Item(); OPC_SetHardware[0].ItemName = Spotweld_Tag_Name + "HMI_PB_SCAN_NEW_PART"; OPC_SetHardware[1] = new Opc.Da.Item(); OPC_SetHardware[1].ItemName = Spotweld_Tag_Name + "HMI_PB_SCAN_HARDWARE"; OPC_SetHardware = Hardware_Write.AddItems(OPC_SetHardware); Opc.Da.ItemValue[] OPC_SetHardware_Value = new Opc.Da.ItemValue[2]; OPC_SetHardware_Value[0] = new Opc.Da.ItemValue(); OPC_SetHardware_Value[0].ServerHandle = Hardware_Write.Items[0].ServerHandle; OPC_SetHardware_Value[0].Value = 0; OPC_SetHardware_Value[1] = new Opc.Da.ItemValue(); OPC_SetHardware_Value[1].ServerHandle = Hardware_Write.Items[1].ServerHandle; OPC_SetHardware_Value[1].Value = HMI_PB_SCAN_HARDWARE_VALUE; Opc.IRequest OPCRequest; Hardware_Write.Write(OPC_SetHardware_Value, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest); }
public void Work() { int i = 5; if (i == 1) { url = new Opc.URL("opcda://192.168.0.4/OPC.PHDServerDA.1"); server = new Opc.Da.Server(fact, null); server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential())); Opc.Da.Item[] itemCollection = new Opc.Da.Item[1]; itemCollection[0] = new Opc.Da.Item { ItemName = "RTOS.TEST.PV", MaxAge = -1 }; Opc.Da.ItemValueResult[] result = server.Read(itemCollection); Console.WriteLine(result[0].Value); server.Disconnect(); } else if (i == 2) { url = new Opc.URL("opcda://192.168.0.4/OPC.PHDServerDA.1"); server = new Opc.Da.Server(fact, null); server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential())); groupState = new Opc.Da.SubscriptionState(); groupState.Name = "Group"; groupState.ServerHandle = null; groupState.ClientHandle = Guid.NewGuid().ToString(); groupState.Active = true; groupState.UpdateRate = 1000; groupState.Deadband = 0; groupState.Locale = null; groupRead = (Opc.Da.Subscription)server.CreateSubscription(groupState); string[] itemName = { "RTOS.TEST.PV", "RTOR.TI1237.DACA.PV" }; Opc.Da.Item[] items = new Opc.Da.Item[2]; for (int j = 0; j < items.Length; j++) { items[j] = new Opc.Da.Item(); items[j].ClientHandle = Guid.NewGuid().ToString(); items[j].ItemPath = null; items[j].ItemName = itemName[j]; } groupRead.AddItems(items); //groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(group_DataChanged); Opc.Da.ItemValueResult[] results = groupRead.Read(groupRead.Items); foreach (ItemValueResult result in results) { Console.WriteLine("{0},{1},{2},{3}", result.ItemName, result.Value, result.Quality, result.Timestamp); } //groupRead.DataChanged -= new Opc.Da.DataChangedEventHandler(group_DataChanged); groupRead.RemoveItems(groupRead.Items); server.CancelSubscription(groupRead); groupRead.Dispose(); server.Disconnect(); } else if (i == 3) { url = new Opc.URL("opcda://192.168.0.4/OPC.PHDServerDA.1"); server = new Opc.Da.Server(fact, null); server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential())); groupState = new Opc.Da.SubscriptionState(); groupState.Name = "Group"; groupState.ServerHandle = null; groupState.ClientHandle = Guid.NewGuid().ToString(); groupState.Active = true; groupState.UpdateRate = 1000; groupState.Deadband = 0; groupState.Locale = null; groupWrite = (Opc.Da.Subscription)server.CreateSubscription(groupState); string[] itemName = { "RTOS.TEST.PV", "RTOS.TEST2.PV" }; Opc.Da.Item[] items = new Opc.Da.Item[2]; for (int j = 0; j < items.Length; j++) { items[j] = new Opc.Da.Item(); items[j].ClientHandle = Guid.NewGuid().ToString(); items[j].ItemPath = null; items[j].ItemName = itemName[j]; } groupWrite.AddItems(items); //groupRead.DataChanged += new Opc.Da.DataChangedEventHandler(group_DataChanged); Opc.Da.ItemValue[] writeValues = new Opc.Da.ItemValue[groupWrite.Items.Length]; for (int k = 0; k < groupWrite.Items.Length; k++) { writeValues[k] = new Opc.Da.ItemValue((ItemIdentifier)groupWrite.Items[k]); } writeValues[0].Value = 5; writeValues[1].Value = 6; groupWrite.Write(writeValues); Console.WriteLine("Press any key to close..."); Console.ReadLine(); //groupRead.DataChanged -= new Opc.Da.DataChangedEventHandler(group_DataChanged); groupWrite.RemoveItems(groupWrite.Items); server.CancelSubscription(groupWrite); groupWrite.Dispose(); server.Disconnect(); } else if (i == 4) { url = new Opc.URL("opchda://192.168.0.4/OPC.PHDServerHDA.1"); serverHda = new Opc.Hda.Server(fact, null); serverHda.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential())); try { } catch (Opc.ConnectFailedException opcConnEx) { Console.WriteLine(string.Format("Could not connect to server {0}", "OPC.PHDServerHDA.1")); Console.WriteLine(opcConnEx.ToString()); } Console.WriteLine("Are we connected? " + serverHda.IsConnected); string[] itemName = { "RTOS.TEST.PV", "RTOS.TEST2.PV" }; Opc.Hda.Trend groupHda = new Trend(serverHda); groupHda.Name = "HDA"; groupHda.AggregateID = AggregateID.NOAGGREGATE; DateTime startTime = DateTime.Now.AddHours(-1); DateTime endTime = DateTime.Now; groupHda.StartTime = new Opc.Hda.Time(startTime); groupHda.EndTime = new Opc.Hda.Time(endTime); groupHda.MaxValues = 0; groupHda.IncludeBounds = false; serverHda.Trends.Add(groupHda); Opc.Hda.Item[] items = new Opc.Hda.Item[2]; for (int m = 0; m < 2; m++) { items[m] = new Opc.Hda.Item(); items[m].ItemName = itemName[m]; items[m].ItemPath = null; items[m].ClientHandle = Guid.NewGuid().ToString(); } IdentifiedResult[] identifiedResult = serverHda.CreateItems(items); if (identifiedResult != null) { foreach (IdentifiedResult item in identifiedResult) { if (item.ResultID.Succeeded()) { groupHda.Items.Add(new Opc.Hda.Item(item)); } } } Opc.Hda.ItemValueCollection[] results = groupHda.ReadRaw(); Opc.Hda.ItemValueCollection result1 = results[0]; foreach (Opc.Hda.ItemValue result in result1) { Console.WriteLine("{0},{1},{2}", result.Value, result.Quality, result.Timestamp); } serverHda.Disconnect(); } else if (i == 5) { url = new Opc.URL("opchda://192.168.0.4/OPC.PHDServerHDA.1"); serverHda = new Opc.Hda.Server(fact, null); serverHda.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential())); try { } catch (Opc.ConnectFailedException opcConnEx) { Console.WriteLine(string.Format("Could not connect to server {0}", "OPC.PHDServerHDA.1")); Console.WriteLine(opcConnEx.ToString()); } Console.WriteLine("Are we connected? " + serverHda.IsConnected); string[] itemName = { "RTOR.TI1237.DACA.PV", "RTOS.TEST2.PV" }; Opc.Hda.Trend groupHda = new Trend(serverHda); groupHda.Name = "HDA"; groupHda.AggregateID = AggregateID.AVERAGE; DateTime startTime = DateTime.Now.AddHours(-1); DateTime endTime = DateTime.Now; //TimeSpan span = endTime.Subtract(startTime); //int calcInterval = ((int)span.TotalSeconds); //groupHda.ResampleInterval = (decimal)calcInterval; //DateTime startTime = new DateTime(2020, 6, 12, 9, 0, 0, 0); //DateTime endTime = new DateTime(2020, 6, 12, 10, 0, 0, 0); int calcInterval = 300; groupHda.ResampleInterval = (decimal)calcInterval; groupHda.StartTime = new Opc.Hda.Time(startTime); groupHda.EndTime = new Opc.Hda.Time(endTime); groupHda.MaxValues = 0; groupHda.IncludeBounds = false; serverHda.Trends.Add(groupHda); Opc.Hda.Item[] items = new Opc.Hda.Item[2]; for (int m = 0; m < 2; m++) { items[m] = new Opc.Hda.Item(); items[m].ItemName = itemName[m]; items[m].ItemPath = null; items[m].ClientHandle = Guid.NewGuid().ToString(); } IdentifiedResult[] identifiedResult = serverHda.CreateItems(items); if (identifiedResult != null) { foreach (IdentifiedResult item in identifiedResult) { if (item.ResultID.Succeeded()) { groupHda.Items.Add(new Opc.Hda.Item(item)); } } } Opc.Hda.ItemValueCollection[] results = groupHda.ReadProcessed(); Opc.Hda.ItemValueCollection result1 = results[0]; foreach (Opc.Hda.ItemValue result in result1) { Console.WriteLine("{0},{1},{2}", result.Value, result.Quality, result.Timestamp); } serverHda.Disconnect(); } }
// Write the Selected Operation Value to the PLC private void OperationWriteOPC() { Opc.Da.Item[] OPC_ItemID = new Opc.Da.Item[8]; OPC_ItemID[0] = new Opc.Da.Item(); OPC_ItemID[0].ItemName = SpotWeld_Tag_Name + "HMI_Operation_One_PB"; OPC_ItemID[1] = new Opc.Da.Item(); OPC_ItemID[1].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Two_PB"; OPC_ItemID[2] = new Opc.Da.Item(); OPC_ItemID[2].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Three_PB"; OPC_ItemID[3] = new Opc.Da.Item(); OPC_ItemID[3].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Four_PB"; OPC_ItemID[4] = new Opc.Da.Item(); OPC_ItemID[4].ItemName = SpotWeld_Tag_Name + "HMI_Operation_One_Selected"; OPC_ItemID[5] = new Opc.Da.Item(); OPC_ItemID[5].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Two_Selected"; OPC_ItemID[6] = new Opc.Da.Item(); OPC_ItemID[6].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Three_Selected"; OPC_ItemID[7] = new Opc.Da.Item(); OPC_ItemID[7].ItemName = SpotWeld_Tag_Name + "HMI_Operation_Four_Selected"; OPC_ItemID = OperationSelection_Write.AddItems(OPC_ItemID); Opc.Da.ItemValue[] ItemID_OPCValue = new Opc.Da.ItemValue[8]; ItemID_OPCValue[0] = new Opc.Da.ItemValue(); ItemID_OPCValue[1] = new Opc.Da.ItemValue(); ItemID_OPCValue[2] = new Opc.Da.ItemValue(); ItemID_OPCValue[3] = new Opc.Da.ItemValue(); ItemID_OPCValue[4] = new Opc.Da.ItemValue(); ItemID_OPCValue[5] = new Opc.Da.ItemValue(); ItemID_OPCValue[6] = new Opc.Da.ItemValue(); ItemID_OPCValue[7] = new Opc.Da.ItemValue(); // switch the values written based on which operation was selected switch (SelectedOperation) { case 1: // Operation #1 ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle; ItemID_OPCValue[0].Value = 1; ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle; ItemID_OPCValue[1].Value = 0; ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle; ItemID_OPCValue[2].Value = 0; ItemID_OPCValue[3].ServerHandle = OperationSelection_Write.Items[3].ServerHandle; ItemID_OPCValue[3].Value = 0; ItemID_OPCValue[4].ServerHandle = OperationSelection_Write.Items[4].ServerHandle; ItemID_OPCValue[4].Value = 1; ItemID_OPCValue[5].ServerHandle = OperationSelection_Write.Items[5].ServerHandle; ItemID_OPCValue[5].Value = 0; ItemID_OPCValue[6].ServerHandle = OperationSelection_Write.Items[6].ServerHandle; ItemID_OPCValue[6].Value = 0; ItemID_OPCValue[7].ServerHandle = OperationSelection_Write.Items[7].ServerHandle; ItemID_OPCValue[7].Value = 0; break; case 2: // Operation #2 ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle; ItemID_OPCValue[0].Value = 0; ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle; ItemID_OPCValue[1].Value = 1; ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle; ItemID_OPCValue[2].Value = 0; ItemID_OPCValue[3].ServerHandle = OperationSelection_Write.Items[3].ServerHandle; ItemID_OPCValue[3].Value = 0; ItemID_OPCValue[4].ServerHandle = OperationSelection_Write.Items[4].ServerHandle; ItemID_OPCValue[4].Value = 0; ItemID_OPCValue[5].ServerHandle = OperationSelection_Write.Items[5].ServerHandle; ItemID_OPCValue[5].Value = 1; ItemID_OPCValue[6].ServerHandle = OperationSelection_Write.Items[6].ServerHandle; ItemID_OPCValue[6].Value = 0; ItemID_OPCValue[7].ServerHandle = OperationSelection_Write.Items[7].ServerHandle; ItemID_OPCValue[7].Value = 0; break; case 3: // Operation #3 ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle; ItemID_OPCValue[0].Value = 0; ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle; ItemID_OPCValue[1].Value = 0; ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle; ItemID_OPCValue[2].Value = 1; ItemID_OPCValue[3].ServerHandle = OperationSelection_Write.Items[3].ServerHandle; ItemID_OPCValue[3].Value = 0; ItemID_OPCValue[4].ServerHandle = OperationSelection_Write.Items[4].ServerHandle; ItemID_OPCValue[4].Value = 0; ItemID_OPCValue[5].ServerHandle = OperationSelection_Write.Items[5].ServerHandle; ItemID_OPCValue[5].Value = 0; ItemID_OPCValue[6].ServerHandle = OperationSelection_Write.Items[6].ServerHandle; ItemID_OPCValue[6].Value = 1; ItemID_OPCValue[7].ServerHandle = OperationSelection_Write.Items[7].ServerHandle; ItemID_OPCValue[7].Value = 0; break; case 4: // Operation #4 ItemID_OPCValue[0].ServerHandle = OperationSelection_Write.Items[0].ServerHandle; ItemID_OPCValue[0].Value = 0; ItemID_OPCValue[1].ServerHandle = OperationSelection_Write.Items[1].ServerHandle; ItemID_OPCValue[1].Value = 0; ItemID_OPCValue[2].ServerHandle = OperationSelection_Write.Items[2].ServerHandle; ItemID_OPCValue[2].Value = 0; ItemID_OPCValue[3].ServerHandle = OperationSelection_Write.Items[3].ServerHandle; ItemID_OPCValue[3].Value = 1; ItemID_OPCValue[4].ServerHandle = OperationSelection_Write.Items[4].ServerHandle; ItemID_OPCValue[4].Value = 0; ItemID_OPCValue[5].ServerHandle = OperationSelection_Write.Items[5].ServerHandle; ItemID_OPCValue[5].Value = 0; ItemID_OPCValue[6].ServerHandle = OperationSelection_Write.Items[6].ServerHandle; ItemID_OPCValue[6].Value = 0; ItemID_OPCValue[7].ServerHandle = OperationSelection_Write.Items[7].ServerHandle; ItemID_OPCValue[7].Value = 1; break; } Opc.IRequest OPCRequest; OperationSelection_Write.Write(ItemID_OPCValue, 123, new Opc.Da.WriteCompleteEventHandler(WriteCompleteCallback), out OPCRequest); }