Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Программное обеспечение
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Ошибка при подписке на группу OPC тэгов

 Ответить Ответить
Автор
Сообщение
Albo Смотреть выпадающим
Новичок
Новичок


Присоединился: 01 Февраль 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 1
Свойства публикации Свойства публикации   Ответить, цитируя автора - Albo Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Ошибка при подписке на группу OPC тэгов
    Опубликовано: 27 Сентябрь 2006 09:26

Не могу понять где ошибка.

Конфигурация ПО такова: Win2000, GraphWorX32 8.04, Delphi 5.

После импорта библиотеки типов из OPCDAAutomation.dll,

получено такое описание:

  OPCItems = interface(IDispatch)
    ['{28E68F98-8D75-11D1-8DC3-3C302A000000}']
  procedure AddItems(NumItems: Integer;

           var ItemIDs: PSafeArray; var ClientHandles: PSafeArray;
           out ServerHandles: PSafeArray; out Errors: PSafeArray;
           RequestedDataTypes: OleVariant; AccessPaths: OleVariant); safecall;

Часть кода программы:

type
  SArray = ^STRArray;
  STRArray = Array [1..500] of WideString;
  IArray = ^INTArray;
  INTArray = Array [1..500] of Integer;


  TfmMain = class(TForm)
...
  private
    ItemIDs: PSafeArray;
    ClientHwnd: PSafeArray;
    ServerHwnd: PSafeArray;
    Errors: PSafeArray;
    ReqDataType: OleVariant;
    AccPaths: OleVariant;
    ItemIDsHWND: pointer;
    ClientHwndHWND: pointer;
    HR: HWND;
...

procedure TfmMain.initSRV;
begin
  try
    OPCServer1:=TOPCServer.Create(self);
    OPCServer1.Connect1('ELESY.OPCINTERCOM', OPCsrvMashine);
    OPCgroup1:=TOPCgroup.Create(OPCServer1);
    OPCgroup1.OnDataChange:=opcDataChange;
    OPCgroup1.ConnectTo(OPCServer1.OPCGroups.Add('Hydrouklon'));
    OPCgroup1.ClientHandle:=1;
    OPCgroup1.IsSubscribed:=True;
  except
    MessageDlg('Ошибка, при создании OPC клиента.', mtError, [mbOK],0);
    TerminateSRV;
  end;
end;

procedure TfmMain.LoadProfileFromINI(var ListTag: TStringList);
begin
    ItemIDs := SafeArrayCreateVector (VT_BSTR, 0, 1);
    ClientHwnd := SafeArrayCreateVector (VT_I4, 0, 1);
    HR:=SafeArrayAccessData (ItemIDs, ItemIDsHWND);
    HR:=SafeArrayAccessData (ClientHwnd, ClientHwndHWND);
        SArray(ItemIDsHWND)[cnt_Point]:='tag1';
        IArray(ClientHwndHWND)[cnt_Point]:=i;
    HR:=SafeArrayUnaccessData (ItemIDs);
    HR:=SafeArrayUnaccessData (ClientHwnd);
    OPCgroup1.OPCItems.AddItems(1, ItemIDs, ClientHwnd, ServerHwnd, Errors, ReqDataType, AccPaths);
end;

При выполнении процедуры AddItems, выдается ошибка 80070057 "Parameter is incorrect". Причем если программа выполняется под WinXP, все работает, без ошибок.

Наверх
 Ответить Ответить

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz