powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работать с IOPCHDA_Server из проекта opcdelphi
79 сообщений из 79, показаны все 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
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630279
АААА и еще добавлю.

Код: pascal
1.
 Res:=HDASyncRead.ReadRaw(htStartTime, htEndTime, vt+1 , false, 1 ,phServer, ppItemValues, ppErrors);



Этоа функция работает так. Переменная vt это количество считываемых елементов от выбраной даты. Тоесть если ваш тег заархивирован почасово, то чтобы получить данные за целые сутки вам надо считать 24 элемента. Все данные я запихиваю в стринглисты, тоесть сами данные и таймштамп. Потом их из стринглиста можна куда хочешь запихнуть.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630713
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdj,

Спасибо тебе огромное товарищ!!!!!!
вот код поиска ОРС серверов на машинах:
Код: 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.
var
  i: integer;
  CATIDs: array of TGUID;
begin
  ListOPCServers.Clear;
  ServerNames := TStringList.Create;
  try
    //SetLength(CATIDs, 0);
    //OPCServerList := TOPCServerList.Create(Edit1.Text, true, CATIDs);
    SetLength(CATIDs, 1);
    CATIDs[0] := CATID_OPCHDAServer10;
    OPCServerList := TOPCServerList.Create(Edit1.Text, false, CATIDs);

    OPCServerList.Update;
    ServerNames.AddStrings(OPCServerList.Items);

    for i := 0 to ServerNames.count - 1 do
      begin
        ListOPCServers.Items.Add(ServerNames[i]);
      end;
  finally
    ServerNames.Free;
  end;
  ConnectOPCServer.SetFocus;
end;



вот как то так)
да и ещё приведу:
Код: pascal
1.
2.
3.
4.
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActiveX, ComObj, CheckLst,
  OPCHDA, OPCtypes, OPCCOMN, OPCenum, ExtCtrls;
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630849
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdj,

я извиняюсь а как vt находили? и что за функция такая - EncodeDateTime, сами написали?
я на Делфи ХЕ пишу, такого нет есть просто EncodeDate и EncodeTime.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630901
for_kav,

Код: pascal
1.
unit DateUlils
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630902
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdj,

Res:=GetItemServerHandle(HDASyncRead ,'TagNAme',iServerH); - тут передаёте 3 переменные а в функции 4 (function GetItemServerHandle(ServerIf: IUnknown; sItem: string; iClient: DWORD; var iServer: DWORD): HRESULT;)
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630903
Сорри:
Код: pascal
1.
unit DateUtils
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630908
Сорри:
Код: pascal
1.
Res:=GetItemServerHandle(HDASyncRead ,'TagName', 1, iServerH);
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630960
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjСорри:
Код: pascal
1.
Res:=GetItemServerHandle(HDASyncRead ,'TagName', 1, iServerH);



это понял я, но вот почему-то на чтении в ret ASM уходит? что-то не правильно ввожу походу
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37630992
for_kav,

Покажите что Вы прописываете в ReadRaw? Меня инетересует vt.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631008
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjfor_kav,

Покажите что Вы прописываете в ReadRaw? Меня инетересует vt.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  OPCServ:= nil;
  ReadRawVal := CreateRemoteComObject(Edit1.Text, CLSIDServer) as IOPCHDA_SyncRead;
  Res := GetItemServerHandle(ReadRawVal, pszItemID, 1, iServerH);

  htStartTime.bString := false;
  // htStartTime.szTime := 'DAY -1D';
  htStartTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 1, 24, 00, 00, 00, 00));

  htEndTime.bString := false;
  // htEndTime.szTime := 'DAY';
  htEndTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 1, 25, 00, 00, 00, 00));

  arrServer[0] := iServerH;
  phServer := @arrServer;

  Res := ReadRawVal.ReadRaw(htStartTime, htEndTime, 24, false, 1, phServer, ppItemValues, ppErrors);
  
  ppItemValuesItem := ppItemValues^[0];    ----- после этого вываливается здесь типа access.......
  pvDataValues := ppItemValuesItem.pvDataValues;
  pftTimeStamps := ppItemValuesItem.pftTimeStamps;
  haAggregate := ppItemValuesItem.haAggregate;
  dwCount := ppItemValuesItem.dwCount;
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631011
for_kavGrozaUmnikam aka tarasdj,

