C# 获取多个OPC值
下面是从OPC服务器获取多个值的代码C# 获取多个OPC值,c#,plc,opc,opc-da,C#,Plc,Opc,Opc Da,下面是从OPC服务器获取多个值的代码 private void getData() { try { int count = 1; opcServer.Connect("OPCTechs.SiemensNet30DA", ""); opcGroup = opcServer.OPCGroups.Add("MP"); opcGroup.DataChange += new DIO
private void getData()
{
try
{
int count = 1;
opcServer.Connect("OPCTechs.SiemensNet30DA", "");
opcGroup = opcServer.OPCGroups.Add("MP");
opcGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(opcGroup_DataChange);
//Get First String
for (int i = 40; i <= 47; i++)
opcGroup.OPCItems.AddItem("D104.B" + i, count++);
//Get Second String
for (int i = 80; i <= 91; i++)
opcGroup.OPCItems.AddItem("D104.B" + i, count++);
opcGroup.OPCItems.DefaultIsActive = true;
opcGroup.UpdateRate = 1000;
opcGroup.IsSubscribed = opcGroup.IsActive;
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, "Alert");
}
}
private void opcGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
{
try
{
string temp = "";
int count = 1;
for (count = 1; count <= NumItems; count++)
{
if (Convert.ToInt32(ClientHandles.GetValue(count)) == 47)
temp += ItemValues.GetValue(count).ToString();
}
Textbox1.Text = temp.ToString();
temp = "";
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Alert");
}
}
private void getData()
{
尝试
{
整数计数=1;
Connect(“OPCTechs.SiemensNet30DA”);
opcGroup=opcServer.OPCGroups.Add(“MP”);
opcGroup.DataChange+=新的DIOPCGroupEvent\u DataChangeEventHandler(opcGroup\u DataChange);
//获取第一个字符串
对于(int i=40;i这就是OPC的工作方式。您可以为订阅的每个项目指定一个客户端句柄。每当服务器有一些项目的新数据时,您都会收到一个包含一个或多个项目的通知。由于无法预测何时更改哪些数据,因此也无法指定通知中将包含哪些项目,以及该项目将如何更改h订单
您需要检查通知中包含的所有项目,并根据它们的客户端句柄,决定如何处理它们。顺序每次都可能更改,但这不是问题:假设您正在查找客户端句柄47。在第一个通知中,您将在索引10的ClientHandles中找到它;在第二个通知中,您将在ion,它可能根本不在那里;在第三个通知中,它可能在索引15处。您只需确定位置,然后在其他数组中的相同位置找到该位置的数据:即,对于第一个通知,在数组ItemValue、Qualities和TimeStamps中的索引10处;对于第三个通知,在同一个数组中的索引15处rrays。这是OPC的工作方式。您可以为订阅的每个项目指定客户端句柄。每当服务器有一些项目的新数据时,您就会收到一个包含一个或多个项目的通知。由于无法预测何时更改哪些数据,因此也无法指定通知中将包含哪些项目以及哪些ord呃
您需要检查通知中包含的所有项目,并根据它们的客户端句柄,决定如何处理它们。顺序每次都可能更改,但这不是问题:假设您正在查找客户端句柄47。在第一个通知中,您将在索引10的ClientHandles中找到它;在第二个通知中,您将在ion,它可能根本不在那里;在第三个通知中,它可能在索引15处。您只需确定位置,然后在其他数组中的相同位置找到该位置的数据:即,对于第一个通知,在数组ItemValue、Qualities和TimeStamps中的索引10处;对于第三个通知,在同一个数组中的索引15处rrays。这是OPC的工作方式。您可以为订阅的每个项目指定客户端句柄。每当服务器有一些项目的新数据时,您就会收到一个包含一个或多个项目的通知。由于无法预测何时更改哪些数据,因此也无法指定通知中将包含哪些项目以及哪些ord呃
您需要检查通知中包含的所有项目,并根据它们的客户端句柄,决定如何处理它们。顺序每次都可能更改,但这不是问题:假设您正在查找客户端句柄47。在第一个通知中,您将在索引10的ClientHandles中找到它;在第二个通知中,您将在ion,它可能根本不在那里;在第三个通知中,它可能在索引15处。您只需确定位置,然后在其他数组中的相同位置找到该位置的数据:即,对于第一个通知,在数组ItemValue、Qualities和TimeStamps中的索引10处;对于第三个通知,在同一个数组中的索引15处rrays。这是OPC的工作方式。您可以为订阅的每个项目指定客户端句柄。每当服务器有一些项目的新数据时,您就会收到一个包含一个或多个项目的通知。由于无法预测何时更改哪些数据,因此也无法指定通知中将包含哪些项目以及哪些ord呃
您需要检查通知中包含的所有项目,并根据它们的客户端句柄,决定如何处理它们。顺序每次都可能更改,但这不是问题:假设您正在查找客户端句柄47。在第一个通知中,您将在索引10的ClientHandles中找到它;在第二个通知中,您将在ion,它可能根本不在那里;在第三个通知中,它可能在索引15处。您只需确定位置,然后在其他数组中的相同位置找到该位置的数据:即,对于第一个通知,在数组ItemValue、Qualities和TimeStamps中的索引10处;对于第三个通知,在同一个数组中的索引15处rrays.谢谢你的回复。明白了!!谢谢你的回复。明白了!!谢谢你的回复。明白了!!谢谢你的回复。明白了!!