/// <summary> /// 选择列表项时处理的事情 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { try { if (itmHandleClient != 0) { this.txtTagValue.Text = ""; this.txtQualities.Text = ""; this.txtTimeStamps.Text = ""; this.txtDataType.Text = ""; int sd = KepItems.Count; 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 = 0; //for (int i = 0; i < 5; i++) //{ // KepItem = KepItems.AddItem(listBox1.Items[i].ToString(), itmHandleClient); // itmHandleClient += 1; //} //KepItem = KepItems.AddItem(listBoxItems.SelectedItem.ToString(), itmHandleClient); KepItem = KepItems.AddItem("Channel_0_User_Defined.User.User1", itmHandleClient); KepItems.AddItem("Channel_0_User_Defined.User.User2", 1235); //数据类型 txtDataType.Text = Enum.GetName(typeof(CanonicalDataTypes), KepItem.CanonicalDataType); 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 AddGroupItems()//添加组 { //itmHandleServer; MyItems = MyGroup.OPCItems; MyItems2 = MyGroup2.OPCItems; //添加item MyItem[0] = MyItems.AddItem("BPJ.Db1.dbb96", 0); //byte 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 }
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); } }
/// <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 void Init() { MyServer = new OPCServer(); //初始化item数组 MyItem = new OPCItem[4]; MyServer.Connect("KEPware.KEPServerEx.V4", "127.0.0.1");//连接本地服务器:服务器名+主机名或IP if (MyServer.ServerState == (int)OPCServerState.OPCRunning) { Console.WriteLine("已连接到:{0}", MyServer.ServerName); Console.WriteLine("几个组:{0}", MyServer.OPCGroups.Count); } else { //这里你可以根据返回的状态来自定义显示信息,请查看自动化接口API文档 string errMessage = MyServer.ServerState.ToString(); throw new Exception(errMessage); } MyGroups = MyServer.OPCGroups; MyGroup = MyServer.OPCGroups.Add("GE.GE330.GEPLC"); MyGroup.UpdateRate = 250; MyGroup.IsActive = true; MyGroup.IsSubscribed = true; //MyGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(GroupDataChange); MyItems = MyGroup.OPCItems; //添加item MyItem[0] = MyItems.AddItem("GE.GE330.GEPLC.M8001", 0); //bool-buildable MyItem[1] = MyItems.AddItem("GE.GE330.GEPLC.M801", 1); //bool- MyItem[2] = MyItems.AddItem("GE.GE330.GEPLC.M802", 2); //bool- MyItem[3] = MyItems.AddItem("GE.GE330.GEPLC.PLC_PC_S", 3); //string }
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 void AddGroupItems() { //itmHandleServer; MyItems = MyGroup.OPCItems; MyItems2 = MyGroup2.OPCItems; //添加item MyItem[0] = MyItems.AddItem("[" + strTopic + "]int1", 0);//[opc1]int1", 0);//int MyItem[1] = MyItems.AddItem("[" + strTopic + "]dint1", 1);//dint MyItem[2] = MyItems.AddItem("[" + strTopic + "]dint2", 1);//dint MyItem2[0] = MyItems2.AddItem("[" + strTopic + "]int2", 0);//int MyItem2[1] = MyItems2.AddItem("[" + strTopic + "]sint1", 1);//byte }
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(); }
/// <summary> /// 选择列表项时处理的事情 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void SelectedItem(List <string> itemName) { try { if (itmHandleClient != 0) { TagValue = ""; Qualities = ""; TimeStamps = ""; //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; foreach (string name in itemName) { KepItem = KepItems.AddItem(name, itmHandleClient); if (KepItem != null) { itmHandleServer = KepItem.ServerHandle; TagPath = name; QueryTime = DateTime.Now; QueryTimeBool = true; break; } } if (KepItem == null) { itmHandleClient = 0;//如果依然为空则说明没有添加成功,则itmHandleClient保持为0 } } catch (Exception) { //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。 itmHandleClient = 0; TagValue = "Error ox"; Qualities = "Error ox"; TimeStamps = "Error ox"; //MessageBox.Show("保留项1错误\n" + err); } }
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); } }
/// <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 } } } }
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" ); } } }
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, "提示信息"); } }
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; } }
public bool AddItem(string itemName) { try { opcItem = opcItems.AddItem(itemName, opcItems.Count + 1); Console.WriteLine(opcItems.Count); OpcDataItems.Add(new OPCDataItem { ItemName = itemName, ItemHandle = opcItems.Count }); } catch { return(false); } return(true); }
/// <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); } }
//初始化OPC行 static void InitItems() { OPCGroup group = _opcServer.OPCGroups.GetOPCGroup(groupName); OPCItems items = group.OPCItems; OPCItem a = items.AddItem(itemID1, 1); OPCItem b = items.AddItem(itemID2, 2); a = items.Item(2); b = items.Item(1); int c = 0; c = a.ClientHandle; c = b.ClientHandle; c = 0; }
private void AddGroupItems() { opcItems = opcGroup.OPCItems; opcItem = new OPCItem[ItemList.Count]; for (int i = 0; i < ItemList.Count; i++) { opcItem[i] = opcItems.AddItem(ItemList[i].name, ItemList[i].handler); } }
public string AsyncWriteTagValue(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; int cancelID; KepGroupWriteData.AsyncWrite(1, ref serverHandles, ref values, out Errors, 2009, out cancelID); GC.Collect(); return("OK"); } catch (Exception err) { return(err.Message); } }
public OpcReadAndWrite(List <DSW_ParamTableModel> list) : base(list) { CreateGroup(); opcItem = new OPCAutomation.OPCItem[ModelList.Count]; objItems = objGroup.OPCItems; myDcWrite.Clear(); for (int i = 0; i < ModelList.Count; i++) { opcItem[i] = objItems.AddItem(ModelList[i].KepAddress, i); myDcWrite.Add(ModelList[i].KepAddress, opcItem[i]); } }
public OpcReadAndWrite(ParamClass PC) : base(PC) { CreateGroup(); opcItem = new OPCAutomation.OPCItem[PC.ParamList.Count]; objItems = objGroup.OPCItems; myDc.Clear(); for (int i = 0; i < PC.ParamList.Count; i++) { opcItem[i] = objItems.AddItem(PC.ParamList[i].KepAddress, i); myDc.Add(PC.ParamList[i].LabelName, opcItem[i]); } }
public void AddItems(string[] itemNamesAdded) { for (int i = 0; i < itemNamesAdded.Length; i++) { this.itemNames.Add(itemNamesAdded[i]); itemValues.Add(itemNamesAdded[i], ""); } for (int i = 0; i < itemNamesAdded.Length; i++) { itemHandleClient.Add(itemHandleClient.Count != 0 ? itemHandleClient[itemHandleClient.Count - 1] + 1 : 1); opcItem = opcItems.AddItem(itemNamesAdded[i], itemHandleClient[itemHandleClient.Count - 1]); itemHandleServer.Add(opcItem.ServerHandle); } }
public string AsyncReadTagValue(string tag) { try { Array Errors; if (itmHandleClientReadData != 0) { OPCItem bItem = KepItemsRead.GetOPCItem(itmHandleServerReadData); //注:OPC中以1为数组的基数 int[] temp = new int[2] { 0, bItem.ServerHandle }; Array serverHandle = (Array)temp; //移除上一次选择的项 KepItemsRead.Remove(KepItemsRead.Count, ref serverHandle, out Errors); } itmHandleClientReadData = Array.IndexOf(tagList, tag) + 1; KepItemRead = KepItemsRead.AddItem(tag, itmHandleClientReadData); itmHandleServerReadData = KepItemRead.ServerHandle; OPCItem bItem_ = KepItemsRead.GetOPCItem(itmHandleServerReadData); int[] temp_ = new int[2] { 0, bItem_.ServerHandle }; Array serverHandles = (Array)temp_; int cancelID; //KepGroupReadData.AsyncWrite(1, ref serverHandles, ref values, out Errors, 2009, out cancelID); KepGroupReadData.AsyncRead(1, ref serverHandles, out Errors, 2018, out cancelID); GC.Collect(); return("OK"); } catch (Exception err) { return(err.Message); } }
/// <summary> /// 根据列表中选中的当前标签,定位到需要发送数据的标签 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSetItem_Click(object sender, EventArgs e) { try { /** * 需要注意,不同的OPC服务器的标签格式也是不同的 * 测试时,使用的是ICONICS Simulator OPC Server,标签格式如:Textual.Memory * 生产环境时,使用的是SimaticNet_V13Sp1,标签格式如:S7:[S7_Connection_1]MReal120 * **/ //根据ListBox选中的标签,处理得到分组名称 string groupName = lstItems.Text; //实例化组 myGroups = myServer.OPCGroups; myGroup = myGroups.Add(groupName); //设置缺省的组属性 myServer.OPCGroups.DefaultGroupIsActive = true; myServer.OPCGroups.DefaultGroupDeadband = 0; myGroup.UpdateRate = 250; myGroup.IsActive = true; myGroup.IsSubscribed = true; //定位需要发送数据的目标项 myItems = myGroup.OPCItems; //实例化组内标签 myItemArray = new OPCItem[1]; //填充项目组 myItemArray[0] = myItems.AddItem(lstItems.Text, 1); //获取服务端句柄 itmHandleServer = myItemArray[0].ServerHandle; //监听组内数据变化 myGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(myGroup_DataChange); myGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(myGroup_AsyncWriteComplete); //开启发送参数按钮 btnWrite.Enabled = true; } catch (Exception err) { MessageBox.Show("创建组出现错误:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
void CreateReadGroup() { opcGroups = opcServer.OPCGroups; opcGroup = opcGroups.Add("PLCReadAddress"); SetGroupProperty(); opcItems = opcGroup.OPCItems; int i = 0; foreach (string address in opc_address) { opcItem[i] = opcItems.AddItem(address, i); i++; } //opcGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(opcGroup_DataChange); }
public ItemReadSync(ParamClass PC) { CreateGroup(); opcItem = new OPCAutomation.OPCItem[PC.ParamList.Count]; objItems = objGroup.OPCItems; for (int i = 0; i < PC.ParamList.Count; i++) { opcItem[i] = objItems.AddItem(PC.ParamList[i].KepAddress, i); } paramClass = PC; tTimer = new System.Timers.Timer(100); tTimer.Elapsed += SyncRead; tTimer.Start(); }
public void AddItem(string itemName) { try { KepItems = KepGroup.OPCItems; KepItem = KepItems.AddItem(itemName, KepItemServerHandles.Count); OpcDataItems.Add(new OPCDataItem { ItemName = itemName, ItemHandle = KepItemServerHandles.Count }); KepItemServerHandles.Add(KepItem.ServerHandle); KeyItemServerHandles = KepItemServerHandles.ToArray(); } catch (Exception ex) { SimpleLogHelper.Instance.WriteLog(LogType.Error, ex); } }
//创建项 private void CreateItems(string[] point) { _tagValue = new double[point.Length]; int i; for (i = 0; i < point.Length; i++) { try { _kepItem = _kepItems.AddItem(point[i], i); _opcItemDic.Add(point[i].Substring(point[i].LastIndexOf('.') + 1, point[i].Length - point[i].LastIndexOf('.') - 1), _kepItem.ServerHandle); } catch (Exception ex) { LogHelper.WriteLog(typeof(OpcClient), ex.StackTrace + ex.Message); } } }
public void AddItems(List <string> ls) { try { itmHandleClient = 1000; foreach (string itm in ls) { itmHandleClient++; PxItem = PxItems.AddItem(itm, itmHandleClient); itmHandleServer = PxItem.ServerHandle; OPCItemDic.Add(itm, PxItem); } } catch (Exception err) { //没有任何权限的项,都是OPC服务器保留的系统项,此处可不做处理。 itmHandleClient = 0; Debug.WriteLine("此项为系统保留项:" + err.Message); } }
public OPCItem[] AddGroupItems(OPCGroup group, string filename) { OPCItems Items = group.OPCItems; IEnumerable <string> lines = File.ReadAllLines(filename); int itemsCount = lines.Count(); int linenum = 0; OPCItem[] item = new OPCItem[itemsCount]; foreach (string line in lines) { string[] segs = line.Split('-'); string strName = segs[0].ToString(); string strHandle = segs[1].ToString(); item[linenum] = Items.AddItem(strName, Int32.Parse(strHandle)); linenum++; } return(item); //返回的第一个值为OPCITEM数组 }
public void InitPt(int nNum, numInf[] nrst, int sNum, strInf[] srst) { try { MyItems = MyGroup.OPCItems; MyItem = new OPCItem[nNum + sNum]; numinf = new numInf[nNum]; strinf = new strInf[sNum]; numNum = nNum; strNum = sNum; int i = 0; foreach (numInf nn in nrst) { try { MyItem[i] = MyItems.AddItem(nn.srcId, i);//byte i++; } catch { try { sw = File.AppendText(logfile); sw.WriteLine("初始化点" + nn.srcId + "失败!"); sw.Close(); } catch { } //MyItem[i] = MyItems.AddItem(nrst[i - 1].srcId, i); MyItem[i] = MyItem[i - 1]; i++; continue; } } foreach (strInf ss in srst) { try { MyItem[i] = MyItems.AddItem(ss.srcId, i);//byte i++; } catch { try { sw = File.AppendText(logfile); sw.WriteLine("初始化点" + ss.srcId + "失败!"); sw.Close(); } catch { } MyItem[i] = MyItem[i - 1]; i++; continue; } } object ItemValuestemp; object Qualities; object TimeStamps;//同步读的临时变量:值、质量、时间戳 for (int ii = 0; ii < nNum + sNum; ii++) { MyItem[ii].Read(1, out ItemValuestemp, out Qualities, out TimeStamps);//同步读,第一个参数只能为1或2 if (ii < nNum) { numinf[ii].val = Convert.ToSingle(ItemValuestemp);//转换后获取item值 numinf[ii].dtm = Convert.ToDateTime(TimeStamps); } else { strinf[ii - numNum].val = Convert.ToString(ItemValuestemp);//转换后获取item值 strinf[ii - numNum].dtm = Convert.ToDateTime(TimeStamps); } } MyGroup.IsSubscribed = true;//使用订阅功能,即可以异步,默认false try { sw = File.AppendText(logfile); sw.WriteLine("初始化点成功!"); sw.Close(); } catch { } } catch (Exception e) { Console.WriteLine(e.ToString()); } }
/// <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());//如果连接不上,说明运行库有问题,关了软件重新安装必要组件再运行 } }