powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работать с IOPCHDA_Server из проекта opcdelphi
25 сообщений из 79, страница 2 из 4
Как работать с 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
25 сообщений из 79, страница 2 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как работать с IOPCHDA_Server из проекта opcdelphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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