OPC-клиент на Lazarus

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

OPC-клиент на Lazarus

Сообщение alex_rain » 13.07.2010 10:50:13

Имеется ли у кого-нибудь опыт создания OPC-клиента на Lazarus?
В Delphi все просто: импорт библиотеки типов с gbhda_aw.dll (для OPC HDA), gbda_aut.dll или OPCDAAuto.dll (для OPC DA), дальнейшее - дело техники.
Возможно ли реализовать OPC-клиент на Lazarus?
alex_rain
новенький
 
Сообщения: 26
Зарегистрирован: 12.02.2010 06:56:32
Откуда: Russia

Re: OPC-клиент на Lazarus

Сообщение alex_rain » 16.07.2010 06:39:49

С синхронным чтением разобрался:
Код: Выделить всё
var
  opcServer, opcGroup, opcItem1: variant;
  isConnected: boolean = False;
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not isConnected then
  begin
    try
      opcServer := CreateOleObject('OPC.Automation');
      opcServer.Connect('Advantech.ADAM.1');
      opcGroup := opcServer.OPCGroups.Add('TestGroup');
      opcItem1 := opcGroup.OPCItems.AddItem('Simulation.Group1.Tag1', 1);
      isConnected := True;
      Label1.Caption := 'Connected';
    except
      on E: Exception do
        ShowMessage(E.ClassName + ': ' + UTF8Encode(E.Message));
    end;
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  if isConnected then
  begin
    try
      opcItem1.Read(1);
      Label2.Caption := VarToStr(opcItem1.Value);
    except
      on E: Exception do
        ShowMessage(E.ClassName + ': ' + UTF8Encode(E.Message));
    end;
  end;
end;

Не могу понять, как делать асинхронное через созданный OLE-объект.
Необходимо обрабатывать событие DataChange из DIOPCGroupEvent, но как это сделать?

Lazarus 0.9.29 FPC 2.4.3 Win32
alex_rain
новенький
 
Сообщения: 26
Зарегистрирован: 12.02.2010 06:56:32
Откуда: Russia

Re: OPC-клиент на Lazarus

Сообщение alex_rain » 22.07.2010 03:56:00

Разобрался. :idea:
Объявил интерфейсы IOPCServer, IOPCGroups, IOPCGroup, OPCItems, OPCItem,
диспинтерфейсы DIOPCServer, DIOPCGroupEvent, создал класс для обработки событий
TOPCDataCallback = class(TInterfacedObject, IUnknown, IDispatch).
Создаю OLE-объект и подключаюсь таким образом:
Код: Выделить всё
  testServer := CreateOleObject('OPC.Automation') as DIOPCServer;
  testServer.Connect('Advantech.ADAM.1', EmptyParam);
  testGroup := testServer.OPCGroups.Add('TestGroup') as IOPCGroup;
  opcItem1 := testGroup.OPCItems.AddItem('Simulation.Group1.Tag1', 1);
  opcDataCallback := TOPCDataCallback.Create;
  Container := testGroup as IConnectionPointContainer;
  OleCheck(Container.FindConnectionPoint(IID_IOPCDataCallback,
    ConnectionPoint));
  OleCheck(ConnectionPoint.Advise(opcDataCallback as IUnknown, Cookie));
  testGroup.Set_IsSubscribed(True);
  testGroup.Set_IsActive(True);
  testGroup.Set_UpdateRate(1000);
Отключение:
Код: Выделить всё
  ConnectionPoint.UnAdvise(Cookie);
События OLE-объекта обрабатываю в TOPCDataCallback.Invoke.

:!: Кстати: одна из причин, почему в Lazarus не работают файлы импорта библиотек типов,
созданные в Delphi / Turbo Delphi, это практически пустой файл oleserver.pp.

Lazarus 0.9.29 FPC 2.5.1 Win32
alex_rain
новенький
 
Сообщения: 26
Зарегистрирован: 12.02.2010 06:56:32
Откуда: Russia

Re: OPC-клиент на Lazarus

Сообщение vinceducat » 24.07.2010 20:18:50

Hi

With chance i find this forum sorry (i just speak english or french)

il would use lazarus to create a opc client.

is someone could help me...

is it possible to uses the opclient project find on opcconnet.com ? and translate it ...

is someone got a working project ...

where to find OPCDAAuto.dll

thanks ....

send me our answer in MP..
vinceducat
незнакомец
 
Сообщения: 3
Зарегистрирован: 24.07.2010 20:13:55

Re: OPC-клиент на Lazarus

Сообщение alex_rain » 25.07.2010 18:07:49

il would use lazarus to create a opc client.
is someone could help me...
is it possible to uses the opclient project find on opcconnet.com ? and translate it ...
is someone got a working project ...

Информации, приведенной выше, более чем достаточно для создания рабочего OPC-клиента.

where to find OPCDAAuto.dll

OPCDAAuto.dll входит в OPC DA Auto 2.02 Merge Module (opcfoundation.org),
а также поставляется со многими OPC-серверами.
Ну и конечно, можно поискать по ftp.
Альтернатива: Graybox OPC DA Auto Wrapper (gbda_aut.dll).

Lazarus 0.9.29 FPC 2.5.1 Win32
alex_rain
новенький
 
Сообщения: 26
Зарегистрирован: 12.02.2010 06:56:32
Откуда: Russia

Re: OPC-клиент на Lazarus

Сообщение vinceducat » 25.07.2010 18:50:23

thank for your reply but could you write it in english please
vinceducat
незнакомец
 
Сообщения: 3
Зарегистрирован: 24.07.2010 20:13:55

Re: OPC-клиент на Lazarus

Сообщение alex_rain » 25.07.2010 19:08:30

thank for your reply but could you write it in english please

I do not speak english. Use a translator.

Lazarus 0.9.29 FPC 2.5.1 Win32
alex_rain
новенький
 
Сообщения: 26
Зарегистрирован: 12.02.2010 06:56:32
Откуда: Russia

Re: OPC-клиент на Lazarus

Сообщение vinceducat » 25.07.2010 20:42:55

it's ok i success to connect an opc serveur and read some value ....
vinceducat
незнакомец
 
Сообщения: 3
Зарегистрирован: 24.07.2010 20:13:55

Re: OPC-клиент на Lazarus

Сообщение vysha » 23.04.2016 08:46:00

alex_rainМожно пример по подробнее, что значит объявил интерфейс, интерфейсы разные бывают
vysha
незнакомец
 
Сообщения: 1
Зарегистрирован: 23.04.2016 08:40:38


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 246

Рейтинг@Mail.ru