Я конвертирую форму Windows из VB в C#, и я столкнулся с ошибкой, когда попытался выполнить синхронизированное чтение моих тегов OPC.Значение Не попадает в ожидаемый диапазон. (Ошибка выполнения)
У меня этот код:
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() считывает информацию о стоимости, качества и метки времени для одного или нескольких элементов в группе. и возвращаемый тип выглядит следующим образом:
SyncRead(short Source, int NumItems, ref System.Array ServerHandles, out System.Array Values, out System.Array Errors, out object Qualities, out object TimeStamps);
Выполнение этого кода дает мне ошибку в названии, Значение не попадает в ожидаемый диапазон. Любые идеи о том, что я могу делать неправильно здесь?
Мозговой штурм прочь!
Пожалуйста, добавьте исключение с StackTrace, показывает, какая строку номер_строка ссылается. –
Где находится ClHandle? – Henrik
похоже, что ClHandle никогда не устанавливается, поэтому он начинается с 0, затем вы вычитаете 1 из него, что оставит вам индекс массива -1, который не является допустимым индексом. – pstrjds