Ich konvertiere ein Windows Form von VB in C# und ich lief in einen Fehler, wenn ich versuchte, ein synchronisiertes Lesen meiner OPC-Tags zu tun.Wert fällt nicht in den erwarteten Bereich. (Runtime Error)
Ich habe diesen Code:
public partial class FrmPartialMain : Form
{
RsiOPCAuto.OPCServer oOpcServer;
RsiOPCAuto.OPCGroup oOpcGroup;
int ClHandle; //this is set to 1 in another part of the code.
int SvHandle;
int OpcDsCashe = 1;
int OpcDsDevice = 2;
private void cmdSyncRead_Click(object sender, EventArgs e)
{
int lNumItems = oOpcGroup.OPCItems.Count; // = 3
int[] h = new int[lNumItems];
Array arValues = new int[lNumItems];
Array arHandles;
Array arErrors;
object Qualities;
object Timestamps;
h[ClHandle - 1] = oOpcGroup.OPCItems.Item(ClHandle).ServerHandle;
arHandles = (Array)h;
//Error on the next line bellow.
oOpcGroup.SyncRead((short)OpcDsDevice, lNumItems, ref arHandles, out arValues, out arErrors, out Qualities, out Timestamps);
txtSubValue.Text = Convert.ToString(arValues.GetValue(0));
}
}
oOpcGroup.Read() liest den Wert, Qualität und Zeitinformationen für ein oder mehrere Objekte in einer Gruppe. und der Rückgabetyp wie folgt aussieht:
SyncRead(short Source, int NumItems, ref System.Array ServerHandles, out System.Array Values, out System.Array Errors, out object Qualities, out object TimeStamps);
diesen Code Laufen gibt mir den Fehler im Titel, Ist Wert nicht innerhalb des erwarteten Bereichs. Irgendwelche Ideen, was ich hier falsch machen könnte?
Brainstorm weg!
Bitte fügen Sie die Ausnahme mit Stacktrace an, welche Linie die die Zeilennummer bezieht. –
Wo ist ClHandle? – Henrik
Es sieht so aus, als ob ClHandle nie gesetzt ist, also fängt es bei 0 an, dann subtrahiert man 1 davon, was einen Array-Index von -1 übrigläßt, was kein gültiger Index ist. – pstrjds