实例介绍
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; //using Mesnac.Equip.OMRON.HostLink.COM; //using Mesnac.Equip.Mitsubishi.MXComponent.Default; //using Mesnac.Equip.Siemens.S7_300.Net; //using Mesnac.Equip.Siemens.S7_1500.Ethernet; using Mesnac.Equip.OPC.OpcDaNet.OPC; namespace TestWinApp { public partial class Form1 : Form { private Equip thisEquip = new Equip(); private OPCDA.NET.OpcServer opcServer = new OPCDA.NET.OpcServer(); private OPCDA.NET.DataChangeEventHandler dch; private OPCDA.NET.RefreshGroup refreshGroup = null; private OPCDA.NET.SyncIOGroup readWriteGroup = null; private Dictionary<string, object> lastData = new Dictionary<string,object>(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { try { this.thisEquip.Main.ReadHz = 1000; this.thisEquip.Group.Clear(); Mesnac.Equips.BaseInfo.Group group4 = new Mesnac.Equips.BaseInfo.Group(); group4.Name = "DB4"; group4.Block = "4"; group4.Start = 0; group4.Len = 110; this.thisEquip.Group.Add(group4.Name, group4); Mesnac.Equips.BaseInfo.Group group5 = new Mesnac.Equips.BaseInfo.Group(); group5.Name = "DB5"; group5.Block = "5"; group5.Start = 0; group5.Len = 122; Mesnac.Equips.BaseInfo.Data DB5DBW64 = new Mesnac.Equips.BaseInfo.Data(); DB5DBW64.Name = "DB5DBW64"; DB5DBW64.Start = 32; DB5DBW64.Len = 1; group5.Data.Add("DB5DBW64", DB5DBW64); this.thisEquip.Group.Add(group5.Name, group5); this.thisEquip.Open(); } catch (Exception ex) { MessageBox.Show(ex.Message); MessageBox.Show(ex.StackTrace); } } private void button2_Click(object sender, EventArgs e) { try { string block = this.textBox1.Text; int start = 0; int.TryParse(this.textBox2.Text,out start); int len = 0; int.TryParse(this.textBox3.Text,out len); object[] buff = new object[len]; bool result = this.thisEquip.Read(block, start, len, out buff); if (result) { StringBuilder sb = new StringBuilder(); foreach(object obj in buff) { sb.Append(obj.ToString()).Append(","); } this.textBox5.Text = sb.ToString(); MessageBox.Show("读取成功!"); } } catch (Exception ex) { MessageBox.Show(ex.Message); MessageBox.Show(ex.StackTrace); } } private void button3_Click(object sender, EventArgs e) { try { int block = 0; int.TryParse(this.textBox1.Text, out block); int start = 0; int.TryParse(this.textBox2.Text, out start); int len = 0; int.TryParse(this.textBox3.Text, out len); object[] buff = new object[len]; for (int i = 0; i < len; i ) { buff[i] = Convert.ToInt32(this.textBox4.Text); } bool result = this.thisEquip.Write(block, start,buff); if (result) { MessageBox.Show("写入成功!"); } } catch (Exception ex) { MessageBox.Show(ex.Message); MessageBox.Show(ex.StackTrace); } } private void button4_Click(object sender, EventArgs e) { try { this.thisEquip.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button5_Click(object sender, EventArgs e) { try { string block = this.textBox1.Text; int start = 0; int.TryParse(this.textBox6.Text, out start); int len = 2; object[] buff = new object[len]; bool result = this.thisEquip.Read(block, start, len, out buff); if (result) { string s1 = System.Convert.ToString(Convert.ToInt32(buff[0]), 2).PadLeft(16, '0'); string s2 = System.Convert.ToString(Convert.ToInt32(buff[1]), 2).PadLeft(16, '0'); string s3 = s1 s2; string s41 = s3.Substring(0, 8); string s42 = s3.Substring(8, 8); string s43 = s3.Substring(16, 8); string s44 = s3.Substring(24, 8); Console.WriteLine(s44 s43 s42 s41); List<byte> lv = new List<byte>(); lv.Add(System.Convert.ToByte(s44, 2)); lv.Add(System.Convert.ToByte(s43, 2)); lv.Add(System.Convert.ToByte(s42, 2)); lv.Add(System.Convert.ToByte(s41, 2)); float f = BitConverter.ToSingle(lv.ToArray<byte>(), 0); this.lblResult.Text = f.ToString(); MessageBox.Show("读取成功!"); } } catch (Exception ex) { MessageBox.Show(ex.Message); MessageBox.Show(ex.StackTrace); } } private void button6_Click(object sender, EventArgs e) { float f = 0.0f; if (float.TryParse(this.textBox7.Text, out f)) { byte[] byteValues = BitConverter.GetBytes(f); object[] intValues = new object[2]; intValues[0] = System.Convert.ToInt32(System.Convert.ToString(byteValues[3], 2).PadLeft(8, '0') System.Convert.ToString(byteValues[2], 2).PadLeft(8, '0'), 2); intValues[1] = System.Convert.ToInt32(System.Convert.ToString(byteValues[1], 2).PadLeft(8, '0') System.Convert.ToString(byteValues[0], 2).PadLeft(8, '0'), 2); try { int block = 0; int.TryParse(this.textBox1.Text, out block); int start = 0; int.TryParse(this.textBox6.Text, out start); bool result = this.thisEquip.Write(block, start, intValues); if (result) { MessageBox.Show("写入成功!"); } } catch (Exception ex) { MessageBox.Show(ex.Message); MessageBox.Show(ex.StackTrace); } } } private void button7_Click(object sender, EventArgs e) { try { int block = 0; int.TryParse(this.textBox1.Text, out block); int start = 0; int.TryParse(this.textBox2.Text, out start); int value = 0; int.TryParse(this.textBox8.Text, out value); Int16[] intValues = WriteData_Int32(value, 2); object[] objValues = new object[intValues.Length]; Array.Copy(intValues, objValues, intValues.Length); bool result = this.thisEquip.Write(block, start, objValues); if (result) { MessageBox.Show("写入成功!"); } } catch (Exception ex) { MessageBox.Show(ex.Message); MessageBox.Show(ex.StackTrace); } } /// <summary> /// 对Int32类型的PLC写入项进行数据处理,此处要注意不同类型PLC的处理方式 /// </summary> /// <returns></returns> private Int16[] WriteData_Int32(int SetValue, int ValueLen) { Int16[] buff = new Int16[ValueLen]; for (int i = 0; i < buff.Length; i ) { buff[i] = 0; } Int32 ivalue = 0; if (ValueLen / 2 == 1) { if (SetValue != null && Int32.TryParse(SetValue.ToString(), out ivalue)) { byte[] byteValues = BitConverter.GetBytes(ivalue); Int16[] intValues = new Int16[2]; intValues[0] = System.Convert.ToInt16(System.Convert.ToString(byteValues[3], 2).PadLeft(8, '0') System.Convert.ToString(byteValues[2], 2).PadLeft(8, '0'), 2); intValues[1] = System.Convert.ToInt16(System.Convert.ToString(byteValues[1], 2).PadLeft(8, '0') System.Convert.ToString(byteValues[0], 2).PadLeft(8, '0'), 2); buff[0] = intValues[0]; buff[1] = intValues[1]; } } else { //if (SetValue is Int32[]) //{ // Int32[] setValues = (Int32[])SetValue; // for (int i = 0; i < setValues.Length; i ) // { // if (i * 2 >= ValueLen) // { // break; // } // byte[] byteValues = BitConverter.GetBytes(setValues[i]); // Int16[] intValues = new Int16[2]; // intValues[0] = System.Convert.ToInt16(System.Convert.ToString(byteValues[3], 2).PadLeft(8, '0') System.Convert.ToString(byteValues[2], 2).PadLeft(8, '0'), 2); // intValues[1] = System.Convert.ToInt16(System.Convert.ToString(byteValues[1], 2).PadLeft(8, '0') System.Convert.ToString(byteValues[0], 2).PadLeft(8, '0'), 2); // buff[i] = intValues[0]; // buff[i 1] = intValues[1]; // } //} } return buff; } private void button8_Click(object sender, EventArgs e) { OPC.Common.Host host = new OPC.Common.Host("192.168.1.105"); OPC.OpcServerBrowser browser = new OPC.OpcServerBrowser(host); string[] serverList = null; browser.GetServerList(out serverList); foreach (string server in serverList) { Console.WriteLine(server); } } private void button9_Click(object sender, EventArgs e) { int connectResult = opcServer.Connect("192.168.1.105", "Kepware.KEPServerEX.V5"); if (connectResult == 0) { Console.WriteLine("Connect success!"); this.dch = new OPCDA.NET.DataChangeEventHandler(this.DataChangeHandler); this.refreshGroup = new OPCDA.NET.RefreshGroup(opcServer, this.dch, 6000); this.refreshGroup.Add("chnlSiemens.S7-300.DB4.0-100"); this.refreshGroup.Add("chnlSiemens.S7-300.DB5.0-100"); this.refreshGroup.Add("chnlSiemens.S7-300.DB5.DB5DBW64"); this.readWriteGroup = new OPCDA.NET.SyncIOGroup(this.opcServer); this.readWriteGroup.Add("chnlSiemens.S7-300.DB4.0-100"); this.readWriteGroup.Add("chnlSiemens.S7-300.DB5.0-100"); this.readWriteGroup.Add("chnlSiemens.S7-300.DB5.DB5DBW64"); } else { Console.WriteLine("Connect error!"); return; } } private void DataChangeHandler(object sender, OPCDA.NET.DataChangeEventArgs e) { Console.WriteLine("sender = " sender); Console.WriteLine("DataChangeHandler_PLC值发生变化..." e.sts.Count()); OPCDA.NET.OPCItemState[] itemStates = e.sts; foreach (OPCDA.NET.OPCItemState itemState in itemStates) { OPCDA.NET.ItemDef itemDef = this.refreshGroup.FindClientHandle(itemState.HandleClient); if (itemDef != null) { this.lastData[itemDef.OpcIDef.ItemID] = itemState.DataValue; } } } private void button10_Click(object sender, EventArgs e) { Random r = new Random(); r.Next(100); OPCDA.NET.ItemValue[] values = opcServer.Read(new string[] { "chnlSiemens.S7-300.DB4.DB40-100", "chnlSiemens.S7-300.DB5.DB50-100", "chnlSiemens.S7-300.DB5.DB5DBW64" }, 1000); foreach (OPCDA.NET.ItemValue value in values) { Console.Write(value.ItemID " = " value.Value " , " value.MaxAge " , " value.Timestamp); if (value.Value is Array) { Int16[] itemValues = value.Value as Int16[]; Console.WriteLine("Length = " itemValues.Length); itemValues[10] = (short)r.Next(100); itemValues[11] = (short)r.Next(100); value.Value = itemValues; //this.readWriteGroup.Write(this.readWriteGroup.Item(value.ItemID), value.Value); } else { value.Value = (short)r.Next(100); Console.WriteLine("写入值:" value.Value); //opcServer.Write(new OPCDA.NET.ItemValue[] { value }); this.readWriteGroup.Write(this.readWriteGroup.Item(value.ItemID), value.Value); Console.WriteLine("写入完毕!"); } } Console.WriteLine(); } private void button11_Click(object sender, EventArgs e) { //foreach (string itemID in this.lastData.Keys) //{ // if (this.lastData[itemID] is Array) // { // short[] dataArr = this.lastData[itemID] as short[]; // foreach (short s in dataArr) // { // Console.Write(s ","); // } // Console.WriteLine(); // } // else // { // Console.WriteLine(itemID " = " this.lastData[itemID]); // } //} } } }
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论