Страница 23 из 25 ПерваяПервая ... 132122232425 ПоследняяПоследняя
Показано с 221 по 230 из 248

Тема: драйвер Delphi

  1. #221

    По умолчанию

    Делфи давно умер... вы откуда упали?
    похоже вы забыли на чем написаны были "программы на мертвом языке", такие как: Altium Designer,FastStone Image Viewer, The KMPlayer, AIMP, Skype, QIP, QIP Infium и R&Q, The Bat!, FruityLoops, Guitar Pro, Open Perl IDE , Macromedia HomeSite, Macromedia Captivate, Avant Browser, Total Commander (мертвая программа), Download Master, ASProtect, Bred2, Everest(а мервтее этой уж точно нет!), Hexapad(и прах этой то же).

  2. #222

    По умолчанию

    Цитата Сообщение от Sdvnkhp Посмотреть сообщение
    Делфи давно умер... вы откуда упали?
    похоже вы забыли на чем написаны были "программы на мертвом языке", такие как: Altium Designer,FastStone Image Viewer, The KMPlayer, AIMP, Skype, QIP, QIP Infium и R&Q, The Bat!, FruityLoops, Guitar Pro, Open Perl IDE , Macromedia HomeSite, Macromedia Captivate, Avant Browser, Total Commander (мертвая программа), Download Master, ASProtect, Bred2, Everest(а мервтее этой уж точно нет!), Hexapad(и прах этой то же).
    А что можете лучшее предложить ?

  3. #223

    По умолчанию

    Я это к тому что делфи считают архаизмом.. скорее наоборот архаичный идиотизм так считать...
    Я тут на основе кастомных интефейсов решил своять свое подобие Kassl прошу не кидать помидорами... это только начало... если кому надо описание OPC DA 3.0 (Агл.) могу кинуть на мыло.
    Касательно овена и Codesys список добавленных переменных можно брать с проекта (*или тут :\WINDOWS\Gateway Files\*) Файл *.Sym (блокнотом можно посмотреть...) по мере возможности и времени буду допиливать и тут обновлять...

    P.S. пытался читать...
    Вложения Вложения
    • Тип файла: zip OPC.zip (304.1 Кб, Просмотров: 66)
    Последний раз редактировалось Sdvnkhp; 14.03.2012 в 16:36. Причина: обновил архив

  4. #224

    По умолчанию

    интересно будет глянуть по свободе....
    Хотя касл нормально работает.... и антитабличка имеется

  5. #225

    По умолчанию

    Внесу и свои 5 копеек.
    Когда недавно возникла задача вести небольшой процесс, к нему же немного визуализации на ПЦ и заодно архивировать эти данные с возможностью удаленно просмотреть, то оказалось что трейсмод с нужными либами + лектус обходится в сумму не менее 30 килорублей. Что-то мне подсказало что это как-то немного жирновато будет.
    В результате быстро набросал черновой проект на акцессе: mscom32.ocx + немного кода для модбас аски...
    Сразу предвидя крики о стоимости лицензии на акцесс, хочу этих кричащих обломать: клиенту можно и не покупать акцесс - достаточно поставить бесплатный рантайм. Т.е. трейс с опц идет лесом, а мощности акцесса хватит для натягивания трейса в любой конфигурации с ценником за сотню килорублей. Ну и разобраться в акцессе можно быстрее чем в том же дельфи, и это еще не говоря про разные трейсы с мастескадами с их человеконенавистническим интерфейсом, в которые без бутылки лучше не соваться...
    В планах накатать свою ocx/dll для полной подержки modbus serial ascii/rtu на сях (или можно на том же дельфи). Потом может и до TCP доберусь, если это конечно кому-то интересно.
    Только вот свободное время будет где-то в мае...

  6. #226
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,249

    По умолчанию

    зачем что то изобретать, нужно пользоваться опытом других http://alexsentcha.wordpress.com/sai...ation-library/
    Последний раз редактировалось capzap; 27.02.2012 в 23:52.

  7. #227

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    зачем что то изобретать, нужно пользоваться опытом других http://alexsentcha.wordpress.com/sai...ation-library/
    Да дельфи для работы с акцессом подходит не очень - работа с памятью и указателями его не очень сильная сторона. Точнее я вообще не помню как он там работает с указателями, т.к. раньше их вообще не было.
    А без прямой работы с памятью будет не намного лучше встроенного vba, на котором даже с отдельными битами работать приходится с разными "калькуляторами разрядов". Поэтому этот черновой вариант и был ascii only, т.к. даже контрольную сумму RTU посчитать проблема. Ну и кроме поддержки собственно модбаса, планировалось сделать несколько функций для работы с разными мелочами.

  8. #228
    Пользователь
    Регистрация
    31.08.2010
    Адрес
    Брест
    Сообщений
    23

    По умолчанию

    Всем привет.

    Полтора года назад начинал писать небольшую скаду и всё успешно работало...
    Однако на днях понадобилось сделать некоторые изменения и наткнулся на острую проблему. При поптыке выполнить программу из Дельфи, вылетает ошибка: http://clip2net.com/s/2T5vE

    Работаю с ОРС без каких либо навесок.

    Единственное что приходит на ум, винда7. Полтора года назад всё это писалось на компе под win-xp, а сейчас это всё установлено под управлением win-7.

    Люди, помогите...

  9. #229

    По умолчанию

    Добрый день! Прошу Вашей помощи.
    Изучив данную ветку
    я используя приведеный пример написал программу для работы с OPC сервером (Контроллер ПЛК-100)

    В процессе разработки программы, сначала были созданы кнопки для отправки данных и для считывания. Они работали на УРА. Можно было запустить программу, и через часа два все работало. Но затем я добавил таймер, для постоянного мониторинга состояния датчиков. И тут начались беды. При запуске программы с таймером минут 5-10 все работает и все. Складывается впечатление что ОРС сервер просто "зависает". Данные с него считываются, но только те, которые были в момент зависания. К примеру в контроллере переменная уже равна двум, а он как принимал единицу, так и принимает. А данные не отправляются, при отправке данных происходит ошибка "неопознанная ошибка"....
    Перезагружаешь компьютер - 5 минут работает и виснет. Побывал увеличивать интервалы таймера (изначально я поставил 100 мс, отображение было идеальноым. Не помогло. Затем я просто отключил таймер, и к моему удивлению и это не помогло, хотя ранее без таймера все работало отлично. Может быть Вы сможете что нибудь подсказать? Очень надеюсь на Вашу помощь!

    Текст программы:
    Скрытый текст:

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, OPCAutomation_TLB, StdCtrls, ExtCtrls;
    type
    TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Panel1: TPanel;
    Panel2: TPanel;
    Timer1: TTimer;
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    end;

    var
    Form1: TForm1;

    NewServer:OPCServer;
    NewGroups:OPCGroups;
    NewGroup:OPCGroup;
    NewItems:OPCItems;

    NewItem1, NewItem2, NewItem3, NewItem4, NewItem5:Variant;
    Val1 : Integer;
    Val2, Val3 : Boolean;

    implementation

    // Подключение к серверу
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    // Шаг 1, подключение
    NewServer:=CoOPCServer.Create;
    NewServer.Connect('CoDeSys.OPC.02',NewServer.Serve rNode);

    Memo1.Clear;
    Memo1.Lines.Add(NewServer.ServerName);
    Memo1.Lines.Add(DateTimetostr(NewServer.LastUpdate Time));
    Memo1.Lines.Add(NewServer.VendorInfo+'. Версия '+Inttostr(NewServer.MajorVersion)+'.'+Inttostr(Ne wServer.MinorVersion)+'.'+Inttostr(NewServer.Build Number));
    Memo1.Lines.Add('Состояние сервера='+Inttostr(NewServer.ServerState));

    // Шаг 2, создание группы
    NewGroups:=NewServer.OPCGroups;
    NewGroup:=NewGroups.Add('Group1');

    Memo1.Lines.Add(NewGroup.Name);

    // Добавим Items для обмена данных
    NewItem1:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.tx', 1);
    NewItem2:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz1', 1); // Левый датчик
    NewItem3:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz2', 1); // Правый датчик
    NewItem4:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.sec3', 1); // Левый датчик
    NewItem5:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.sec1', 1); // Правый датчик
    end;

    // Отключение
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    NewServer.OPCGroups.RemoveAll;
    NewServer.Disconnect;
    Memo1.Lines.Add('Состояние сервера='+Inttostr(NewServer.ServerState));
    end;

    // Установить 1-ый режим
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    NewGroup.OPCItems.Item('PLC1:PLC_PRG.tx').Write(1) ;

    Memo1.Lines.Add('Установлен 1-ый режим!');
    end;

    // Установить 2-ой режим
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    NewGroup.OPCItems.Item('PLC1:PLC_PRG.tx').Write(2) ;

    Memo1.Lines.Add('Установлен 2-ой режим!');
    end;

    // Чтение режима
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    NewItem1.Read(NewGroups.GetOPCGroup('Group1').OPCI tems.Item('PLC1:PLC_PRG.tx'), Val1);

    Memo1.Lines.Add('Установлен режим №'+VarToStr(NewItem1.Value));
    end;

    // Программа таймера, обновляет показания датчиков
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    NewItem2:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz1', 1); // Левый
    NewItem2.Read(NewGroups.GetOPCGroup('Group1').OPCI tems.Item('PLC1:PLC_PRG.poz1'), Val2);

    NewItem3:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz2', 1); // Правый
    NewItem3.Read(NewGroups.GetOPCGroup('Group1').OPCI tems.Item('PLC1:PLC_PRG.poz2'), Val3);

    if NewItem2.Value then panel1.Color:=clred else panel1.Color:=clgreen ;
    if NewItem3.Value then panel2.Color:=clred else panel2.Color:=clgreen ;
    end;

    end.

  10. #230

    По умолчанию

    Цитата Сообщение от test_91 Посмотреть сообщение
    // Программа таймера, обновляет показания датчиков
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    NewItem2:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz1', 1); // Левый
    NewItem2.Read(NewGroups.GetOPCGroup('Group1').OPCI tems.Item('PLC1:PLC_PRG.poz1'), Val2);

    NewItem3:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz2', 1); // Правый
    NewItem3.Read(NewGroups.GetOPCGroup('Group1').OPCI tems.Item('PLC1:PLC_PRG.poz2'), Val3);

    if NewItem2.Value then panel1.Color:=clred else panel1.Color:=clgreen ;
    if NewItem3.Value then panel2.Color:=clred else panel2.Color:=clgreen ;
    end;

    end.
    Может сам OPC глючит, тут после лектуса и кодесиссовского OPC можно всякого ожидать. Крайне они специфичны. Хотя после выбора правильной версии и настройки вроде пашут (зато цена у них не такая как у того же kepware). Для тестов я обычно использую какой-нибудь проверенный клиент, например, kepware. Есть и другие.

    Глянул код. Вот мне странно, а почему ты в таймере каждый раз теги добавляешь
    NewItem2:=NewGroups.GetOPCGroup('Group1').OPCItems .AddItem('PLC1:PLC_PRG.poz1', 1);
    как думаешь когда OPC от этого станет нехорошо и когда у системы закончатся ресурсы? Конечно за 5 минут вроде не должны бы, хотя как знать. В общем из таймера добавление тегов лучше убрать. Только конечно, если это не какая-то особенность вот данных библиотек. Далее в Delphi таймеры очень специфичны и код в них лучше защищать на случай вылета exception внутри метода и повторного входа в обработчик из-за всплывшего модального окна.
    Потом хорошо еще предусмотреть вариант того что OPC сервер вот взял и упал. Причем очень тихо. И вот тогда надо к нему переконнектится. В общем случае должны быть процедуры для коннекта к OPC с созданием групп и тегов, далее процедура для обновления данных, процедура для проверки доступности сервера, процедура для дисконнекта.

Страница 23 из 25 ПерваяПервая ... 132122232425 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •