Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Архив
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

опять OPC...

 Ответить Ответить Страница  <123>
Автор
Сообщение
Veron Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Октябрь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 10
Свойства публикации Свойства публикации   Ответить, цитируя автора - Veron Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: опять OPC...
    Опубликовано: 13 Январь 2005 00:41

Спасибо, гляну!

А то хочется пробануть какой-нить "полуфабрикат", надоело с исходниками работать

 

русский Иван
Наверх
AndreyVN Смотреть выпадающим
Участник
Участник


Присоединился: 17 Май 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 52
Свойства публикации Свойства публикации   Ответить, цитируя автора - AndreyVN Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 01 Февраль 2005 17:43

Привет, всем!

Я OPC клиента на BCB6 пишу, тоже скачал пример, у меня такая беда.

Беда. Подключаюсь к серверу, создаю группу, делаю ptrItMgm->AddItems(1,&itemdef,&pItemState,&phResult)

все хорошо и Read() работает и OnDataChange вызывается. Но как только пытаюсь засунуть в группу еще один Item - вижу только один - послендний.

Я так догадываюсь, что либо группу создаю некорректно, либо читаю криво. Если Item'ов много на что должен itemdef указывать?

Пробовал вот так:

OPCITEMDEF itemdef[2]

устанавливаем все параметры

 itemdef[0].szItemID=...

 itemdef[1].szItemID=...

ptrItMgm->AddItems(2,&itemdef[0],&pItemState,&phResult)

Как в дельфях это дело выглядит?

Наверх
kill Смотреть выпадающим
Новичок
Новичок


Присоединился: 22 Ноябрь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 36
Свойства публикации Свойства публикации   Ответить, цитируя автора - kill Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 02 Февраль 2005 08:20
Простите за непонимание, кто такой ВСВ6, какой пример скачали?
просто Шурик
Наверх
AndreyVN Смотреть выпадающим
Участник
Участник


Присоединился: 17 Май 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 52
Свойства публикации Свойства публикации   Ответить, цитируя автора - AndreyVN Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 02 Февраль 2005 08:30

BCB6:   Borland C++ Builder 6.0

Пример скачал с bdn.borland.com, автор исходника, кажется, Ionel Ioz.

Наверх
kill Смотреть выпадающим
Новичок
Новичок


Присоединился: 22 Ноябрь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 36
Свойства публикации Свойства публикации   Ответить, цитируя автора - kill Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 02 Февраль 2005 09:16

Sorry, я пока клиентов не писал. Если проблему решишь, отпиши. Будет полезно.

Удачи!

просто Шурик
Наверх
AndreyVN Смотреть выпадающим
Участник
Участник


Присоединился: 17 Май 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 52
Свойства публикации Свойства публикации   Ответить, цитируя автора - AndreyVN Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 02 Февраль 2005 16:43

Народ! Кто знает, при определении нескольких Item'ов я должен вызывать функцию CreateEnumerator?

Я ее вызываю, вижу что создана группа из 2-х Item'ов, у ни разные hClient, А читается 

m_ptrSyncIO->Read(OPC_DS_DEVICE, 2, &m_hItem, &pItemState, &phResult))

 все равно - только один Item, на второй говорит OPC_E_INVALIDHANDLE.    Что это может быть???

 

Наверх
Veron Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Октябрь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 10
Свойства публикации Свойства публикации   Ответить, цитируя автора - Veron Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Февраль 2005 01:00

2 AndreyVN

 

Я использовал следующий подход для клиента (в Delphi):
1. Создал структуру для хранения информации сервера -
   TMyOPCServer = record
     ServerProgID : string
     ServerIf : IOPCServer;
     GroupIf : IOPCItemMgt;
     GroupHandle : OPCHandle;
     AsyncConnection : LongInt;
     OPCDataCallBack : TOPCDataCallBack;
     OPCItemRecs : POPCItemRecs;
     ...
   end;

OPCItemRecs - указатель на массив записей, каждая запись соответствует одному тэгу (поля ItemID, TagName, TagType, Value, Quality...).

2. Поскольку таких серверов может быть несколько, то я создал массив таких структур (указателем на такой динамический массив является переменная ServerEls, используемая ниже).

3. Добавляю группу
ServerAddGroup(ServerEls^[index].ServerIf, "Просто_группа", True, 500, 0, ServerEls^[index].GroupIf, ServerEls^[index].GroupHandle); 

// Данная функция описана в модуле OPCUtils.pas и имеет следующую конструкцию:
// function ServerAddGroup(ServerIf: IOPCServer; Name: string; Active: BOOL;
//          UpdateRate: DWORD; ClientHandle: OPCHANDLE; var GroupIf: IOPCItemMgt;
//          var ServerHandle: OPCHANDLE): HResult;

4. Опустив различные проверки возвращенных HResult'ов, можно добавить в группу итемы:
  for i:=0 to Length(ServerEls^[index].OPCItemRecs^)-1 do
  begin
    HR := GroupAddItem(ServerEls^[index].GroupIf, ServerEls^[index].OPCItemRecs^.TagName,                                     ServerEls^[index].OPCItemRecs^.ItemID, VT_EMPTY , IH,
                                                ServerEls^[index].OPCItemRecs^.ItemType);
где IH - просто переменная типа Cardinal

Вроде бы все...
Да, кстати, дельфийские модули (OPCDA.pas, OPCUtil.pas, OPCtypes.pas) - взяты с OPCFoundation.org
Для "подписки" на изменяющиеся тэги (Advise) я использовал класс TOPCDataCallback из примера OPCquick (вроде бы тоже с OPCFoundation). Там надо только подредактировать под себя метод TOPCDataCallback.OnDataChange
Примерно так, удачи!


 

русский Иван
Наверх
Veron Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Октябрь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 10
Свойства публикации Свойства публикации   Ответить, цитируя автора - Veron Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Февраль 2005 01:03

Встречный вопрос.

Кто использовал ItemBrowser?? Надо получить дерево тэгов сервака, а че-то с этими интерфейсами разобраться не могу....

Прошу подсказать механизьм

Если на дельфях - так ваще круть!

Заранее благодарен

русский Иван
Наверх
uzga Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 07 Октябрь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 359
Свойства публикации Свойства публикации   Ответить, цитируя автора - uzga Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Февраль 2005 11:00

Если интересует клиентская компонента DOPC для работы с ОРС серверами, то могу выслать (для 5 и 6 Delphi). Проявила себя как очень надежная при работе каждый день в течении года.

Наверх
kill Смотреть выпадающим
Новичок
Новичок


Присоединился: 22 Ноябрь 2004
Категория: Russian Federation
Online Status: Offline
Публикации: 36
Свойства публикации Свойства публикации   Ответить, цитируя автора - kill Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Февраль 2005 12:50

Veron

http://delphi.chertenok.ru/forum/viewtopic.php?t=1492

и спасибо Shulgin'у

Я на prOPC реализовал сервер, но там куча примеров, наверно и то, что тебе нужно, есть.

просто Шурик
Наверх
 Ответить Ответить Страница  <123>

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz