什么是OPC?
OPC是为了不同供应厂商的设备和应用程序之间的软件接口标准化,使其问的数招交换更加简单化的目的而提出的。作为结果,从而可以向用户提供不依客于特定开发语言和开发环境的可以自由组合使用的过程控制软件组件产品。
服务器软件:KEPSever
Channel(通道,选择设备通讯协议,网卡等) —>Device(选择具体设备)—>Tag Properties(参数属性)
之后点击Quick Client建立快捷客户端测试
软件代码采集OPC数据
namespace TEST01
{
public class OPCInstance
{
//1.声明OPC服务器访问需要的成员OPCServer Server;
OPCGroups Groups;
OPCGroup Group;
OPCItems Items;
OPCItem Item;
public void Run()
{
Server = new oPCServer();
Server.Connect("KEPware.KEPServerEx.V4");//服务器地址
if (Server.ServerState == Convert.ToInt32(oPCServerState.OPCRunning)
{
Groups = Server.OPCGroups;//数据缓冲区值刷新阀值默认值
Groups.DefaultGroupDeadband = 0;//组对象是否活动默认值
Groups.DefaultGroupIsActive - true;//数据缓冲区刷新频率默认值
Groups.DefaultGroupUpdateRate = 250;
Group = Groups.Add("group1");
//当前组对象是否订阅Datechange事件
Group.IsSubscribed = true;
Items = Group.OPCItems;
Item = Items.AddItem( "Channel1.Device1.I0",1);
Item = Items.AddItem( "_System._Time",2);
Item = Items.AddItem( "Channel1.Device1.string",1);
Item = Items.AddItem("Channel1.Device1.Q0",1); I
//订阅组Datechange事件
Group.DataChange += Group_DataChange;
}
}
private void Group_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
{
Console.writeline( "There is "+NumItems+" data changed.");
for(int i = 1; i <= NumItems; i++)
{
int tmpClientHandle = Convert. ToInt32(ClientHandles.Getvalue(i));
string tmpValue = ItemValues.GetValue(i).ToString();
string tmpTimeStamp= ((DateTime)(TimeStamps.GetValue(i))).ToString();
Console.WriteLine(tmpTimeStamp + " : the data
changed,clienthandle is "+ tmpClientHandlet + ";
tag value is" + tmpValue + ".");
}
}
}
}