测试环境:SIMATIC_NET_8.2
Visual studio 2010
Step7 V5.5
系统:Windows Win7旗舰版
测试结果:同步读写数据成功
异步读写数据成功
订阅式读取并分解数据成功




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 OPCAutomation;
namespace _4_Automation_RW
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
OPCServer MyOpcServer; //定义OPCSe
OPCGroup MyOpcGroup; //定义组
const int ItemCount = 6;
OPCItem[] MyOpcItem = new OPCItem[ItemCount+1]; //Item
int[] ServerHandle = new int[ItemCount];//服务器端注册句柄
//连接OPCServer,建立Group,添加Item
private void btn_Conn_Click(object sender, EventArgs e)
{
try
{
MyOpcServer = new OPCServer();
MyOpcServer.Connect("OPC.SimaticNet", txt_IP.Text.Trim());//OPCServer
MyOpcGroup = MyOpcServer.OPCGroups.Add("MyGroup1");
MyOpcGroup.IsActive = true; //OPCGroup的IsActive属性:用以控制 OPC 组的活动状态。只有活动状态的 OPC 组才进行定期的数据更新。
MyOpcGroup.IsSubscribed = false;//是否异步, 在采用异步读写, 订阅等方式下都需要
MyOpcGroup.DeadBand = 0; //新添加的 OPC 组的不敏感带的默认值(%) 。初期值是 0%。
MyOpcGroup.UpdateRate = 1;//OPCGroup的UpdateRate属性:数据更新周期(毫秒) 。
MyOpcItem[0] = MyOpcGroup.OPCItems.AddItem("S7:[S7 connection_1]DB10,INT0", 1);
MyOpcItem[1] = MyOpcGroup.OPCItems.AddItem("S7:[S7 connection_1]DB10,INT2", 2);
MyOpcItem[2] = MyOpcGroup.OPCItems.AddItem("S7:[S7 connection_1]DB10,W4", 3);
MyOpcItem[3] = MyOpcGroup.OPCItems.AddItem("S7:[S7 connection_1]DB10,B6", 4);
MyOpcItem[4] = MyOpcGroup.OPCItems.AddItem("S7:[S7 connection_1]DB10,REAL8", 5);
MyOpcItem[5] = MyOpcGroup.OPCItems.AddItem("S7:[S7 connection_1]DB10,REAL12", 6);
MyOpcItem[6] = MyOpcGroup.OPCItems.AddItem("S7:[S7 connection_1]MX100.0", 7);
ServerHandle[0] = MyOpcItem[0].ServerHandle;
ServerHandle[1] = MyOpcItem[1].ServerHandle;
ServerHandle[2] = MyOpcItem[2].ServerHandle;
ServerHandle[3] = MyOpcItem[3].ServerHandle;
ServerHandle[4] = MyOpcItem[4].ServerHandle;
ServerHandle[5] = MyOpcItem[5].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);
}
catch (System.Exception error)
{
MessageBox.Show(error.Message, "Result - connect server", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//同步读数据
private void btn_Read_Sync_Click(object sender, EventArgs e)
{
if (MyOpcServer == null)
{
MessageBox.Show("请连接OPCServer");
return;
}
object ItemValues;
object Qualities;
object TimeStamps;
try
{
MyOpcItem[0].Read(1, out ItemValues, out Qualities, out TimeStamps);
txt_R1_Value.Text = String.Format("{0}", ItemValues);
txt_R1_Quality.Text = String.Format("{0}", Qualities); // Quality
txt_R1_TimeStamp.Text = String.Format("{0}", TimeStamps); // Timestamp
MyOpcItem[1].Read(1, out ItemValues, out Qualities, out TimeStamps);
txt_R2_Value.Text = String.Format("{0}", ItemValues);
txt_R2_Quality.Text = String.Format("{0}", Qualities); // Quality
txt_R2_TimeStamp.Text = String.Format("{0}", TimeStamps); // Timestamp
MyOpcItem[2].Read(1, out ItemValues, out Qualities, out TimeStamps);
txt_R3_Value.Text = String.Format("{0}", ItemValues);
txt_R3_Quality.Text = String.Format("{0}", Qualities); // Quality
txt_R3_TimeStamp.Text = String.Format("{0}", TimeStamps); // Timestamp
MyOpcItem[3].Read(1, out ItemValues, out Qualities, out TimeStamps);
txt_R4_Value.Text = String.Format("{0}", ItemValues);
int temp = Convert.ToInt32(txt_R4_Value.Text);
bool[] temp2 = ByteToBool(temp);
btn_LED1.BackColor = temp2[0] ? Color.Green : Color.White;
btn_LED2.BackColor = temp2[1] ? Color.Green : Color.White;
btn_LED3.BackColor = temp2[2] ? Color.Green : Color.White;
btn_LED4.BackColor = temp2[3] ? Color.Green : Color.White;
btn_LED5.BackColor = temp2[4] ? Color.Green : Color.White;
btn_LED6.BackColor = temp2[5] ? Color.Green : Color.White;
btn_LED7.BackColor = temp2[6] ? Color.Green : Color.White;
btn_LED8.BackColor = temp2[7] ? Color.Green : Color.White;
txt_R4_Quality.Text = String.Format("{0}", Qualities); // Quality
txt_R4_TimeStamp.Text = String.Format("{0}", TimeStamps); // Timestamp
MyOpcItem[4].Read(1, out ItemValues, out Qualities, out TimeStamps);
txt_R5_Value.Text = String.Format("{0}", ItemValues);
txt_R5_Quality.Text = String.Format("{0}", Qualities); // Quality
txt_R5_TimeStamp.Text = String.Format("{0}", TimeStamps); // Timestamp
MyOpcItem[5].Read(1, out ItemValues, out Qualities, out TimeStamps);
txt_R6_Value.Text = String.Format("{0}", ItemValues);
txt_R6_Quality.Text = String.Format("{0}", Qualities); // Quality
txt_R6_TimeStamp.Text = String.Format("{0}", TimeStamps); // Timestamp
}
catch (System.Exception error)
{
MessageBox.Show(error.Message, "Result - 同步读", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//同步写数据
private void btn_Write_Sync_Click(object sender, EventArgs e)
{
if (MyOpcServer == null)
{
MessageBox.Show("请连接OPCServer");
return;
}
try
{
MyOpcItem[0].Write(txt_W1.Text);
MyOpcItem[1].Write(txt_W2.Text);
MyOpcItem[2].Write(txt_W3.Text);
MyOpcItem[3].Write(txt_W4.Text);
MyOpcItem[4].Write(txt_W5.Text);
MyOpcItem[5].Write(txt_W6.Text);
}
catch (System.Exception error)
{
MessageBox.Show(error.Message, "Result - 同步写", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}