Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2013, 15:41   #1
kvavar
Новичок
Джуниор
 
Регистрация: 12.03.2013
Сообщений: 1
По умолчанию Проблема с OPC DA

Здравствуйте.

В процессе написания клиента ОРС возникла следующая проблема:


Код:
// подключаемся к OPC-серверу на локальном хосте  
    OPCServer opc_server = new OPCServer();  
    opc_server.Connect(serv_name, "127.0.0.1");  
      
    // создаем экземпляр браузера  
    OPCBrowser browser = opc_server.CreateBrowser();  
    browser.ShowLeafs(true);  
      
    // создаем группу в OPC-сервере  
    OPCGroups groups = opc_server.OPCGroups;  
    groups.DefaultGroupIsActive = true;  
    OPCGroup group = groups.Add("MyGroup");  
      
    // указываем с какими переменными будем работать  
    OPCItems items = group.OPCItems;  
    int [] hserv = new int[browser.Count + 1];  
    int idtrans = 2000;  
      
    // добавляем переменные в группу и сохр. их идентифик.  

    for (int i = 1; i < browser.Count + 1; i++) {  
        hserv[i] = items.AddItem(browser.Item(i), idtrans).ServerHandle;  
    }  
      
    int[] handlers = hserv;  
    int[] errors;   // массив отображающий статус считан. перемен.  
    object[] values;   // массив значений переменных  
    object qualities;   // массив качества переменных  
    object timestamps;  // массив временных меток  
      
    // синхронно считываем с устройства все значения переменных  
    group.SyncRead((short) OPCDataSource.OPCDevice, browser.Count, ref handlers, out values, out errors, out qualities, out timestamps);   
      
    // выводим на печать результаты 
    for (int i = 1; i < browser.Count + 1; i++) {  
        Console.WriteLine(browser.Item(i) + ":");  
        Console.WriteLine("\tValue: " + values.GetValue(i).ToString());  
          
        // выясняем качество переменной  
        switch(int.Parse(((Array) qualities).GetValue(i).ToString())) {  
            case (int) OPCQuality.OPCQualityGood:  
                Console.WriteLine("\tQuality: Good"); break;  
            default:  
                Console.WriteLine("\tQuality: Bad"); break;  
        }  
        Console.WriteLine("\tTimeStamp: " + ((DateTime)((Array) timestamps).GetValue(i)).ToString("dd.MM.yyyy hh:mm:ss"));  
        Console.WriteLine();  
    }  
      
    opc_server.Disconnect(); // разрываем соединение
Собственно, ошибка в строке

Код:
group.SyncRead((short) OPCDataSource.OPCDevice, browser.Count, ref handlers, out values, out errors, out qualities, out timestamps);
"Невозможно упаковать массив SafeArray в массив этого типа, так как он имеет ненулевую нижнюю границу или более одного измерения"

Метод SyncRead принимает только вышеуказанные параметры и перегрузок других не имеет.

Использую библиотеку opcdaauto.dll от оф разработчиков протокола орс.

win7 x64, VS2010, Framework 4.0

Благодарю за помощь
kvavar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OPC клиент для ВЗЛЕТА KORT Общие вопросы Delphi 2 11.12.2012 10:26
OPCClient для OPC-Сервера Logika.HDA.2??? tarasdj Общие вопросы Delphi 0 01.11.2011 15:15
Связь с приборами 232RS -> OPC server iZwerg Фриланс 0 09.08.2011 17:48
OPC-клиент CilCatblack Visual C++ 2 03.08.2011 14:48
Вопрос по OPC спецификации POlegin Общие вопросы Delphi 5 13.01.2009 21:38