OPCServerList := TOPCServerList.Create(Edit1.Text, false, CATIDs);



Тут Edit1.Text это имя компьютера?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631032
for_kavGrozaUmnikam aka tarasdjfor_kav,

Покажите что Вы прописываете в ReadRaw? Меня инетересует vt.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  OPCServ:= nil;
  ReadRawVal := CreateRemoteComObject(Edit1.Text, CLSIDServer) as IOPCHDA_SyncRead;
  Res := GetItemServerHandle(ReadRawVal, pszItemID, 1, iServerH);

  htStartTime.bString := false;
  // htStartTime.szTime := 'DAY -1D';
  htStartTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 1, 24, 00, 00, 00, 00));

  htEndTime.bString := false;
  // htEndTime.szTime := 'DAY';
  htEndTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 1, 25, 00, 00, 00, 00));

  arrServer[0] := iServerH;
  phServer := @arrServer;

  Res := ReadRawVal.ReadRaw(htStartTime, htEndTime, 24, false, 1, phServer, ppItemValues, ppErrors);
  
  ppItemValuesItem := ppItemValues^[0];    ----- после этого вываливается здесь типа access.......
  pvDataValues := ppItemValuesItem.pvDataValues;
  pftTimeStamps := ppItemValuesItem.pftTimeStamps;
  haAggregate := ppItemValuesItem.haAggregate;
  dwCount := ppItemValuesItem.dwCount;



Этот ОРС клиент я отлажывал с ОРС Сервером Логики, и у м еня все работало. А вот когда я попытался полуть данные с WinCC, то у меня тоже вылетало в АСМ на том самом месте. А вот почему так я не разобрался.

Как называется ваш ОРС сервер???
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631038
Вы можете OPCEnum файл скинуть мне на почту. Пожалуйста.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631048
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjfor_kavGrozaUmnikam aka tarasdj,

OPCServerList := TOPCServerList.Create(Edit1.Text, false, CATIDs);



Тут Edit1.Text это имя компьютера?

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  OPCServ:= nil;
  ReadRawVal := CreateRemoteComObject(Edit1.Text, CLSIDServer) as IOPCHDA_SyncRead;
  Res := GetItemServerHandle(ReadRawVal, pszItemID, 1, iServerH);

  htStartTime.bString := false;
  // htStartTime.szTime := 'DAY -1D';
  htStartTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 1, 24, 00, 00, 00, 00));

  htEndTime.bString := false;
  // htEndTime.szTime := 'DAY';
  htEndTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 1, 25, 00, 00, 00, 00));

  arrServer[0] := iServerH;
  phServer := @arrServer;

  Res := ReadRawVal.ReadRaw(htStartTime, htEndTime, 24, false, 1, phServer, ppItemValues, ppErrors);
  
  ppItemValuesItem := ppItemValues^[0];    ----- после этого вываливается здесь типа access.......
  pvDataValues := ppItemValuesItem.pvDataValues;
  pftTimeStamps := ppItemValuesItem.pftTimeStamps;
  haAggregate := ppItemValuesItem.haAggregate;
  dwCount := ppItemValuesItem.dwCount;



Этот ОРС клиент я отлажывал с ОРС Сервером Логики, и у м еня все работало. А вот когда я попытался полуть данные с WinCC, то у меня тоже вылетало в АСМ на том самом месте. А вот почему так я не разобрался.

Как называется ваш ОРС сервер???

InSAT.OPC.Teplocom_Hda
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631063
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjВы можете OPCEnum файл скинуть мне на почту. Пожалуйста.

http://opcdelphi.googlecode.com/files/delphiopcenum_2011-04-04.zip
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631080
ОРС сервера есть разных категорий. Есть OPC HDA.1, OPC HDA.2. Так вот они чемто различаються. И все что я могуВам подзказать это то что у Вас ОРС HDA.1 , а этот код работает, почему то только с OPC HDA.2. Почему так я не знаю. Проблема в том что функция GetItemServerHandle не может получить хэндл итема. ТОчно такая же ситуация у меня с WinCC. И до сих пор я не выяснил почему.
Сервер на котором я отлаживал прогу: Logika.HDA.2 - работает, а с PCS.OPCHDAServer.1 не работает. Разница в том что логиковский ОРС второй категории, а wincc - первой.
Вот и б тоже очень хотел выяснить в чем проблема, но не могу, нет возможности!!!!
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631122
А OPCServerList есть

Код: pascal
1.
OPCServerList: TOPCServerList;



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

Код: pascal
1.
OPCServerList: TOPCServerList;



????????????
OPCServerList: TOPCServerList;

да кстате может проще по агенту общаться?
или jabber? icq?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631189
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстате могу сказать что:
htStartTime.bString := false;
htStartTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 01, 25, 8, 0, 0, 0));
htEndTime.bString := false;
htEndTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 01, 25, 10, 0, 0, 0));

arrClient[0] := 1;
phClient := @arrClient;

Res := OPCServ.GetItemHandles(1, @pszItemID, phClient, pphServer, ppErrors);
Res := ReadRawVal.ReadRaw(htStartTime, htEndTime, 50, false, 1, pphServer, ppItemValues, ppErrors);

работает, т.к. наблюдаю в логе обмена данными ОРС сервера и прибора запросы идут и ответы есть но в какой-то момент времени выпадает в ret ASM........................................ печаль настала(((
такое ощущение что-то с типами данных.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631226
Я сейчас на работе. А там где я работаю нет ни айсикью не других торололо общалок.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631247
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
for_kavкстате могу сказать что:
htStartTime.bString := false;
htStartTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 01, 25, 8, 0, 0, 0));
htEndTime.bString := false;
htEndTime.ftTime := DateTimeToFileTime(EncodeDateTime(2012, 01, 25, 10, 0, 0, 0));

arrClient[0] := 1;
phClient := @arrClient;

Res := OPCServ.GetItemHandles(1, @pszItemID, phClient, pphServer, ppErrors);
Res := ReadRawVal.ReadRaw(htStartTime, htEndTime, 50, false, 1, pphServer, ppItemValues, ppErrors);

работает, т.к. наблюдаю в логе обмена данными ОРС сервера и прибора запросы идут и ответы есть но в какой-то момент времени выпадает в ret ASM........................................ печаль настала(((
такое ощущение что-то с типами данных.

к стате если запускать без дебаггера то данные считываются и выпадает ошибка: ---------------------------
Debugger Exception Notification
---------------------------
Project OPCHDAclient.exe raised exception class EVariantBadVarTypeError with message 'Invalid variant type'.
---------------------------
Break Continue Help
---------------------------
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631255
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdj,

есть какие-нибудь мысли по этому поводу?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631269
for_kav,

в трай я прописал

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
except
   on E : Exception do begin
   HDAServerIf := nil;
   ListBox1.Items.Add(timetostr(now)+' ErrorSpecification: '+E.ClassName);
   HDASyncRead._AddRef;
   Res := HDASyncRead._Release;
   HDASyncRead := nil;
   end;



И ексцепт дает ошибку по спецификации ClassName

Код: pascal
1.
EAccessViolation



Спомощю гугла установил что мол программа пытается получить доступ до области памяти которая не существует. А что конкретно пока не знаю!!! Тоже думаю что можна было бы попробовать)))
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631399
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjfor_kav,

в трай я прописал

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
except
   on E : Exception do begin
   HDAServerIf := nil;
   ListBox1.Items.Add(timetostr(now)+' ErrorSpecification: '+E.ClassName);
   HDASyncRead._AddRef;
   Res := HDASyncRead._Release;
   HDASyncRead := nil;
   end;



И ексцепт дает ошибку по спецификации ClassName

Код: pascal
1.
EAccessViolation



Спомощю гугла установил что мол программа пытается получить доступ до области памяти которая не существует. А что конкретно пока не знаю!!! Тоже думаю что можна было бы попробовать)))

