Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работать с IOPCHDA_Server из проекта opcdelphi / 25 сообщений из 79, страница 1 из 4
25.02.2011, 08:01:00
    #37134862
renaton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
Доброго времени суток всем!!!
Подскажите пожалуйста как получить данные по OPC HDA с использованием IOPCHDA_Server из проекта opcdelphi ?? Файл OPCHDA.pas
Я начал писать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
HR := CoInitializeSecurity(
     nil ,                     // points to security descriptor 
    - 1 ,                      // count of entries in asAuthSvc 
     nil ,                     // array of names to register 
     nil ,                     // reserved for future use 
    RPC_C_AUTHN_LEVEL_NONE,  // the default authentication level for proxies 
    RPC_C_IMP_LEVEL_IMPERSONATE, // the default impersonation level for proxies 
     nil ,                     // used only on Windows 2000 
    EOAC_NONE,               // additional client or server-side capabilities 
     nil                       // reserved for future use 
    );
   if  Failed(HR)  then 
   begin 
    memo1.Lines.add('Failed to initialize DCOM security');
   end ;
   try 
     // we will use the custom OPC interfaces, and OPCProxy.dll will handle 
     // marshaling for us automatically (if registered) 
    HdaServer := CreateComObject(ProgIDToClassID(ServerProgID))  as  IOPCHDA_Server;
   except 
    HdaServer :=  nil ;
   end ;
   if  HdaServer <>  nil   then 
   begin 
    memo1.Lines.add('Connected to OPC HDA server');
   end 
   else   begin 
    memo1.Lines.add('Unable to connect to OPC HDA server');
    Exit;
   end ;
Как можно получить данные за период времени и за конкретное время? Спасибо.
...
Рейтинг: 0 / 0
10.03.2011, 07:55:56
    #37156645
renaton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
Никто с OPC HDA не работал?
...
Рейтинг: 0 / 0
10.03.2011, 10:58:04
    #37156934
Feg16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
renaton,

это случаем не для iFix?
...
Рейтинг: 0 / 0
10.03.2011, 19:18:46
    #37158300
NeoalexUA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
Набор документации по стандарту OPC
http://pclib.in.ua/kompyuternye-video-uroki-i-knigi/programmirovanie/4840.html
...
Рейтинг: 0 / 0
04.11.2011, 16:42:59
    #37511952
Как работать с IOPCHDA_Server из проекта opcdelphi
Люди помогите, кто - нибудь работал с HDA??? Тоже скачал этот паскаль файл (OPCHDA.pas) и теперь мучаюсь с ним. Как ним пользоваться??? Посмотреть бы хотть какойто пример. Буду рад любой консультации))))
...
Рейтинг: 0 / 0
04.11.2011, 17:04:34
    #37511988
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
не знаю, что это такое всё, но у них там на странице, на которую была ссылка, есть же какие то примеры
...
Рейтинг: 0 / 0
04.11.2011, 17:37:48
    #37512005
Как работать с IOPCHDA_Server из проекта opcdelphi
Кроик Семён,

Да я уже видел эти примеры. Там не рассматриваеться HDA ))) Задача построить программу которая будет считывать архивные данные через OPC HDA, а конкретно с приборов фирмы логика, OPC HDA - Logika.HDA.2 и значения запихнуть в TStringList.
В инете полно примеров для DA, и даже компонеты есть бессплатные, а вот для HDA голяк полный.
...
Рейтинг: 0 / 0
04.11.2011, 20:15:31
    #37512149
Feg16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
GrozaUmnikam aka tarasdj, HDA в твоей версии - History Data Access?
...
Рейтинг: 0 / 0
07.11.2011, 10:36:12
    #37513947
Как работать с IOPCHDA_Server из проекта opcdelphi
Feg16GrozaUmnikam aka tarasdj, HDA в твоей версии - History Data Access?
ДА!
...
Рейтинг: 0 / 0
07.11.2011, 13:38:57
    #37514327
