не... сама делфя работает. и проект (екзешник) на ХРюше работает без проблем. но в семерке не читает никаких переменных, хотя записывать- записывает.... думаю или dOPCServer,или Gateway глючит.....
Вид для печати
не... сама делфя работает. и проект (екзешник) на ХРюше работает без проблем. но в семерке не читает никаких переменных, хотя записывать- записывает.... думаю или dOPCServer,или Gateway глючит.....
поставь совместимость - Xp сервис пак 3. все заработает!
ничего пока не помогает..... не происходит чтение ни по 232, ни по Ethernet :(
Я на двух компах Win7 64 + DOPC Тыкал на иконку Delphi7 правой кнопкой мыши-свойства - совместимость.... Для EXEшника проэкта тоже.
можно немного подробнее по этому примеру?
1) V := CreateOleObject('OPC.Automation'); - что это за обьект, откуда он берется???
2) V.Connect('CoDeSys.OPC.02'); - откуда это имя, где его определять?
3) Этот пример требует работающего на ПК OPC-сервера или общается с контроллером вместо него?
4) какое отношение к обмену имеет CodeSys? Она так же должна быть установлена и запущена на этом ПК??
Простите за ламерские вопросы, они возникают из-за нехватки теории. Обещаю разобравшись выложить подробное описание с примером для остальных
1. Вы в коде создаете OLE объект, используя системную библиотеку Windows "OPCDAAuto". В свою очередь "OLE" или Object Linking and Embedding представляет собой способ обмена информацией между приложениями.
2. 'CoDeSys.OPC.02' - название OPC-сервера, устанавливаемого вместе с CoDeSys. "OPC" - это аббревиатура от OLE for Process Control, или OLE для Управления Процессами.
3. OPC-сервер нужен. В данном случае это - 'CoDeSys.OPC.02'.
4. CoDeSys в данном случае нужен, чтобы через него сконфигурировать и загрузить проект (даже с кодом ";") в ПЛК. Когда проект создан, то для того, чтобы перенести его на ПК клиента, CodeSys уже не нужен. Достаточно будет установить только OPC-сервер от него.
Вкратце так. Извините за сумбурность и запоздалость - загрузили выше крыши...
P.S. Немного поподробнее, пока время есть. OPC технология предусматривает обмен данными между двумя своими составными частями: ОРС-клиентом и ОРС-сервером для последующей передачи на исполнительный механизм. Т.е. для данного случая мы имеем следующую цепочку передачи данных: Скада (Delphi) <-> OPC-клиент(в данном случае созданный с помощью библиотеки Windows) <-> OPC-сервер (в данном случае CoDeSys OPC-сервер)<->Порт PC (COM1)<-> кабель (КС1 из комплекта ПЛК "ОВЕН")<-> Порт PLC (для ПЛК 110-60 Debug RS-232)<-> программа в ПЛК.
Поэтому:
1. V := CreateOleObject('OPC.Automation'); - так мы создаем ОРС-клиента.
2. V.Connect('CoDeSys.OPC.02'); - так мы соединяем его (ОРС-клиента) с ОРС-сервером, который у нас установлен (не обязательно CoDeSys, но как составная часть обмена данными он все равно нужен);
3. Этот пример требует работающего на ПК OPC-сервера или общается с контроллером вместо него? - Для ОРС-технологии ОРС-Сервер необходим (см. выше).
4. Какое отношение к обмену имеет CodeSys? - В CoDeSys при создании проекта вы конфигурируете свои переменные (данные), т.е. указываете те из них, которые будут участвовать в обмене со Скада-системой и предоставляете OPC-серверу право их передавать (принимать). Непосредственно в самом обмене данными из всего комплекса CoDeSys, устанавливаемого по-умолчанию на ваш ПК, работает только CoDeSys OPC-сервер (тот самый, который мы подключали -'CoDeSys.OPC.02'). Поэтому при переносе программы на ПК заказчика, можно при установке убрать все галочки кроме серверов. Тогда CoDeSys там не будет, а, благодаря установленному OPC-серверу сконфигурированная ДЛЯ НЕГО программа спокойно будет передавать УКАЗАННЫЕ ВАМИ В КОНФИГУРАТОРЕ переменные для СОЗДАННОГО (ПОДКЛЮЧЕННОГО) ВАМИ ОРС-клиента.
Примерно так, надеюсь ничего не перепутал. В двух словах вряд ли получится все описать, но если заниматься ОРС - то скоро такие проблемы будете как орешки щелкать. Удачи!
Небольшой пример тут http://www.opcfoundation.org/forum/v...6f12f2bec6e8b2
Там же на сайте и информация про ОРС-технологии.
спасибо за подробное описание.
Меня больше интересует откуда Вы узнали, что имя сервера 'CoDeSys.OPC.02', что нужно создать группу и для этого есть команда V.OPCGroups.Add('Group1'), потом в нее нужно внести переменные командой v.OPCGroups.GetOPCGroup('Group1').OPCItems.AddItem ('PLC1:.out1', 1) и т.д., какие есть еще команды и где об этом почитать? В данной вами ссылке подобной информации я не нашел. Может есть где-то вразумительное описание команд общения с OPC-сервером?
"откуда Вы узнали, что имя сервера 'CoDeSys.OPC.02'"
у меня (просто как вариант) установлен dOPC от Kassl (он бесплатен, на этой ветке есть ссылка). После установки запускаете dOPC Explorer, добавляете (правой клавишей OPC-Server) и у Вас целый спмсок всех установленных ОРС-серверов на Вашем ПК (названия, которые Вы будете использовать, к примеру - 'CoDeSys.OPC.02')
"нужно создать группу и для этого есть команда V.OPCGroups.Add('Group1'), потом в нее нужно внести переменные ..."
Технология OPC подразумевает определенную иерархию: Group-Item (что то типа "город-улица"). Т.е. сначала создаем (добавляем) группу, потом ее подключаем, затем добавляем Item. Причем команды при использовании различных OPC-клиентов тоже отличаются. Структура - остается та же :Group-Item, а команды разные. dOPC здесь на ветке более-менее описан, а вот другие варианты - не очень. Я просто привел пример, в ответ на вопрос, что еще можно использовать вместо Kasslовского dOPCа, но сам, к сожалению, именно такой возможностью для скада на Delphi не пользовался, поэтому, кроме данного примера и ссылки, более подробной документации не имею. Так что, придется Вам все-таки поискать самому, тем более, что данный вариант - бесплатен, в то время, как остальные OPC-разработки либо платные, либо с какими то ограничениями или сообщениями (как Kassl). Вероятно, поэтому и так мало документации - конкуренция. Сожалею, что не смогу помочь. Поищите примеры, не может быть, что бы в инете ничего по этому поводу не было. Удачи!
нарыл описание, правда применительно к Perl, но это лучше чем ничего
http://kobesearch.cpan.org/htdocs/Wi...LE/OPC.pm.html
Выкладываю пример взаимодействия между Delphi-приложением и ОВЕН ПЛК 100 подключенными по Ethernet через OPC-сервер (CodeSys) с подробным описанием (с картинками) Жаль только, что без OPC пока осилить неполучилось... Отдельное спасибо AWA1971 за помощь
http://www.owen.ru/forum/attachment....6&d=1274872013
Интересно, а можно чтобы мастерскада и мое приложение на делфе забирали данные с одного и того же opc codesys. сейчас к сожалению поэкспериментировать не имею возможности.
Проблема такая:
Нужно в программе реализовать возможность изменения порта связи с устройством (устр-во на данный момент - МВ110-8ас). в самом компоненте dOPC - конечно можно изменить, но в программе не получается.
Н-р - на моем компе есть COM порт - и звётся он "1", а вот на нетбуке нет его - и поэтому пользуюсь конвертором на USB. и порт в итоге получается не "1" - а 6, или 9 или еще че-нить. Так вот нужно реализовать выбор в программе. Пробовал присваивать через ItemID:= COM8/.... не получается...
а как есчё - не знаю....
Это, конечно можно как вариант рассматривать - но необхордимо реализовать выбор порта в самой проге.Цитата:
В компе в настройке виртуального СОМ(USB) поменяй его номер, я менял на своем нетбуке win XP и на INTEL i5 win7 64 bit
В дельфи даю такую команду на запись значения.
OPC.OPCGroups.GetOPCGroup('Group1').OPCItems.Item( 'PLC1:.Out1').Write(1);
Вылетает с такой ошибкой:
<a target="_blank" href="http://www.radikal.ru"><img src="http://s61.radikal.ru/i174/1009/ba/cb72e3673a1b.jpg" ></a>
Что делать?
Может быть все же "Write(True);". вместо "Write(1);". Проверьте соответствие типа переменной в Delphi и CoDeSys (Boolean и Bool, к примеру). Так же попробуйте разделить команду на части - у Вас сейчас и создание/добавление новой группы и команда на изменение значения Item в одной строке. Здесь, на ветке есть рабочие примеры - посмотрите.
Ну и все-таки выложите весь проект, может быстрее все выяснится.
OPC.OPCGroups.GetOPCGroup('Group1').OPCItems.Item( 'PLC1:.Out1').Write(True);
Не работает всё равно. Вылетает с ошибкой.
Попробовал как вы советовали:
Item1:= OPC.OPCGroups.GetOPCGroup('Group1').OPCItems.AddIt em ('PLC1:.OUT2', 1);
Item1.Write(True);
Всё заработало!
Огромное спасибо за помощь.
Может есть ещё небольшой хелпик по остальным командам ОРС?
рад за вас. на счет "хелпика" - нет, к сожалению. все "методом тыка": пошло/не пошло. сами понимаете: иногда точка критичную роль играет. попробуйте, все должно получиться, тем более первый шаг вы уже сделали. если что - пишите. чем можем..., как говориться. удачи!
сразу возник ещё один вопросик.
как можно просмотреть список доступных переменных на сервере орс, програмным путём из дельфи?
Доступность переменных на OPC-сервере Вы сами определяете при конфигурировании. Соответственно их наименованию (которые вы самостоятельно им дадите) и обращайтесь к ним из Делфи. К примеру: 'PLC1:.Out1' или 'PLC2:.Vhod8' - как Вам угодно. Они по-определению доступны, т.к. Вы сами предоставили им эту "доступность". Так что список переменных Вы "составляете" сами в конфигураторе ПЛК CoDeSys.
Соответственно, определение именно программным путем этих переменных просто теряет всякий смысл. Но, если хотите просто посмотреть, как для Delphi будут выглядеть данные Вами названия - воспользуйтесь (к примеру) эксплорером от Кассл, который устанавливается вместе с OPC-Сервером (Кассловским, разумеется). Он бесплатен и на этой ветке есть ссылки на него и описание процеса работы. Там добавите свой сервер (CoDeSys-овский - 'CoDeSys.OPC.02'), затем свою группу и у вас появится перечень всех Ваших доступных для Delphi переменных, входящих в нее.
P.S. Посетите, кстати, сайт http://www.opcfoundation.org/Search.aspx . Возможно, в чем то он Вам поможет. Наберите в Search "Delphi" и получите по крайней мере 60 веток с исходниками, обсуждением возникающих проблем и т.д. К примеру: http://www.opcfoundation.org/forum/viewtopic.php?t=2042. Удачи!
Добрый день!
У меня при выполнениии V := CreateOleObject('OPC.Automation');
выплёвывается ошибка "Не верная попытка доступа к адресу памяти".
у меня XP SP2 , OPCDAAutu.dll взят из 'OPC-Client.rar' у AWA1971 и весит он 228 К, а у меня есть эта dll от MatrikonOPC весом в 136.
Кто-нибуть подскажите пожалуста, в чем может быть причина отказа в регистрации обьекта.
Сервис-пак2, возможно, что то не понимает. Попробуйте реализовать создание библиотеки в своей операционке самостоятельно. Выглядит это так:
Пуск –> Выполнить -> tlibimp.exe -P+ OPCDAAUTO.dll -> ОК. В Documents end Setting ищем получившиеся файлы: OPCAutomation_TLB.pas и OPCAutomation_TLB.dcr. Копируем их в папку проекта. Добавляем в раздел USES модуль OPCAutomation_TLB.
Надеюсь, что поможет.
Спасибо за ответ.
tlibimp.exe - это первое, что я попробовал зделать. Сегодня повторил ещё раз для верности. Эффект нулевой. Попробовал запустить задачку на чистом компе с Sp3 - ответ тотже : "Не верная попытка доступа к адресу памяти".
небольшую скаду можно делать на конструкторе программ Хиасм http://hiasm.com/. Он бесплатен. В основе тот же делфи.
Единственное он не работает с OPC, но я использую DDE. соединяю с CoDeSys Gateway DDE Server или Lectus server.
http://i050.radikal.ru/1012/c0/d91e0b5a8412.bmp
http://i039.radikal.ru/1012/a1/53b9ba9c87f2.bmp
Цены, кстати, тоже совсем другие. А по поводу скад хочу заметить, что прикрутить к ним пользовательскую базу данных ох как непросто. Стандартно можно только архивировать значения параметров в базе данных. Скада хороша для быстрого построения операторского интерфейса, не более того, что-бы там не говорили.:(
Приветствую!
Пишу свою мини скаду на делфи+dopc, имеется один (пока) ПЛК150. Возникла проблема, не срабатывает событие onDatachange (ни у dOPCServer, ни у OPCGroups) при подключении к CoDeSys.OPC.02, при выборе другого ОРС сервера событие вызывается. Значения входов меняются. В чем может быть проблема?
Как контролировать в делфи физическое отключение контроллера, в OPC кодесиса при этом сохраняются последние нормальные значения? может через свойство quality переменной или како-то иначе?
Не подскажите на чем в delphi тренды рисуете?
Руками по канве image
А компонентом не поделитесЬ?:) С настройкой осей, прокруткой.хотя бы прокруткой:)
прокрутки как таковой нет, есть просто по нажатию на кнопку например (+ 1 час) к выборке из базы занчений прибавляется один час:
DateTimeBeg:=incHour(DateTimeNOW,1);
DateTimeEnd:=incHour(DateTimeNOW,-10);
далее выборка между этими данными.
а после масштабирование и отрисовка непосредственно под размер своего image
Начал изучать DELPHI 7 с целью исспользования вместо SCADA систем, там где они дороги и излишни.
Не мог бы ктото выложить, или ткнуть носом, где можно взять библиотеки или компоненты, или как там они называются, для ModBus TCP.
Может есть примеры как их подключить или исспользовать.
Буду рад любой помощи.:)
Спасибо!!!
читайте ветку - тут как раз все есть и примеры и компоненты