методом научного тыка определил, что необходимо каждый раз запускать с новой датой (видно этот массив сервер хранит), тогда прога запускается и работает, дальше можно выбрать любой параметр и считать с него любый данные за любое время.
значит необходимо как то проверять переменные на тип.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631665
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjОРС сервера есть разных категорий. Есть OPC HDA.1, OPC HDA.2. Так вот они чемто различаються. И все что я могуВам подзказать это то что у Вас ОРС HDA.1 , а этот код работает, почему то только с OPC HDA.2. Почему так я не знаю. Проблема в том что функция GetItemServerHandle не может получить хэндл итема. ТОчно такая же ситуация у меня с WinCC. И до сих пор я не выяснил почему.
Сервер на котором я отлаживал прогу: Logika.HDA.2 - работает, а с PCS.OPCHDAServer.1 не работает. Разница в том что логиковский ОРС второй категории, а wincc - первой.
Вот и б тоже очень хотел выяснить в чем проблема, но не могу, нет возможности!!!!
тут с вами не соглашусь.
есть один стандарт на текущий момент это 1.2 и все его поддерживают, были ещё 1.0, 1.1,
делфийские библиотечки по моему на 1.2 основанны.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37631672
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да и по поводу переменной vt - я так понял что это максимальное количество запрашиваемых данных, можно поставить и 100000000000000 ))
а вот в цикле по выборке данных - да нужно вычислять количество пришедших строк.
так же выяснил что последней строкой приходит какой-то символ окончания, его нужно исключать из выборки.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37632178
for_kav,

Ну сейчас Ваш клиент работает нормально?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37632188
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну вот после недели мучений ОРС HDA клиент готов, пока реализована возможность считывания 1-Й переменной, но начинаю делать считывание нескольких переменных, ну и в последующем выгрузку данных в БД.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37632435
for_kav,

Ну я делал так:
Отображаю все теги в Тривейв. Сохраняю их в инифайле. При открытии программы загружаю с ини обратно в тривейв. Ну иканешно же автосчитывание.
Мой клиент выглядет вот так:

...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37632670
for_kavGrozaUmnikam aka tarasdj,

Спасибо тебе огромное товарищ!!!!!!
вот код поиска ОРС серверов на машинах:
Код: 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.
var
  i: integer;
  CATIDs: array of TGUID;
begin
  ListOPCServers.Clear;
  ServerNames := TStringList.Create;
  try
    //SetLength(CATIDs, 0);
    //OPCServerList := TOPCServerList.Create(Edit1.Text, true, CATIDs);
    SetLength(CATIDs, 1);
    CATIDs[0] := CATID_OPCHDAServer10;
    OPCServerList := TOPCServerList.Create(Edit1.Text, false, CATIDs);

    OPCServerList.Update;
    ServerNames.AddStrings(OPCServerList.Items);

    for i := 0 to ServerNames.count - 1 do
      begin
        ListOPCServers.Items.Add(ServerNames[i]);
      end;
  finally
    ServerNames.Free;
  end;
  ConnectOPCServer.SetFocus;
end;



вот как то так)
да и ещё приведу:
Код: pascal
1.
2.
3.
4.
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActiveX, ComObj, CheckLst,
  OPCHDA, OPCtypes, OPCCOMN, OPCenum, ExtCtrls;



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

OPCServerList - тут все сервера - переменная глобальная

потом
CLSIDServer := OPCServerList.CLSID[count];
count - выбранный сервер в listbox
CLSIDServer: TGUID;
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37633486
for_kav,

Приведите пожалуйста полный правильный код нажатия на кнопку. При котором будет определяться список ОРС серверов и помещаться в StringList. Если можно со всема переменными. Спасибо)))
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37633585
Фотография Feg16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите что вмешаюсь, а клиенты время от времени не отваливаются при длительной работе?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37633599
Feg16Простите что вмешаюсь, а клиенты время от времени не отваливаются при длительной работе?

Что Вы имеете ввиду "отваливаются" ?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37633650
Фотография Feg16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrozaUmnikam aka tarasdjЧто Вы имеете ввиду "отваливаются" ?Раньше, когда передача была через OPC клиент, который постоянно считывал данные, раз в пару дней - а иногда пару раз в сутки тупо отваливался и не мог больше законнектиться без перезагрузки сервера
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37633718
Feg16,

Вначале каждого считывания сервер загружается, а конце считывания тот сервер надо програмно выгружать.
Кароче в конце считывания надо делать вот так и тогда ничего не отвалится, бо и не будет чему отваливаться:

Код: pascal
1.
2.
3.
   HDASyncRead._AddRef;
   Res := HDASyncRead._Release;
   HDASyncRead := nil;
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37633762
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjfor_kav,

Приведите пожалуйста полный правильный код нажатия на кнопку. При котором будет определяться список ОРС серверов и помещаться в StringList. Если можно со всема переменными. Спасибо)))
сейчас дома уже. завтре на работу моё тело приползёт, утром глаз откроется и начеркаю что и как.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37633786
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjfor_kav,

Приведите пожалуйста полный правильный код нажатия на кнопку. При котором будет определяться список ОРС серверов и помещаться в StringList. Если можно со всема переменными. Спасибо)))

поиск ОРС серверов на машинах, так же требует правильно настроенного DCOM)) та ещё собака. за несколько лет работы столкнулся с тем, что находились такие сервера которые отказывались по сети передавать данные.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37634333
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjfor_kav,

Приведите пожалуйста полный правильный код нажатия на кнопку. При котором будет определяться список ОРС серверов и помещаться в StringList. Если можно со всема переменными. Спасибо)))

1 - посмотри файлик OPCHDA, там должна быть такая структура:
начало файла:
// *********************************************************************//
// GUIDS declared in the TypeLibrary //
// *********************************************************************//
const
LIBID_OPCHDA: TGUID = '{1F1217BA-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_Server: TGUID = '{1F1217B0-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_Browser: TGUID = '{1F1217B1-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_SyncRead: TGUID = '{1F1217B2-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_SyncUpdate: TGUID = '{1F1217B3-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_SyncAnnotations: TGUID = '{1F1217B4-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_AsyncRead: TGUID = '{1F1217B5-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_AsyncUpdate: TGUID = '{1F1217B6-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_AsyncAnnotations: TGUID =
'{1F1217B7-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_Playback: TGUID = '{1F1217B8-DEE0-11D2-A5E5-000086339399}';
IID_IOPCHDA_DataCallback: TGUID = '{1F1217B9-DEE0-11D2-A5E5-000086339399}';

CATID_OPCHDAServer10: TGUID = '{7DE5B060-E089-11d2-A5E6-000086339399}'; ---- вот эта строка должна присутствовать

// *********************************************************************//
// Declaration of Enumerations defined in Type Library //
// *********************************************************************//
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37634340
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
процедура поиска:

procedure TForm1.EnumOPCServerClick(Sender: TObject);
var
i: integer;
begin
ListOPCServers.Clear;
ServerNames := TStringList.Create;
try
SetLength(CATIDs, 1);
CATIDs[0] := CATID_OPCHDAServer10;
OPCServerList := TOPCServerList.Create(Edit1.Text, false, CATIDs);

OPCServerList.Update;
ServerNames.AddStrings(OPCServerList.Items);

for i := 0 to ServerNames.count - 1 do
begin
ListOPCServers.Items.Add(ServerNames[i]);
end;
if ServerNames.count = 0 then
Log('Сервера необнаружены!')
else
Log('Сервера обнаружены!')
finally
ServerNames.Free;
end;
ConnectOPCServer.SetFocus; ---- это можешь убрать , это просто фокус на другую кнопочку
end;
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37634600
for_kav,

ListOPCServers - что за переменная? TStrings?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37634626
Все получилось!!!! Спасибо))
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37634701
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjВсе получилось!!!! Спасибо))
ну вот и я рад)
http://www.sql.ru/forum/images/happy.gif
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37634703
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdj,

