Не понял,вопроса. Стоимость владение кем и чего?
Вид для печати
Давай те начнем с того, что Borland уже давным давно не разрабатывает Delphi. Этим занимается компания Embarcadero (ранее известная как отдел Borland CodeGear). Второе, это то что Делфи под другие ОСь не выпускаются уже с 2001 года. Хотя вот уже второй год есть так называемый проект Prism, он же Delphi для .net в среде Visual Studio. С одной лишь разницей, что программы можно писать кросс платформенные, заменив всеми любимый .net на библиотеку Mono. Ну и на последок так называемый Lazarus который есть абсолютно под любую ось, даже под ARM, такие как WinCE. А компиляция кросс платформенных приложений в Lazarus просто сказка, в настройках проекта выставляем целевые платформы. Жмем кнопочку "Скомпилировать" и все. Ваш проект готов, под те платформы, которые вы выбрали. А теперь давайте это сравним с вашим глючным продуктом от Adobe. Начнем хотя бы с того, что он является глючным до ужаса. Не смотря на такое количество различных реализаций как Flex и AIR, флэш как терял популярность, так и теряет. Люди все больше вместо флэш начинают использовать современные JavaScript фреймворки. Конечно, спад популярности связан все таки не с тем, что флэш унылое творенье. А с тем, что есть куча других способов реализации. Тот же Silverlight, который сейчас является кросс платформенным. Даже на мобильниках под Windows Mobile и Symbian есть Silverlight. А говорить о Linux и MacOS не приходится. Там хоть и нет его, но есть его реализация Monolight (точно не помню название). Ну а о том, что под Silverlight можно писать все на том же Delphi Prism уже может ответить на все ваши вопросы.
Еще есть вопросы по поводу Delphi?
P.S.: Wine под Linux еще никто не отменял.
думаю эта тема без конца.....
с каждым годом выходит множество способов реализации. с каждым годом каждый разработчик (вменяемый, имею ввиду :) ) совершенствует свое мастерсво используя разные методы, ведь цель у всех - это сделать современный проект.
так что каждый тянет в совй огород. хорошо бы только чтобы все делились своим огромным опытом.
и кстати тема все равно открыта -
можно ли не использовать Opc сервер от кодесиса, и иметь подобный доступ к плк из делфи???
а примерчик мона?:oЦитата:
общаюсь с ПЛК посредством сокетов
Тоже пришел к выводу, что использование scada не всегда подходит к конкретной задаче.
Иногда, проще написать собственную программу. Особенно, если ОС-Linux, qnx, lynxos, VxWorks.
Тогда либо lab_view для linux либо под scada под wine, самый дешевый вариант qt_designer (free gpl типа borland builder) + gcc(gpl) + linux .
Соотв за счет free средств разработки получаем удешевление изделия.
Споры по поводу того, что надежней, дешевле, практичней SCADA или Delphi...! Если занимаетесь небольшими проектами, то лучше Delphi найти что-либо сложно... Потому как время разработки очень невилико... Сам писал два маленьких проекта на делфи, в том числе для опроса OWEN PLC110, управился за 8-12 дней с базой данных, графиками и отчетами. Больше всего времени заняли поиски компонентов под графики, стандартный график не нравился. Опрос... тупо встроил в приложение Modbus-TCP и не имел проблем.
А скада... Она то конечно хорошая вещь...
Ну допустим, имеем кол-во необходимых переменных 430, купили лицензию допустим InTouch на 500 тегов... , а заказчик посмотрел и решил к этой системе подключить еще что-нибудь переменных этак еще на 100... И что делать? Покупать лицензию на 1000, а на 500 положить в ящик? А на делфи нам без разницы скоко переменных... И ведь так не только InTouch, если мне не изменяет память то только в WinCC можно докупить переменных...
Ну и еще одно... в лицензиях пока разберешься можно дуба дать... имели "приятный" опыт с TraceMode :(
А еще скады глючат! Тот же InTouch. WinCC на слабый комп не поставишь... Удобство в скадах это все отностельно...
Народ, обращаюсь к тем кто пишет на Delphi. Посоветуйте пожалуйста компоненты, обучающие статьи или ресурсы для написания Scada. (DOPC, IOCOMP знаю, сам использую). Кстати есть в природе лекарство для DOPC 3.7? У меня только к 3.0 для Delphi7.
Самое главное преимущество Delphi это то, что я делаю что хочу и как хочу и единственное ограничение - это знание Delphi и желание разбираться.
> я делаю что хочу и как хочу
вот в этом то и беда.
Почему беда? Просто снимаются ограничения, накладываемые возможностями Scada системы
Есть возможность работать с OPC , используя библиотеки: OPCDAAuto.dll, opccomn_ps.dll или opcproxy.dll (ждут своего часа в C:\WINDOWS\system32). Например, с OPCDAAuto.dll это выглядит примерно так:
Пуск –> Выполнить -> tlibimp.exe -P+ OPCDAAUTO.dll -> ОК. В Documents end Setting ищем получившиеся файлы: OPCAutomation_TLB.pas и OPCAutomation_TLB.dcr. Копируем их в папку проекта. Добавляем в раздел USES модуль OPCAutomation_TLB. Библиотека готова к работе.
var
NewServer:OPCServer;
procedure TForm1.Button1Click(Sender: TObject); //подключаем сервер
begin
NewServer:=CoOPCServer.Create;
NewServer.Connect('CoDeSys.OPC.02',NewServer.Serve rNode);
еnd;
procedure TForm1.Button2Click(Sender: TObject); //отключаем сервер
begin
NewServer.Disconnect;
end;
Добавление Group, Item, работа с ними и прочая документация в свободном доступе: OPC Data Access Automation Interface Standard, OPC Data Acccess Custom Interface, OPC Common Interface. Раньше была на http://www.opcfoundation.org. Будет время – напишу пример. Если кто раньше разберется – киньте сюда проект (с пояснениями). Удачи!
Если указанных выше библиотек не окажется, то просто копируйте их из этого архива в system32. Ну а дальше - знаете. Кстати, может кто-нибудь работал с OPC в Lasarus. По сути - то же Delphi, только бесплатное. Вот только с документацией там туговато. Если кто то цеплялся к PLC из него - направьте в нужном направлении. Да и пример небольшой был бы совсем не лишним.
спасибо Awa1971 попробую
"будет время – напишу пример"
да не мешало бы. спасибо за помощь
Написано для PLCWinNT (реального ПЛС под рукой не было). Но принцип, думаю будет понятен. Смотрите описание в папке - вроде ничего не забыл.
P.S. Переменные могут обозначаться по другому: «PLC1:.INP1», «PLC1:.PLC_PRG.INP1» или «.PLC_PRG.INP1» – думаю, разберетесь. Удачи
Этот вариант OPC-клиента подходит и для Delphi и для Lasarus. Для него не надо копировать ***_TLB в каталог с проектом. Все, что надо, подключается в коде.
есть довольно дешевый российский Opc-продукт. месяц пользуете бесплатно, потом покупаете у автора за 50 американских денег. в архиве присутствует описание и пример использования.
И еще...Господа дельфийцы! Тут не раз уже упоминались собственные протоколы, ModBus, сокеты и т.д. Но только упоминались. До описания и примеров дело почему то не доходит. Россия большая да и не все форумчане в России живут. Ну не конкуренты мы друг другу. Никак под это определение не подходим. Одна ветка на всем форуме, а мы сами себе помочь не можем... И чего ради? Чтобы в собственных возникающих проблемах самим копаться? А если для другого это давно уже не проблема? Что от него, убудет что ли, если поделится? Уверен, что нет. Так что предлагаю подавить жабу, которая нас всех душит и поделиться с остальными. Лог-файлы, собственные компоненты, создание и подключение к БД - все, что, возможно для вас уже далеко не открытие Америки, другим пока - китайская грамота. Делитесь, господа, делитесь. Вам же тоже когда то помогали...
procedure TForm1.Button6Click(Sender: TObject);
var
Item1,Item2:Variant;
Val1,Val2:boolean;
begin
NewServer:=CoOPCServer.Create;
NewServer.Connect('dOPCSim.Kassl.Simulation',NewSe rver.ServerNode);
NewServer.OPCGroups.Add('Group1');
Memo1.Lines.Add(NewServer.OPCGroups.Item('Group1') .Name);
Item1:=NewServer.OPCGroups.GetOPCGroup('Group1').O PCItems.AddItem('int1', 1); //добавляем Item
Item1.Read(NewServer.OPCGroups.GetOPCGroup('Group1 ').OPCItems.Item('int1'),Val1); //читаем значения
end;
Ошибка: Variable 'Val1' might not have been initialized
что у меня не так? Подскажите пожалуйста
Доброе утро. Что можно проверить:
1. Запущена ли программа (в CodeSys или PLC). Это на всякий случай, просто меня разок так перемкнуло, что полчаса искал ошибку, так и не нажав «Онлайн» -> «Старт».
2. Правильно ли обозначена переменная (Вы писали, что работали с dOPC - посмотрите, как название переменной отражается в dOPC Explorer, может быть ".PLC_PRG.int1" или "PLC1:.int1"). Обратите внимание на точку перед названием переменной.
3. Тип переменной в CoDeSys и Delphi совпадает? У меня в CodeSys было BOOL, а в Delphi, соответственно, - boolean.
4. Если переменная Val1 в Delphi еще где то используется, то может стоит вынести ее в глобальные переменные, а не привязывать к одной процедуре.
P.S. Не мое, конечно, дело, но почему Вы не используете кодесисовский OPC-сервер? Бесплатно, нормально работает и есть возможность установить клиенту без самой CoDeSys. Впрочем - дело хозяйское. Удачи.
Пример попроще, без дополнительных манипуляций с библиотеками. На ПЛК назначаете входу имя INP1, выходу - OUT1. Конфигурируете (если кто не знает как -на этой ветке в примерах есть описание) При подаче сигнала на вход ПЛК - загорается соответствующая надпись в Delphi. При нажатии кнопки "Изменить переменную OUT1"- срабатывает выбранный Вами выход на ПЛК. Единственное, в зависимости от того, глобальные или локальные будут переменные и как все это дело сконфигурировано, переменные для Delphi могут читаться по разному. Выше я уже приводил варианты. Поэкспериментируйте и все получится.
что-то делаю не так...
V: Variant;
Item1:Variant;
Val1:string;
V := CreateOleObject('OPC.Automation');
V.Connect('OWEN.RS485');
V.OPCGroups.Add('Group1');
Item1:= V.OPCGroups.GetOPCGroup('Group1').OPCItems.AddItem ('Com1/MVA8(11bit adr=40)/General_ID/VER', 1);
Item1.Read(V.OPCGroups.GetOPCGroup('Group1').OPCIt ems.Item('Com1/MVA8(11bit adr=40)/General_ID/VER'),Val1); // здесь возникает ошибка!
edit1.Text:=vartostr(Item1.Value);
ошибка "параметр задан неверно" в edit1.Text пусто, хотя в логе OWEN.RS485:
09:55:52.261 COM1: адрес 40(11) чтение VER данные: << 35 2E 37 76
09:55:52.301 COM1: ВРЕМЯ ОПРОСА ВСЕХ ТЕГОВ 140(+-10ms)
09:55:53.236 COM1: адрес 40(11) чтение VER данные: << 35 2E 37 76
09:55:53.276 COM1: ВРЕМЯ ОПРОСА ВСЕХ ТЕГОВ 110(+-10ms)
попробуйте вызывать чтение отдельной кнопкой - возможно после подключения не сразу прочитываются данные из по Rs485
procedure TForm1.FormCreate(Sender: TObject);
begin
V := CreateOleObject('OPC.Automation'); V.Connect('OWEN.RS485');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
V.OPCGroups.Add('Group1');
Item1:= V.OPCGroups.GetOPCGroup('Group1').OPCItems.AddItem ('Com1/MVA8(11bit adr=40)/General_ID/VER', 1);
Item1.Read(V.OPCGroups.GetOPCGroup('Group1').OPCIt ems.Item('Com1/MVA8(11bit adr=40)/General_ID/VER'),Val1);
edit1.Text:=vartostr(Item1.Value);
end;
ошибка в строке:Item1.Read(V.OPCGroups.GetOPCGroup('Group1' ).OPCItems.Item('Com1/MVA8(11bit adr=40)/General_ID/VER'),Val1); - параметр задан неверно
Точно сказать не могу, т.к. с OWEN.RS485 не работал (не было пока надобности). Поэтому, может и не в тему (вдруг пригодится...), но я в первую очередь постарался подцепиться к серверу через Kassl-овский dOPC Explorer и посмотрел, как отражаются там нужные переменные. В Delphi они будут выглядеть точно также. Может быть там все дело в какой-нибудь точке. И еще...может я не прав, но может параметр General_ID стоит поменять на General_IDs? Вы в любом случае напишите, получилось что-нибудь или нет. Может тоже придется с этим столкнуться.
P.S. Насчет General_ID точно обманул. Посмотрел по Explorer - переменная так и отражается. Проверьте соответствие типа обьявленной переменной Val1. Может быть все-таки не string?
var
V:variant;
val1:string;
FormCreate:
V := CreateOleObject('OPC.Automation');
V.Connect('OWEN.RS485');
V.OPCGroups.add('Group1');
V.OPCGroups.GetOPCGroup('Group1').OPCItems.AddItem ('Com1/MVA8(8bit adr=40)/General_ID/VER', 1);
Button1Click:
val1:=V.OPCGroups.item('Group1').OPCItems.Item('Co m1/MVA8(8bit adr=40)/General_ID/VER').value;
edit1.Text:=val1;
и в edit1 пусто, в kassl строки пишутся со '/', т.е. также, и значения читаются. меня начало смущать CreateOleObject('OPC.Automation'); может необходимы какие либо действия на самой виндой?
Может модуль какой не подключен? Примерный перечень:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComObj, OleCtrls, ExtCtrls;
Что касается CreateOleObject('OPC.Automation'), то если в трее появляется иконка "485", то свою задачу он выполняет. Попробуйте обьявить Val1:variant. Может еще какой-нибудь тип. Просто нет у меня МВА (да и все ОВЕНовское в работе), попробывать читать-писать, соответственно, не могу.
Народ, да помогите же человеку! Ведь в мелочи какой-нибудь дело то.
Простите что неточно выразился
Вызывайте ЧТЕНИЕ - отдельной процедурой.
Item1.Read(V.OPCGroups.GetOPCGroup('Group1').OPCIt ems.Item('Com1/MVA8(11bit adr=40)/General_ID/VER'),Val1); // здесь возникает ошибка!
edit1.Text:=vartostr(Item1.Value);
Суть в следующем - группа мгновенно отдает значение элемента - но фактически он еще не прочитан!!!
Еще проблема в том что в OPC клиенте нужно выбрать разделитель явно и по умолчанию он не всегда '/'. См документацию на свой OPC клиент
я уже думаю что проблема в guid-ах
исходник в студию:
Вот примерчик связи с ПЛК посредством сокетов , правда пока сырой и глюковатый поэтому не судите строго :o
Заранее извеняюсь перед дельфистами, пример на Qt...
Описание протокола в tsmessages.h
честно говоря это первые шаги и есть проблемы: при простое обмена клиента с ПЛК через 12-13 сек. теряется связь.. , можно конечно связь при потере восстанавливать или используя "watch dog" не допускать её обрыва, но возможно проблемам в настройках сервера на ПЛК...
Если кому интересно могу выложить сервер на Qt работающий с этим клиентам...
честно говоря это первые шаги и есть проблемы: при простое обмена клиента с плк через 12-13 сек. теряется связь.. - по стандарту Tcp/ip при отсутствии потока данных в соединении в течении таймаута (10 сек в нашем случае) соединение должно быть закрыто.
если надо его держать открытым - посылайте пустые (нулевые) пакеты.
народ! у кого-то есть кодесисовский орс-сервер инсталлятор (без кодесиса)?? - дайте плиз.
http://forum-ru.3s-software.com/view...E5%F0%E2%E5%F0
Здесь не смотрели? Но нужна регистрация. Мне почему то в ней отказали (правда, вместо этого пригласили...в Нюрнберг), поэтому на 100% гарантировать наличие инсталлятора не могу. Впрочем, там и так есть много полезного и не только про OPC.
В Delph7 заработало, но постоянно растет используемая память, система тормозит.
Трудно сказать...У меня CPU 3.4GHz и оперативки 512. Цеплялся к ОВЕНу и Mitsubishi, TTimer вообще на 10 мс ставил - вроде ничего не тормозило и с памятью проблем не возникало.
Народ! вот такая проблемка имеецца:
под windows7 не могу читать с плк переменные в делфийский проект хоть убей (по ethernet, rs232). Изменять их., т.е. прописывать значения могу, а считать не могу. подключил к ноутбуку с ХР-ной виндой - всё пучком..... но нада чтобы и в 7-ке работало. Ведь сейчас уже все компы на 7-ке......
Может кто знает где собака порылась?
Может установка с каким-нибудь глюком прошла или с настройками не так что то? (Это так, предположение, просто я с XP никак спрыгнуть не могу - привык уже). Делфу так ставили и настраивали?
http://gunsmoker.blogspot.com/2009/1...windows-7.html
Там вроде написано, что она 7-ку как XP определяет...