Feg16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
GrozaUmnikam aka tarasdjFeg16GrozaUmnikam aka tarasdj, HDA в твоей версии - History Data Access?
ДА!Ищи по форуму, я выкладывал сырой интерфейс доступа
...
Рейтинг: 0 / 0
07.11.2011, 16:24:56
    #37514642
Как работать с IOPCHDA_Server из проекта opcdelphi
Feg16,

А ты можешь подсказать как ты делал? Спомощю каких библиотек??? Или может есть хароший компонент для этого интерфейса???
...
Рейтинг: 0 / 0
07.11.2011, 16:32:29
    #37514659
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
...
Рейтинг: 0 / 0
07.11.2011, 16:36:06
    #37514670
Как работать с IOPCHDA_Server из проекта opcdelphi
Очень спасибо. Мне бы конечно очень помогли б хоть какие-нить исходнички, как работать с этими юнитами. Помогите что у кого есть))) Плз)))
...
Рейтинг: 0 / 0
07.11.2011, 20:21:38
    #37515066
Feg16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
GrozaUmnikam aka tarasdjОчень спасибо. Мне бы конечно очень помогли б хоть какие-нить исходнички, как работать с этими юнитами. Помогите что у кого есть))) Плз)))Исходники есть только на Си, документация предоставляется с давно закрытого форума, не помню откуда я нарыл инфу. Это к чему.. с полпинка ты не сделаешь даже шалабушку. Могу посоветовать поковырять ODBC HDA источник данных, ставится при установке 4-го фикса. Я с ним пытался немного поработать - но он тормозил при выборке данных с интервалом в 100 мс.
...
Рейтинг: 0 / 0
07.11.2011, 20:24:30
    #37515071
Feg16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
NeoalexUAНабор документации по стандарту OPC
http://pclib.in.ua/kompyuternye-video-uroki-i-knigi/programmirovanie/4840.html Кстати чтобы ковырять OPC клиент/сервер нужно как минимум его изучить. И то, даже при правильной настройке он любит время от времени отваливаться. Для OPC HDA существует множество документации, осталось только почитать и вникнуть. Компонент / библиотек для быстрого программирования ты вряд-ли найдешь, слишком специфичная, бесполезная и неблагодарная работа :)
...
Рейтинг: 0 / 0
24.11.2011, 17:18:33
    #37542845
Как работать с IOPCHDA_Server из проекта opcdelphi
Feg16,

У меня получилось. Считываю данные через OPC HDA за любом промежуток времени и сохраняю их в БД SQLEXPRESS.

Использовал библиотеки http://code.google.com/p/opcdelphi/

И за основу взял маленький примерчик http://www.delphimaster.ru/cgi-bin/forum.pl?id=1243844844&n=8
...
Рейтинг: 0 / 0
09.01.2012, 23:22:35
    #37606922
for_kav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
GrozaUmnikam aka tarasdj,
Уважаемый! я в программинге новичок, скажите каким образом отображаете список ОРС HDA серверов? через ОРС enum? или реестр шарите? какова работа вашей проги с удалёнными компами?
если не корректен вопрос, сильно не пинайте!
...
Рейтинг: 0 / 0
10.01.2012, 19:54:18
    #37608164
for_kav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
for_kavGrozaUmnikam aka tarasdj,
Уважаемый! я в программинге новичок, скажите каким образом отображаете список ОРС HDA серверов? через ОРС enum? или реестр шарите? какова работа вашей проги с удалёнными компами?
если не корректен вопрос, сильно не пинайте!
угумс , разобрались, сделали через OPCEnum, поиск всех HDA серверов, теперь в ComboBox выбираю сервер, и подключаюсь через IOPCHDA_server (CreateComObject(..................) as IOPCHDA_Server).
Сервер например Matrikon поднимается, а дальше что-т не совсем понятно, через какие процедуры или функции выбрать весь список (пространство) Item???????? ( пока добиваюсь выборки всех Item ОРС сервера).
Я так понимаю что необходимо тискать и дальше функции IOPCHDA_Server такие как GetItemHandle?

Уважаемые форумчане подскажите пожалуйста!


