0
我使用OpcAutomation創建OpcGroup,然後添加5個項目,但我無法在DataChange方法中獲取它們。提示符是IndexOutofRange異常我的問題是如何得到這個方法中的五個變量。謝謝。我在opc組中創建了5個項目,但我無法在DataChange方法中獲取它們
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OPCAutomation;
using System.Threading;
namespace WindowsFormsApplication7
{
public partial class Form1 : Form
{
#region 私有變量
/// <summary>
/// OPCServer Object
/// </summary>
OPCServer KepServer;
/// <summary>
/// OPCGroups Object
/// </summary>
OPCGroups KepGroups;
/// <summary>
/// OPCGroup Object
/// </summary>
OPCGroup KepGroup;
/// <summary>
/// OPCItems Object
/// </summary>
OPCItems KepItems;
/// <summary>
/// OPCItem Object
/// </summary>
OPCItem[] KepItem=new OPCItem[5];
/// <summary>
/// 主機IP
/// </summary>
string strHostIP = "";
/// <summary>
/// 主機名稱
/// </summary>
string strHostName = "";
/// <summary>
/// 連接狀態
/// </summary>
bool opc_connected = false;
/// <summary>
/// 客戶端句柄
/// </summary>
int itmHandleClient = 0;
/// <summary>
/// 服務端句柄
/// </summary>
int itmHandleServer = 0;
#endregion
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
KepServer = new OPCServer();
try
{
KepServer.Connect("KEPware.KEPServerEx.V4", "127.0.0.1");
KepGroup = KepServer.OPCGroups.Add("Loading");
SetGroupProperty();
KepItems = KepGroup.OPCItems;
itmHandleClient = 1234;
KepItem[0] = KepItems.AddItem("Channel_0_User_Defined.Sine.Sine1", itmHandleClient);
itmHandleClient++;
KepItem[1] = KepItems.AddItem("Channel_0_User_Defined.Sine.Sine2", itmHandleClient);
itmHandleClient++;
KepItem[2] = KepItems.AddItem("Channel_0_User_Defined.Sine.Sine3", itmHandleClient);
itmHandleClient++;
KepItem[3] = KepItems.AddItem("Channel_0_User_Defined.Sine.Sine4", itmHandleClient);
itmHandleClient++;
KepItem[4] = KepItems.AddItem("Channel_0_User_Defined.Sine.Sine5", itmHandleClient);
Thread.Sleep(1000);
KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
//itmHandleServer = KepItem.ServerHandle;
}
catch (Exception)
{
throw;
}
}
private void SetGroupProperty()
{
KepServer.OPCGroups.DefaultGroupIsActive = true;
KepServer.OPCGroups.DefaultGroupDeadband = 0;
KepGroup.UpdateRate = 5000;
KepGroup.IsActive = true;
KepGroup.IsSubscribed = true;
}
private void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
{
label1.Text = ItemValues.GetValue(1).ToString();
label2.Text = ItemValues.GetValue(2).ToString();
label3.Text = ItemValues.GetValue(3).ToString();
label4.Text = ItemValues.GetValue(4).ToString();
label5.Text = ItemValues.GetValue(5).ToString();
}
}
}
從索引0而不是1開始? –
@bub你是對的這是一個錯誤。但是這個事件可能會傳遞一個數組數量在1-5之間的可變數量的問題。這就是op在第三項可能得到錯誤的原因(因爲數組長度只有3) – apr