чтение всех переменных сделал в цикле?
просто из списка?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37635418
for_kavGrozaUmnikam aka tarasdjОРС сервера есть разных категорий. Есть OPC HDA.1, OPC HDA.2. Так вот они чемто различаються. И все что я могуВам подзказать это то что у Вас ОРС HDA.1 , а этот код работает, почему то только с OPC HDA.2. Почему так я не знаю. Проблема в том что функция GetItemServerHandle не может получить хэндл итема. ТОчно такая же ситуация у меня с WinCC. И до сих пор я не выяснил почему.
Сервер на котором я отлаживал прогу: Logika.HDA.2 - работает, а с PCS.OPCHDAServer.1 не работает. Разница в том что логиковский ОРС второй категории, а wincc - первой.
Вот и б тоже очень хотел выяснить в чем проблема, но не могу, нет возможности!!!!
тут с вами не соглашусь.
есть один стандарт на текущий момент это 1.2 и все его поддерживают, были ещё 1.0, 1.1,
делфийские библиотечки по моему на 1.2 основанны.

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

не могу сказать со 100% уверенностью, что работать не будет, но возможно нужно проверять данные на принадлежность к типам стандарта ОРС.
а в стандарте 1.2 есть пункт Revision 1.2 Highlights, там есть изменения некоторые.
а вообще можете написать что за ошибку выдаёт ОРС сервер WinCC?
на какой функции затыкается в дебагере?
как точно называется ОРС сервер? и если можно его GUID.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37635583
for_kav,
Вылетает на эту строку.

Код: pascal
1.
ppItemValuesItem:=ppItemValues^[0];



ОРС : PCS7.OPCHDAServer.1

А GUID смотреть в реестре?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37635625
Походу нашел:

GUID (PCS7.OPCHDAServer.1) - {CB05BEA1-AB41-4eb3-BCC7-615337880D27}
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37635659
for_kavGrozaUmnikam aka tarasdj,
а в стандарте 1.2 есть пункт Revision 1.2 Highlights, там есть изменения некоторые.


Какие изменения? Можете показать?
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37635681
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjfor_kav,
Вылетает на эту строку.

Код: pascal
1.
ppItemValuesItem:=ppItemValues^[0];



ОРС : PCS7.OPCHDAServer.1

А GUID смотреть в реестре?
из-за того что значение ppItemValues = nil
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #37637211
for_kav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrozaUmnikam aka tarasdjfor_kavGrozaUmnikam aka tarasdj,
а в стандарте 1.2 есть пункт Revision 1.2 Highlights, там есть изменения некоторые.


Какие изменения? Можете показать?
ну тут я думаю не стоит выкладывать, проще скачать документацию по версии ОРС HDA 1.2
хотя бы с сайта graybox, у той которая библиотечка есть бесплатная, с ней же и дёт и описалово.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как работать с IOPCHDA_Server из проекта opcdelphi
    #39514023
voron12005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В случае с OPC HDA необходимо чистить память по завершению, иначе будет утечка.
...
Рейтинг: 0 / 0
Как работать с IOPCHDA_Server из проекта opcdelphi
    #39514028
voron12005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еле нашел, пусть будет здесь на форуме. Утечка памяти при запросе OPC HDA в цикле.
Если есть текстовые теги то память нужно чистить дополнительно функцией VariantClear
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
for j:= 0 to iCount-1 do
    begin
        dwiCount:=aItemValues^[j].dwCount;
        for I := 0 to dwiCount - 1 do
          begin
            VariantClear(POleVariantArray(aItemValues^[j].pvDataValues)[i]);
            SysFreeString(StringToOleStr(VarToStr(word(PDWORDARRAY(aItemValues^[j].pdwQualities)[i]))));
          end;

      CoTaskMemFree(aItemValues[j].pdwQualities);
      CoTaskMemFree(aItemValues[j].pftTimeStamps);
      CoTaskMemFree(aItemValues[j].pvDataValues);
    end;
  CoTaskMemFree(aItemValues);

  CoTaskMemFree(pphServer);
  CoTaskMemFree(ppErrors);
...
Рейтинг: 0 / 0
79 сообщений из 79, показаны все 4 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работать с IOPCHDA_Server из проекта opcdelphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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