Спасибо.
...
Рейтинг: 0 / 0
13.01.2012, 16:04:57
    #37613384
Как работать с IOPCHDA_Server из проекта opcdelphi
Название сервера к которому я хочу подключиться я беру с Matrikona , а также названия тегов. Тупо копирую их с матрикона. Но вот еще тут есть небольшой нюанс. если Вы хотите чтобы ваш клиент был оригинален и работал с разными видами тегов, то надо обязательно брать во внимание то как тег архивирован. Ведь интервалов вот сколько (500ms, 1s, 2s, 5s, 10s, 20s, 1 min, 2 min, 5 min, 10 min, 1h, 2h, 10h, 1day).
С удаленными серверами тоже работает нормально, но надо сам сервер на удалённом компе загрузить. Сам не открывает. Может какието надо внести настройки, я не знаю, я делаю так. Кароче клиент отлажывал на ОРС - логики, как бы работает. И работает на сей день прекрасно.

А и еще этот клиент не работает с WinCC, почему еще не знаю. Но очень хотел бы узнать.
...
Рейтинг: 0 / 0
18.01.2012, 16:49:47
    #37620543
for_kav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
GrozaUmnikam aka tarasdj, простите за некорректный вопрос: а можете выложить или прислать наработки, что-то со временем у меня не понятки, хочу доработать прогу что бы она автоматом запросы делала к ОРС ну а дальше что угодно.
пробовал делать прогу с применением библиотеки OPCHDAAuto.dll тоже самое застрял на времени, но там так же и не понятно работа с поиском хэнделов, примеров нет для делфи вообще.
...
Рейтинг: 0 / 0
19.01.2012, 17:09:21
    #37622744
for_kav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
for_kav,

Скажу сразу: использую библиотеку GrayBox OPCHDA (она полностью бесплатна).
удалённые сервера и локальные опеделяются, содержимое вижу, получаю переменные, теперь не могу считать с них данные.
вот кусок кода:
.............
starttime := EncodeDate(2012, 1, 17) + EncodeTime(10, 00, 00, 00);
endtime := EncodeDate(2012, 1, 17) + EncodeTime(11, 00, 00, 00);
ItID := OPCHDABrows.GetItemID(ItemName);
OPC_HDA_Items := HdaServ.OPCHDAItems;
OPC_HDA_Item := OPC_HDA_Items.AddItem(ItID, ClientHandle);
AllItems := OPC_HDA_Item.ReadRaw(starttime, endtime, 10, 1);

получаем AllItems = $00f54ae0 , тип переменной =9 - varDispatch

помогите пожалуйста разобраться что дальше то делать? как енту переменную то дальше использовать?
...
Рейтинг: 0 / 0
24.01.2012, 14:43:22
    #37628905
for_kav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
начал делать ОРС HDA клиента на делфийских библиотечках. получилось считывать структуру ОРС, а вот чтение переменной по функции ReadRaw не получается, всё время массив = nil......... подскажите что не так.



var
ReadRawVal: IOPCHDA_SyncRead;
Res: HRESULT;
htStartTime: OPCHDA_TIME;
htEndTime: OPCHDA_TIME;
phClient: POPCHANDLEARRAY;
arrClient: array [0 .. 0] of DWORD;
phServer: POPCHANDLEARRAY;
ppItemValues: POPCHDA_ITEMARRAY;
ppErrors: PResultList;
ppItemValuesItem: OPCHDA_ITEM;

begin
ReadRawVal := CreateRemoteComObject(Edit1.Text, CLSIDServer) as IOPCHDA_SyncRead;
htStartTime.bString := False;
htStartTime.ftTime := DateTimeToFileTime(Now - 1);
htEndTime.bString := False;
htEndTime.ftTime := DateTimeToFileTime(Now - 10);
arrClient[0] := 1;
phClient := @arrClient;

Res := OPCServ.GetItemHandles(1, @pszItemID, phClient, phServer, ppErrors); // находим Хэндел сервера
Res := ReadRawVal.ReadRaw(htStartTime, htEndTime, 10, False, 1, phServer, ppItemValues, ppErrors);

