powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работать с IOPCHDA_Server из проекта opcdelphi
25 сообщений из 79, страница 1 из 4
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37134862
renaton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток всем!!!
Подскажите пожалуйста как получить данные по 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
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37156645
renaton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто с OPC HDA не работал?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37156934
Фотография Feg16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
renaton,

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

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

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

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

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

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

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


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

А и еще этот клиент не работает с WinCC, почему еще не знаю. Но очень хотел бы узнать.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37620543
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdj, простите за некорректный вопрос: а можете выложить или прислать наработки, что-то со временем у меня не понятки, хочу доработать прогу что бы она автоматом запросы делала к ОРС ну а дальше что угодно.
пробовал делать прогу с применением библиотеки OPCHDAAuto.dll тоже самое застрял на времени, но там так же и не понятно работа с поиском хэнделов, примеров нет для делфи вообще.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37622744
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37628905
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
начал делать ОРС 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
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37629487
for_kav,

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

Сервер Теплокома, прибор ВКТ-5, данные есть проверял различными Explorer -ами, пробую с реальным каналом который имеет данные.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630263
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
25 сообщений из 79, страница 1 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работать с IOPCHDA_Server из проекта opcdelphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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