public bool AddItem(Tag bi) { try { #region *********集合已包含此Tag,则退出************************* foreach (Tag item in this.Tags) { if (item.TagName == bi.TagName) { MessageBox.Show("Tag重复:在在重复的Tag点", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning); return(false); } } #endregion OPCItems items = this.OPCGroup.OPCItems;//根据指定的组类别,取出组下的标签集合 Func <Tag, int> f = p => { if (p != null) { return(p.ExtraAs <DaExtra>().ItmHandleClient + 1); } return(0); }; int itmHandleBegin = f(Tags.LastOrDefault());//itmHandleBegin的逻辑为最后一个标签itmHandle值+1 //关键,此步骤将标签添加入OPCclient的监听列表中 OPCItem ki = items.AddItem(bi.OpcTagName, itmHandleBegin); bi.ExtraAs <DaExtra>().ItmHandleClient = itmHandleBegin; bi.DataType = Enum.GetName(typeof(OpcTypes.CanonicalDataTypesForDa), ki.CanonicalDataType); bi.ExtraAs <DaExtra>().ItmHandleServer = ki.ServerHandle; Tags.Add((Tag)(Object)bi); return(true); } catch (Exception) { throw; } }
private void listboxAlias_SelectedIndexChanged(object sender, EventArgs e) { try { if (itmHandleClient != 0) { this.txtTagValue.Text = ""; this.txtQualities.Text = ""; this.txtTimeStamps.Text = ""; Array Errors; OPCItem bItem = KepItems.GetOPCItem(itmHandleServer); //注:OPC中以1为数组的基数 int[] temp = new int[2] { 0, bItem.ServerHandle }; Array serverHandle = (Array)temp; //移除上一次选择的项 KepItems.Remove(KepItems.Count, ref serverHandle, out Errors); } itmHandleClient = 1234; KepItem = KepItems.AddItem(listboxAlias.SelectedItem.ToString(), itmHandleClient); itmHandleServer = KepItem.ServerHandle; } catch (Exception err) { //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。 itmHandleClient = 0; txtTagValue.Text = "Error ox"; txtQualities.Text = "Error ox"; txtTimeStamps.Text = "Error ox"; MessageBox.Show("此项为系统保留项:" + err.Message, "提示信息"); } }
//连接 private void buttonConnect_Click(object sender, EventArgs e) { lock (lockobj) { if (OPCServer == null) { OPCServer = new OPCServer(); } if (OPCServer.ServerState == (int)OPCServerState.OPCRunning) { return; } OPCServer.Connect((string)jo["OPCServerName"]); int i = 1; foreach (KeyValuePair <string, JToken> kvp in (JObject)jo["Groups"]) { OPCGroup G = OPCServer.OPCGroups.Add(kvp.Key); foreach (KeyValuePair <string, JToken> kvpp in (JObject)kvp.Value) { OPCItem oItem = G.OPCItems.AddItem((string)kvpp.Value, i); i++; LocalOPCItems.Add(kvp.Key + "_" + kvpp.Key, oItem); } } } }
/// <summary> /// 获取节点的所有值,显示在listview中 /// </summary> private void ShowListView() { if (!CreateGroup()) { return; } object value; object quality; object timestamp; //itmHandlerClient = 1234; OPCBrowser opcbrowser = ServerConnect.KepServer.CreateBrowser(); list = RecurBrowse(opcbrowser); for (int i = 0; i < list.Count; i++) { KepItem = KepItems.AddItem(list[i], itmHandlerClient); itmHandlerServer = KepItem.ServerHandle; KepItem.Read((short)OPCDataSource.OPCDevice, out value, out quality, out timestamp); lv = new ListViewItem(list[i]); lv.SubItems.Add(Convert.ToString(value)); lv.SubItems.Add(quality.ToString()); lv.SubItems.Add(timestamp.ToString()); listView1.Items.Add(lv); } }
public object itemREAD(OPCItem item) { object ItemValues; object Qualities; object TimeStamps; item.Read(1, out ItemValues, out Qualities, out TimeStamps); return(ItemValues); }
public void Activate() { if (IsActive) { throw new OpcValueException("Двойная активация OPC тега: " + Name); } if (string.IsNullOrEmpty(Name)) { throw new OpcValueException("Имя OPC параметра не задано."); } if (server.ServerState != (int)OPCServerState.OPCRunning) { throw new OpcValueException( "Ошибка при активации тега: OPC сервер не подключен."); } GroupName = Guid.NewGuid().ToString(); opcGroup = server.OPCGroups.Add(GroupName); opcItem = opcGroup.OPCItems.AddItem(Name, opcGroup.ClientHandle); if (isListenValueChanging) { opcGroup.DataChange += ValueChanged; opcGroup.UpdateRate = UpdateRate; opcGroup.IsActive = true; opcGroup.IsSubscribed = true; } IsActive = true; }
private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) //列表 { try { if (_itmHandleClient != 0) { TextBox3.Text = ""; Array errors; OPCItem bItem = _kepItems.GetOPCItem(_itmHandleServer); //注: OPC中以1为数组的基数 int[] temp = new int[] { 0, bItem.ServerHandle }; Array serverHandle = temp; //移除上一次选择的项 _kepItems.Remove(_kepItems.Count, ref serverHandle, out errors); } _itmHandleClient = 1234; _kepItem = _kepItems.AddItem(ListBox1.SelectedItem.ToString(), _itmHandleClient); TextBox2.Text = Convert.ToString(ListBox1.SelectedItem); _itmHandleServer = _kepItem.ServerHandle; } catch (Exception err) { //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理 _itmHandleClient = 0; TextBox3.Text = "Error ox"; MessageBox.Show("此项为系统保留项:" + err.Message, "提示信息"); } }
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(); }
public bool Write(string groupName, string itemID, object val) { bool re = false; try { OPCGroup myGroup = myServer.OPCGroups.GetOPCGroup(groupName); if (myGroup == null) { return(false); } OPCItem myItem = myGroup.OPCItems.Item(itemID); if (myItem == null) { return(false); } myItem.Write(val); re = true; } catch (System.Exception ex) { re = false; } return(re); }
/// <summary> /// 初始化OPC服务 /// </summary> public void connectOPC() { KepServer = new OPCServer(); try { if (type == 0) { // KepServer.Connect("OPC.SimaticNET", "192.168.48.232"); KepServer.Connect("KEPware.KEPServerEx.V6", "192.168.36.113"); } else if (type == 1) { KepServer.Connect("OPCServer.WinCC", "192.168.36.135"); } else if (type == 2) { KepServer.Connect("OPCServer.WinCC", "192.168.48.135"); } else if (type == 3) { KepServer.Connect("OPCServer.WinCC", "192.168.36.125"); } else if (type == 4) { KepServer.Connect("OPCServer.WinCC", "192.168.48.125"); } else if (type == 5) { //KepServer.Connect("KEPware.KEPServerEx.V5", "192.168.48.232"); KepServer.Connect("KEPware.KEPServerEx.V6", "192.168.48.233"); } opc_connected = true; KepGroups = KepServer.OPCGroups; KepGroup = KepGroups.Add("myGroup"); KepGroup.IsSubscribed = true; KepGroup.DataChange += Group_DataChange; KepEventGroup = KepGroups.Add("myEventGroup"); KepEventGroup.IsSubscribed = true; foreach (var item in listTag) { if (item.scanrate > 0) { OPCItem myItem = KepGroup.OPCItems.AddItem(item.name, item.id); myItem.ClientHandle = item.id; item.itmHandleServer = myItem.ServerHandle; } else { OPCItem myItem = KepEventGroup.OPCItems.AddItem(item.name, item.id); item.itmHandleServer = myItem.ServerHandle; } } } catch (Exception ex) { throw new Exception("初始化OPC服务时,出现错误:" + type + ex.ToString()); } }
/// <summary> /// 移除项,注意:此接口目前未能实现,需要继续调试 /// </summary> /// <param name="groupName"></param> /// <param name="itemName"></param> /// <param name="reStr"></param> /// <returns></returns> public bool RemoveItem(string groupName, string itemName, out string reStr) { reStr = ""; try { OPCGroup myGroup = GetGroup(groupName); if (myGroup == null) { reStr = "组:" + groupName + "不存在 "; return(false); } OPCItems items = myGroup.OPCItems; OPCItem item = items.Item(itemName); Array itemHandles = Array.CreateInstance(typeof(int), 1); itemHandles.SetValue(item.ServerHandle, 0); Array errors = null;// Array.CreateInstance(typeof(long), 10); items.Remove((int)1, ref itemHandles, out errors); reStr = "移除项:" + itemName + "成功!"; return(true); } catch (System.Exception ex) { reStr = "移除项:" + itemName + "失败,返回异常:" + ex.Message; return(false); } }
public override bool Write(string itemName, object state) { OPCItem item = GetItem(itemName); WriteToLog("ItemName:" + itemName + " Value: " + state.ToString()); return(item.Write(state)); }
private void AddGroupItems()//添加组 { try { //IList<Model.PZYS_Storage.StorageTag> StorTagList = BusinessLogicLayer.PZYS_Storage.StorageTag.GetAllStorageTagList(); //itmHandleServer; KepItems = KepGroup.OPCItems; //MyItems2 = MyGroup2.OPCItems; OPCItem[] KepItem = new OPCItem[3]; //添加item KepItem[0] = KepItems.AddItem("Channel_0_User_Defined.Random.Random1", 0); //byte.Sine.Sine1 KepItem[1] = KepItems.AddItem("Channel_0_User_Defined.Random.Random2", 0); KepItem[2] = KepItems.AddItem("Channel_0_User_Defined.Random.Random3", 0); //byte.Sine.Sine1 // MyItem[1] = MyItems.AddItem("BPJ.Db1.dbw10", 1);//short //MyItem[2] = MyItems.AddItem("BPJ.Db16.dbx0", 2);//bool //MyItem[3] = MyItems.AddItem("BPJ.Db11.S0", 3);//string //移除组内item //Array Errors; //int[] temp = new int[] { 0, MyItem[3].ServerHandle }; //Array serverHandle = (Array)temp; //MyItems.Remove(1, ref serverHandle, out Errors); // MyItem[3] = MyItems.AddItem("BPJ.Db11.S0", 3);//string //MyItem2[0] = MyItems2.AddItem("BPJ.Db1.dbb96", 0);//byte //MyItem2[1] = MyItems2.AddItem("BPJ.Db1.dbw10", 1);//short //MyItem2[2] = MyItems2.AddItem("BPJ.Db16.dbx0", 2);//bool //MyItem2[3] = MyItems2.AddItem("BPJ.Db11.S0", 3);//string } catch (Exception err) { MessageBox.Show("创建项出现错误:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
private static void GetTagValue(string tagName) { try { readValue = ""; if (itmHandleClient != 0) { Array Errors; OPCItem bItem = KepItems.GetOPCItem(itmHandleServer); //注:OPC中以1为数组的基数 int[] temp = new int[2] { 0, bItem.ServerHandle }; Array serverHandle = (Array)temp; //移除上一次选择的项 KepItems.Remove(KepItems.Count, ref serverHandle, out Errors); } itmHandleClient = 12345; KepItem = KepItems.AddItem(tagName, itmHandleClient); itmHandleServer = KepItem.ServerHandle; } catch (Exception err) { //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。 itmHandleClient = 0; Console.WriteLine("Read value error:" + err.Message); } }
public override void ReadValue(Command command, Action <int, PointValueType, object> onValueReceive) { int index = command.DeviceAddress.IndexOf("|"); string ip = command.DeviceAddress.Substring(0, index); string progid = command.DeviceAddress.Substring(index + 1); OPC.Data.OpcServer opcServer = new OPC.Data.OpcServer(); opcServer.Connect(progid, ip); OPC.Data.OpcGroup group1 = new OPC.Data.OpcGroup("g2", false, 1000, 1000, 0); opcServer.OpcGroups.Add(group1); int tranid = 0; foreach (var point in command.Points) { OPCItem item = new OPCItem(point, tranid++); group1.Items.Add(item); } var states = group1.Items.GetItemValues(); foreach (OPCItemState itemState in states) { pushValue(itemState, onValueReceive); } opcServer.Disconnect(); }
//public void SetButtonSignal(int station, string control_key, bool value) //{ // string buttonHashKey = station.ToString() + "-" + control_key; // try // { // this.set_MXDO_Signal(station, control_key, value); // } // catch (Exception ex) // { // this.myLog.LogAlert(AlertType.Error, this.id.ToString(), this.GetType().ToString(), "ResetButtonSignal()", // ex.Message, "system"); // } //} public bool ReadVariableValue(int servHandle) { bool result = false; try { OPCItem opc_item_s = this.myOPCGroup.OPCItems.GetOPCItem(servHandle); short source = 0; // OPC_DS_CACHE or OPC_DS_DEVICE object value = null; object quality = null; object timestamp = null; if (opc_item_s != null) { //opc_item_s.Read(source, out value, out quality, out timestamp); value = opc_item_s.Value; result = Convert.ToBoolean(value); } else { this.myLog.LogAlert(AlertType.Error, this.id.ToString(), this.GetType().ToString(), "ReadVariableValue()", "opc_item_s is null, servHandle = " + servHandle.ToString(), "system"); } return(result); } catch (Exception ex) { this.myLog.LogAlert(AlertType.Error, this.id.ToString(), this.GetType().ToString(), "ReadVariableValue()", ex.Message, "system"); return(result); } }
private void myOPCItems_Fill(List <VarItem> OPCVariables, OPCItems items) { for (int i = 0; i < OPCVariables.Count; i++) { VarItem myVarItem = OPCVariables[i]; OPCItem myItem = items.AddItem(myVarItem.name, myVarItem.array_index); // Check if the OPC variable consist in OPC server's configuration !!! if (myItem == null) { this.myLog.LogAlert(AlertType.Error, this.id.ToString(), this.GetType().ToString(), "myOPCItems_Fill()", "Exception: unknown variable '" + myVarItem.name + "' !!" , "system"); OPCVariables.Remove(OPCVariables[i]); } else { OPCVariables[i].servHandle = myItem.ServerHandle; this.myLog.LogAlert(AlertType.System, this.id.ToString(), this.GetType().ToString(), "myOPCItems_Fill()", this.OPCServerName + ", myVarItem (name; arr_idx) = " + myVarItem.name.ToString() + ", " + myVarItem.array_index.ToString() + ", myItem.ServerHandle=" + myItem.ServerHandle.ToString() + ", myItem.Quality=" + myItem.Quality.ToString() + ", myItem.ItemID=" + myItem.ItemID.ToString() // + ", myItem.Value=" + myItem.Value.ToString() , "system" ); } } }
public bool AddItem(string groupName, string itemName, out string reStr) { reStr = ""; try { int itemHandle = 0; OPCGroup myGroup = GetGroup(groupName); if (myGroup == null) { reStr = "添加项:" + itemName + "失败,组名不存在"; return(false); } OPCItem item = myGroup.OPCItems.AddItem(itemName, itemHandle); if (item == null) { reStr = "添加项:" + itemName + "失败"; return(false); } reStr = groupName + " 添加项:" + itemName + "成功"; // Console.WriteLine(reStr); return(true); } catch (System.Exception ex) { reStr = groupName + "添加项:" + itemName + "失败,返回异常:" + ex.Message; return(false); } }
void runme() { int[] ServerHandle = new int[2]; // const int READASYNC_ID = 1; const int WRITEASYNC_ID = 2; MyOpcServer = new OPCServer(); MyOpcServer.Connect("Kepware.KEPServerEX.V6", "127.0.0.1"); groups = MyOpcServer.OPCGroups; MyOpcGroup = MyOpcServer.OPCGroups.Add("MyGroup1"); MyOpcGroup.IsActive = true; MyOpcGroup.IsSubscribed = true; MyOpcGroup.DeadBand = 0; MyOpcGroup.UpdateRate = 1000; MyOpcItem1 = MyOpcGroup.OPCItems.AddItem("通道 1.设备 1.标记 1", 0); MyOpcItem2 = MyOpcGroup.OPCItems.AddItem("通道 1.设备 1.TAG1", 1); ServerHandle[0] = MyOpcItem1.ServerHandle; ServerHandle[1] = MyOpcItem2.ServerHandle; MyOpcGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(MyOpcGroup_AsyncWriteComplete); MyOpcGroup.AsyncReadComplete += new DIOPCGroupEvent_AsyncReadCompleteEventHandler(MyOpcGroup_AsyncReadComplete); MyOpcGroup.AsyncCancelComplete += new DIOPCGroupEvent_AsyncCancelCompleteEventHandler(MyOpcGroup_AsyncCancelComplete); MyOpcGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(MyOpcGroup_DataChange); }
/// <summary> /// 设置服务器和客户端的句柄对应的点位名 /// 将点位集合存入对应的服务器和客户端的句柄 /// </summary> /// <param name="bindingData">点位集合</param> /// <param name="opcItems"></param> /// <param name="opcGroup"></param> /// <param name="dic">客户端句柄点位字典</param> /// <param name="serviceDic">服务器句柄点位字典</param> public void SetServerHandle(List <OpcData> bindingData, OPCItems opcItems, OPCGroup opcGroup, Dictionary <int, string> dic, Dictionary <int, string> serviceDic) { for (int i = 0; i < bindingData.Count; i++) { try { OPCItem item = opcItems.AddItem(bindingData[i].OpcName, i); if (item != null) { dic.Add(item.ClientHandle, bindingData[i].OpcName); serviceDic.Add(item.ServerHandle, bindingData[i].OpcName); } } catch (Exception e) { throw; } foreach (KeyValuePair <int, string> keyValuePair in serviceDic) { try { ReadOpcValue(keyValuePair.Key, opcItems, opcGroup, bindingData, serviceDic); } catch (Exception e) { // ignored } } } }
public override bool[] WriteValue(Command command) { int index = command.DeviceAddress.IndexOf("|"); string ip = command.DeviceAddress.Substring(0, index); string progid = command.DeviceAddress.Substring(index + 1); OPC.Data.OpcServer opcServer = new OPC.Data.OpcServer(); opcServer.Connect(progid, ip); OPC.Data.OpcGroup group1 = new OPC.Data.OpcGroup("g3", false, 1000, 1000, 0); opcServer.OpcGroups.Add(group1); int tranid = 0; foreach (var point in command.Points) { OPCItem item = new OPCItem(point, tranid++); group1.Items.Add(item); } bool[] result = new bool[command.Values.Length]; for (int i = 0; i < command.Values.Length; i++) { if (command.Values[i] is Newtonsoft.Json.Linq.JArray) { var jarray = (Newtonsoft.Json.Linq.JArray)command.Values[i]; if (jarray.Count > 0) { try { var newValue = Array.CreateInstance(((Newtonsoft.Json.Linq.JValue)jarray[0]).Value.GetType(), jarray.Count); for (int j = 0; j < jarray.Count; j++) { newValue.SetValue(((Newtonsoft.Json.Linq.JValue)jarray[j]).Value, j); } command.Values[i] = newValue; result[i] = true; } catch { } } else { result[i] = true; } } else { result[i] = true; } } group1.Items.WriteItemValues(command.Values); opcServer.Disconnect(); return(result); }
/// <summary> /// 创建项 /// </summary> public void AddGroupItems(string ItemID) { try { //IList<Model.PZYS_Storage.StorageTag> StorTagList = BusinessLogicLayer.PZYS_Storage.StorageTag.GetAllStorageTagList(); //itmHandleServer; KepItems = KepGroup.OPCItems; //MyItems2 = MyGroup2.OPCItems; //OPCItem[] KepItem = new OPCItem[3]; //添加item if (Cfg.Main.IsUseConfig) { ItemIDArr[0] = Cfg.Main.ItemIDComplete; ItemIDArr[1] = Cfg.Main.ItemIDSensorID; ItemIDArr[2] = Cfg.Main.ItemIDQty; ItemIDArr[3] = Cfg.Main.ItemIDClear; ItemIDArr[4] = Cfg.Main.SensorID; ItemIDArr[5] = Cfg.Main.Press; KepItemArr[0] = KepItems.AddItem(Cfg.Main.ItemIDComplete, 0); KepItemArr[1] = KepItems.AddItem(Cfg.Main.ItemIDSensorID, 1); KepItemArr[2] = KepItems.AddItem(Cfg.Main.ItemIDQty, 2); KepItemArr[3] = KepItems.AddItem(Cfg.Main.ItemIDClear, 3); KepItemArr[4] = KepItems.AddItem(Cfg.Main.SensorID, 4); KepItemArr[5] = KepItems.AddItem(Cfg.Main.Press, 5); ClientHandle = 6; } else { KepItem = KepItems.AddItem(ItemID, ClientHandle); ClientHandle++; } //KepItem = KepItems.AddItem("Channel_0_User_Defined.Random.Random1", 0);//byte.Sine.Sine1 //Console.WriteLine("创建项成功"); //KepItemArr[0] = KepItems.AddItem("Channel_0_User_Defined.Random.Random2", 1); //KepItemArr[1] = KepItems.AddItem("Channel_0_User_Defined.Random.Random3", 2);//byte.Sine.Sine1 //MyItem[1] = MyItems.AddItem("BPJ.Db1.dbw10", 1);//short //MyItem[2] = MyItems.AddItem("BPJ.Db16.dbx0", 2);//bool //MyItem[3] = MyItems.AddItem("BPJ.Db11.S0", 3);//string //移除组内item //Array Errors; //int[] temp = new int[] { 0, MyItem[3].ServerHandle }; //Array serverHandle = (Array)temp; //MyItems.Remove(1, ref serverHandle, out Errors); //MyItem[3] = MyItems.AddItem("BPJ.Db11.S0", 3);//string //MyItem2[0] = MyItems2.AddItem("BPJ.Db1.dbb96", 0);//byte //MyItem2[1] = MyItems2.AddItem("BPJ.Db1.dbw10", 1);//short //MyItem2[2] = MyItems2.AddItem("BPJ.Db16.dbx0", 2);//bool //MyItem2[3] = MyItems2.AddItem("BPJ.Db11.S0", 3);//string } catch (Exception err) { Console.WriteLine("创建项出错:" + err.Message); Log.TraceError("创建项出错:" + err.Message); } }
private static OPCItem[] AddItem(List <string> item, OPCGroup opcGroup) //把需要获取的标签点加到group中 { OPCItem[] opcItem = new OPCItem[item.Count]; for (int i = 0; i < item.Count; i++) { opcItem[i] = opcGroup.OPCItems.AddItem(item[i], 1); } return(opcItem); }
public void InitOPCItem() { string tag = ""; try { for (int i = 0; i < KepTags.Length; i++) { tag = KepTags[i]; //Logger.logwrite("AddItem KepTags" + i); OPCItem item = KepItems.AddItem(tag, ClientHandle); opcItem.Add(tag, item); ItemValue.Add(tag, ""); } for (int i = 0; i < KepTagsMonitor.Length; i++) { tag = KepTagsMonitor[i]; //Logger.logwrite("AddItem KepTagsMonitor" + i); OPCItem item = KepItems.AddItem(tag, ClientHandle); opcItemMonitor.Add(tag, item); ItemValueMonitor.Add(tag, ""); } /* * for (int i = 0; i < KepTagsTrack.Length; i++) * { * tag = KepTagsTrack[i]; * Logger.logwrite("AddItem KepTagsTrack" + i); * OPCItem item = KepItems.AddItem(tag, ClientHandle); * opcItemTrack.Add(tag, item); * ItemValueMonitor.Add(tag, ""); * } */ //opcItem["L2Com.EP1.W_Weight1"].Write(1); //object PValue; //object PQuality; //object PTimeStamp; //opcItem["L2Com.EP1.R_Out_Id"].Read(1, out PValue, out PQuality, out PTimeStamp); //Int16[] myArray = { 56, 48, 48, 65, 66, 67, 68, 69, 70, 48, 48, 48, 48, 68, 69, 70, 48, 48, 48, 48 }; //char[] myArray2 = "8001234567890 ".ToCharArray(); //opcItem["L2Com.EP1.W_Upper_Id2"].Write(PValue); //opcItem["L2Com.EP1.W_Upper_Id2"].Write((object)(myArray)); } catch (Exception err) { string errtxt = "初始化OPCItem出现错误,请检查OPC服务器!" + tag; Logger.logwrite(errtxt); Logger.logwrite(errtxt, "OPC"); Logger.logwrite(err.Message, "OPC"); Console.ReadKey(); Environment.Exit(0); } }
private OPCItem GetItem(string itemName) { OPCGroup group = opcServer.Groups.DefaultGroup; OPCItem item = item = group.Items[itemName]; if (item == null) { throw new Exception(string.Format("未能找到名称为'{0}'的OPC项", itemName)); } return((OPCItem)item); }
public Leaf(Branch Parent, string Name, int ClientHandle, OPCBrowser Browser) { this._Parent = Parent; this._Name = Name; this._ClientHandle = ClientHandle; this._Parent.addLeaf(this); this._OPCItem = this._Parent.OPCGroup.OPCItems.AddItem(Browser.GetItemID(this._Name), this._ClientHandle); this._OPCItem.IsActive = true; }
public static void write(int i, string value) { if (i > opc_group.OPCItems.Count) { MessageBox.Show("无法找到标签,写入失败"); return; } OPCItem OPC_item = opc_group.OPCItems.Item(i); OPC_item.Write(value); }
////读取标签值 private static string[,] readitemvalue() { OPCItem OPC_item; try { int a = opc_group.OPCItems.Count; string[,] itemvalue = new string[a, 6]; // if (groupadd == true) { for (int i = 1; i < opc_group.OPCItems.Count; i++) { OPC_item = opc_group.OPCItems.Item(i); string strID = OPC_item.ItemID; //if (strID == "CPU224.Input.I00") { object quantity; object time; object dya; OPC_item.Read(1, out dya, out quantity, out time); foreach (var aaa in allservers) { itemvalue[i - 1, 0] = (string)aaa; } itemvalue[i - 1, 1] = strID; itemvalue[i - 1, 2] = quantity.ToString(); itemvalue[i - 1, 3] = Convert.ToDateTime(time).AddHours(8).ToString("yyyy-MM-dd HH:mm"); itemvalue[i - 1, 4] = dya.ToString(); itemvalue[i - 1, 5] = i.ToString(); } } } return(itemvalue); } catch (Exception ex) { MessageBox.Show("获取标签值失败\n" + ex.Message); OPC_item = null; opc_group = null; OPC_server.Disconnect(); connected = false; groupadd = false; string[,] a = new string[1, 6]; a[0, 0] = ""; a[0, 1] = ""; a[0, 2] = ""; a[0, 3] = ""; a[0, 4] = ""; a[0, 5] = ""; return(a); } }
/// <summary> /// 添加监控点 /// </summary> /// <param name="tagName"></param> public void AddTag() { try { monitorItemYT = opcGroup.OPCItems.AddItem(configInfo.MonitorTagYT, 1); validTagFlagYT = true; if (sendSMSFlagYT == true) { string smsContent = string.Format("烟台监控点位值恢复有效."); SendSmsMessage(smsContent); } sendSMSFlagYT = false; } catch { validTagFlagYT = false; WriteMsg("烟台点位名有误,无法监控,请确认"); if (sendSMSFlagYT == false) { string smsContent = string.Format("烟台监控点位值无效."); SendSmsMessage(smsContent); sendSMSFlagYT = true; } } try { monitorItemNB = opcGroup.OPCItems.AddItem(configInfo.MonitorTagNB, 2); validTagFlagNB = true; if (sendSMSFlagNB == true) { string smsContent = string.Format("宁波监控点位值恢复有效."); SendSmsMessage(smsContent); } sendSMSFlagNB = false; } catch { validTagFlagNB = false; WriteMsg("宁波点位名有误,无法监控,请确认"); if (sendSMSFlagNB == false) { string smsContent = string.Format("宁波监控点位值无效."); SendSmsMessage(smsContent); sendSMSFlagNB = true; } } WriteMsg("成功添加监控点"); }
/// <summary> /// Инициализация. Настройка группы, установка асинхронного метода чтения данных для указанного тега. /// </summary> protected override void DoInitialize() { try { Logger.Debug("Инициализация"); var server = opcConnection.GetOpcServer(); opcGroup = server.OPCGroups.Add(Guid.NewGuid().ToString()); opcItem = opcGroup.OPCItems.AddItem(activationItemName, 0); opcGroup.UpdateRate = 100; opcGroup.IsActive = true; opcGroup.IsSubscribed = true; opcGroup.DataChange += ActivationItemValueChanged; dataReader.Initialize(); ReadItemFirstTime(); } catch (Exception ex) { opcConnection.ProcessError(ex); } }
/// <summary> /// Инициализация. /// </summary> protected override void DoInitialize() { try { Logger.Debug("Инициализация LiveBit..."); var server = opcConnection.GetOpcServer(); inGroup = server.OPCGroups.Add(Guid.NewGuid().ToString()); outGroup = server.OPCGroups.Add(Guid.NewGuid().ToString()); inItem = inGroup.OPCItems.AddItem(topicName + ITEMID_LIVEBIT_IN, 0); outItem = outGroup.OPCItems.AddItem(topicName + ITEMID_LIVEBIT_OUT, 0); outGroup.UpdateRate = 100; outGroup.IsActive = true; outGroup.IsSubscribed = true; outGroup.DataChange += OutDataChanged; liveBitTestThread = new Thread(LiveBitTest); liveBitTestThread.Start(); Logger.Debug("Инициализация LiveBit завершена."); } catch (Exception ex) { opcConnection.ProcessError(ex); } }
public void Activate() { if (IsActive) { throw new OpcValueException("Двойная активация OPC тега: " + Name); } if (string.IsNullOrEmpty(Name)) { throw new OpcValueException("Имя OPC параметра не задано."); } if (server.ServerState != (int) OPCServerState.OPCRunning) { throw new OpcValueException( "Ошибка при активации тега: OPC сервер не подключен."); } GroupName = Guid.NewGuid().ToString(); opcGroup = server.OPCGroups.Add(GroupName); opcItem = opcGroup.OPCItems.AddItem(Name, opcGroup.ClientHandle); if (isListenValueChanging) { opcGroup.DataChange += ValueChanged; opcGroup.UpdateRate = UpdateRate; opcGroup.IsActive = true; opcGroup.IsSubscribed = true; } IsActive = true; }
//列表 private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (_itmHandleClient != 0) { TextBox3.Text = ""; Array errors; OPCItem bItem = _kepItems.GetOPCItem(_itmHandleServer); //注: OPC中以1为数组的基数 int[] temp = new int[] { 0, bItem.ServerHandle }; Array serverHandle = temp; //移除上一次选择的项 _kepItems.Remove(_kepItems.Count, ref serverHandle, out errors); } _itmHandleClient = 1234; _kepItem = _kepItems.AddItem(ListBox1.SelectedItem.ToString(), _itmHandleClient); TextBox2.Text = Convert.ToString(ListBox1.SelectedItem); _itmHandleServer = _kepItem.ServerHandle; } catch (Exception err) { //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理 _itmHandleClient = 0; TextBox3.Text = "Error ox"; MessageBox.Show("此项为系统保留项:" + err.Message, "提示信息"); } }
//读方法 void Read(string u1,int u2) { _kepItem = _kepItems.AddItem(u1, u2); _itmHandleServer = _kepItem.ServerHandle; //OPCItem bItem = _kepItems.GetOPCItem(_itmHandleServer); var bItem = _kepItems.GetOPCItem(_itmHandleServer); var temp = new[] { 0, bItem.ServerHandle }; //Array serverHandles = (Array)temp; var serverHandles = (Array)temp; Array errors; int cancelId; _kepGroup.AsyncRead(1, ref serverHandles, out errors, 2009, out cancelId); GC.Collect(); }
// 写函数 public void Write(string m1,string m2) { _itmHandleClient = 1234; _kepItem = _kepItems.AddItem(m1, _itmHandleClient); _itmHandleServer = _kepItem.ServerHandle; OPCItem bItem = _kepItems.GetOPCItem(_itmHandleServer); int[] temp = new int[] { 0, bItem.ServerHandle }; Array serverHandles = temp; object[] valueTemp = new object[] { "", m2 }; Array values = valueTemp; Array errors; int cancelId; _kepGroup.AsyncWrite(1, ref serverHandles, ref values, out errors, 2009, out cancelId); GC.Collect(); }
/// <summary> /// 初始化OPC服务器 /// </summary> void InitOpc() { connected = false; connecteds = false; isfirstuse = true; try { string severname = "KEPware.KEPServerEx.V4"; string groupname = "S7-200.S7-200-1"; string outname = "S7-200.S7-200-1.OUT"; string inname = "S7-200.S7-200-1.IN"; string chuanname = "S7-200.S7-200-1.CHUAN"; string confname = "S7-200.S7-200-1.CONF"; myserver = new OPCServer(); myserver.Connect(severname); mygroups = myserver.OPCGroups; mygroup = mygroups.Add(groupname); mygroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(ObjOPCGroup_DataChange); myitems = mygroup.OPCItems; item_out = myitems.AddItem(outname, 1);//opcitem标识,1out,2config,3in,4chuan item_conf = myitems.AddItem(confname, 2); item_in = myitems.AddItem(inname.ToString(), 3); item_chuan = myitems.AddItem(chuanname.ToString(), 4); mygroup.UpdateRate = 10; mygroup.IsActive = true; mygroup.IsSubscribed = true; connected = true; } catch (Exception e) { MessageBox.Show(e.ToString());//如果连接不上,说明运行库有问题,关了软件重新安装必要组件再运行 } }