end;

ppItemValues = nil (((( т.е. ничего не приходит


function DateTimeToFileTime(FileTime: TDateTime): TFileTime;
var
LocalFileTime, Ft: TFileTime;
SystemTime: TSystemTime;
begin
Result.dwLowDateTime := 0;
Result.dwHighDateTime := 0;
DateTimeToSystemTime(FileTime, SystemTime);
SystemTimeToFileTime(SystemTime, LocalFileTime);
LocalFileTimeToFileTime(LocalFileTime, Ft);
Result := Ft;
end;

на и с htStartTime не всё ясно = всегда в htStartTime.szTime появляются какие-то данные типа: Ё, '', '䶋诤졅䠁謨롅㭦࿃侅̙'#$FE02'ɿ蔏'#$1977#3'䗆ǣ嶉菼ﱍj'
...
Рейтинг: 0 / 0
24.01.2012, 17:59:22
    #37629487
Как работать с IOPCHDA_Server из проекта opcdelphi
for_kav,

С каким сервером делаете отладку? Убедидесь что там точно есть данные!!!
...
Рейтинг: 0 / 0
25.01.2012, 07:26:46
    #37630086
for_kav
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с IOPCHDA_Server из проекта opcdelphi
GrozaUmnikam aka tarasdj,

Сервер Теплокома, прибор ВКТ-5, данные есть проверял различными Explorer -ами, пробую с реальным каналом который имеет данные.
...
Рейтинг: 0 / 0
25.01.2012, 11:00:00
    #37630263
Как работать с IOPCHDA_Server из проекта opcdelphi
for_kav,

Я Вам даю рабочий кусочек кода которым можна считать тег:
А Вас я хочу попросить кусочек кода которым Вы определяете список серверов на компьютере спомощю Enum. Если не жалко!!!
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Коннект
function HDAConnectRemoteFromSynthRead(ComputerName: String; ServerName: string): Boolean;
begin
if Trim(ServerName) <> '' then
begin
 ServerProgID:=StringToOleStr(ServerName);
 Res:=CLSIDFromProgID(ServerProgID,ServerCLSID);
 try
  HDASyncRead:=CreateRemoteComObject(ComputerName, ServerCLSID) as IOPCHDA_SyncRead;
 except
  HDASyncRead := nil;
 ShowMessage('Класс не зарегистрирован');
  Exit;
 end;
 HDASyncRead.QueryInterface(iid,Container);
 Result:=true;
end;
end;



Скормим тег чтобы получить СерверХандл
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
function GetItemServerHandle(ServerIf: IUnknown;
 sItem: string; iClient: DWORD; var iServer: DWORD): HRESULT;
var
 sItemW: WideString;
 PsItemW: POleStr;
 arrPsItemW: array [0..0] of pointer;
 arrClient: array [0..0] of DWORD;
 phClient, pphServer: POPCHANDLEARRAY;
 Errors: PResultList;
 ServIf: IOPCHDA_Server;
begin
 Result := E_FAIL;
 iServer:=0;
 try
   ServIf := ServerIf as IOPCHDA_Server;
 except
   ServIf := nil;
 end;
 if ServIf <> nil then
 begin
   sItemW:=sItem; PsItemW:=POleStr(sItemW);
   arrPsItemW[0]:=PsItemW;
   arrClient[0]:=iClient;
   phClient:=@arrClient;
   Result := ServIf.GetItemHandles(1,
   @arrPsItemW, phClient, pphServer, Errors);
   if Succeeded(Result) then
   begin
     Result := Errors[0];
     CoTaskMemFree(Errors);
     iServer:=pphServer^[0];
     CoTaskMemFree(pphServer);
   end;
 end;
end;



Само считывание
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
   HDAConnectRemoteFromSynthRead('ComputerName','ServerName');
   Res:=GetItemServerHandle(HDASyncRead ,'TagNAme',iServerH);
   htStartTime.bString:=false;
   htStartTime.ftTime := DateTimeToFileTime(EncodeDateTime(CYear, CMonth, CDAy, 00, 00, 00, 000));
   arrServer[0]:=iServerH;
   phServer:=@arrServer;
   Res:=HDASyncRead.ReadRaw(htStartTime, htEndTime, vt+1 , false, 1 ,phServer, ppItemValues, ppErrors);
   if ppItemValues = nil then ListBox1.Items.Add(timetostr(now)+' Error! ');
   if Res=E_FAIL then ShowMessage('fail');
   dataarray.Clear;
   datearray.Clear;
   newdataarray.Clear;
   ppItemValuesItem:=ppItemValues^[0];
   pvDataValues:=ppItemValuesItem.pvDataValues;
   pftTimeStamps:=ppItemValuesItem.pftTimeStamps;
   haAggregate:=ppItemValuesItem.haAggregate;
   dwCount:=ppItemValuesItem.dwCount;
   for i := 0 to vt do
   begin
   dataarray.Append(pvDataValues[i]);
   end;
   for i := 0 to vt-1 do begin
   datearray.Append(DateTimeToStr(FileTimeToDateTime(pftTimeStamps[i])));
   end;



Ну а вот так завершить Сервер
Код: pascal
1.
2.
3.
   HDASyncRead._AddRef;
   Res := HDASyncRead._Release;
   HDASyncRead := nil;



Преображение:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 function DateTimeToFileTime(FileTime: TDateTime): TFileTime;
 var
   LocalFileTime, Ft: TFileTime;
   SystemTime: TSystemTime;
 begin
   Result.dwLowDateTime  := 0;
   Result.dwHighDateTime := 0;
   DateTimeToSystemTime(FileTime, SystemTime);
   SystemTimeToFileTime(SystemTime, LocalFileTime);
   LocalFileTimeToFileTime(LocalFileTime, Ft);
   Result := Ft;
 end;



Ну и чтобы вообще было щастье переменные. Тут должно быть для Вас есть лишние, я разбираться не буду. Это уж Вы сами уже!!

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
var
   Form1: TForm1;
   HDAServerIf:                IOPCHDA_Server;
   HDASyncRead:                IOPCHDA_SyncRead;
   i: integer;
   iServerH: DWORD;
   Res: HRESULT;
   // чтение
   htStartTime:                OPCHDA_TIME;
   htEndTime:                  OPCHDA_TIME;
   dwNumValues:                DWORD;
   bBounds:                    BOOL;
   dwNumItems:                 DWORD;
   phServer:                   POPCHANDLEARRAY;
   arrServer:                  array [0..0] of DWORD;
   ppItemValues:               POPCHDA_ITEMARRAY;
   ppErrors:                   PResultList;
   ppItemValuesItem:           OPCHDA_ITEM;
   pvDataValues:               POleVariantArray;
   pftTimeStamps:              PFileTimeArray;
   haAggregate:                DWORD;
   dwCount:                    DWORD;
   newdataarray:               TStrings;
   dataarray:                  TStrings;
   datearray:                  TStrings;
   CountArray, List:           TStrings;
   AggregateArray:             TStrings;
   Computers, ListHDA:         TStringList;
   szNode:                     POleStr;
   pszItemID:                  PWideChar;
   pszName:                    PWideChar;
   pdwAttrID:                  PDWORDARRAY;
   pOperator:                  POPCHDA_OPERATORCODESARRAY;
   Ini:                        TIniFile;
   m, n, j:                    Integer;
   fltree,  flin:              bool;
   FlDb, flauto:               bool;
   Container:                  IConnectionPointContainer;
   ServerProgID:               POLeStr;
   ServerCLSID:                TCLSID;
   pdwCount:                   DWORD;
   ppdwAttrID:                 PDWORDARRAY;
   ppszAttrName:               POleStrList;
   ppszAttrDesc:               POleStrList;
   ppvtAttrDataType:           PVarTypeList;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работать с IOPCHDA_Server из проекта opcdelphi / 25 сообщений из 79, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]