实例介绍
【实例截图】
【核心代码】
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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论