Показано с 1 по 10 из 16

Тема: C# в МастерСКАДА

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию C# в МастерСКАДА

    С каждым ответом SCADAMaster у меня возникает всё больше вопросов, поэтому я создаю отдельную тему, в которой надеюсь докопаться до истины. На данный момент задача разобраться как внутри одного скрипта создавать объекты класса объявленного в другом скрипте или использовать методы другого скрипта. Как я уже говорил - я начинающий и в МастерСКАДА, и в C#, поэтому прошу отвечать последовательно и подробно, не пропуская мои вопросы.

    В качестве примера мне был предложен следующий проект:
    Скрипт вызова скрипта из другого скрипта.zip

    Я правильно понимаю, что RT это RunTime, (скрипт, который должен выполняться в режиме исполнения)? С DT вообще неясно.
    RT скрипты вроде работают, но DT - нет.

    DT/Test
    Код:
    using System;
    using MasterSCADA.Script.FB;
    using MasterSCADA.Hlp;
    using FB;
    using System.Linq;
    using MasterSCADALib;
    using MasterSCADA.Common;
    using System.Windows.Forms;
    
    public partial class ФБ : ScriptBase
    {
      public override void DoAction()
      {
         MessageBox.Show("Метод выполнен");
      }
    }
    DT/Проверка вызова скрипта
    Код:
    using System;
    using MasterSCADA.Script.FB;
    using MasterSCADA.Hlp;
    using FB;
    using System.Linq;
    using MasterSCADALib;
    using MasterSCADA.Common;
    
    
    public partial class ФБ : ScriptBase
    {
      public override void DoAction()
      {    
        var Скрипт = (ScriptFB)HostFB.TreeItemHlp.Project.Item("Объект.DT.Test").FBObject; //получаем ссылку на первый скрипт
        
         using (dynamic obj = Скрипт.CompileAndGetScriptObject(true))
            {    
        		obj.DoAction();
        	}
      }
    }
    Насколько я понимаю задумку - в первом скрипте в методе DoAction() мы вызываем метод MessageBox.Show(), который становится доступным после подключения using System.Windows.Forms;
    Второй скрипт сначала получает ссылку на первый скрипт, потом должен обратиться к методу DoAction() первого скрипта. Синтаксис мне не понятен. Почему мы используем "using" в середине кода?
    На строчке "using (dynamic obj = Скрипт.CompileAndGetScriptObject(true))" компиляция выдаёт ошибку:
    Код:
    DT.Проверка вызова скрипта" : (CS1061) 'MasterSCADA.Script.FB.ScriptFB' does not contain a definition for 'CompileAndGetScriptObject' and no extension method 'CompileAndGetScriptObject' accepting a first argument of type 'MasterSCADA.Script.FB.ScriptFB' could be found (are you missing a using directive or an assembly reference?)


    RT/Скрипт
    Код:
    using System;
    using MasterSCADA.Script.FB;
    using MasterSCADA.Hlp;
    using FB;
    using FB.FBAttributes;
    using System.Linq;
    
    public partial class ФБ : ScriptBase
    {
    	bool? M = false;
    
    	public override void Execute()
      	{    
      	HostFB.TreeItemHlp.Project.ErrorTracer.ReportError ("Ваша строка");
      	if (Параметр1==true && M==false)
      		{    		
      		var Скрипт = (ScriptFB)HostFB.TreeItemHlp.Project.Item("Объект.RT.Test").FBObject; //получаем ссылку на первый скрипт
      		dynamic obj = Скрипт.ScriptObject;
      		obj.DoAction();	    
      		}
            M = Параметр1;
      }
    }
    RT/Test
    Код:
    using System;
    using MasterSCADA.Script.FB;
    using MasterSCADA.Hlp;
    using FB;
    using System.Linq;
    using MasterSCADALib;
    using MasterSCADA.Common;
    
    
    public partial class ФБ : ScriptBase
    {
      public override void DoAction()
      {
       	Параметр1="Метод выполнен";
      }
    }
    Здесь по переднему фронту "Параметр1" скрипта "RT/Скрипт" происходит вызов метода DoAction() скрипта "RT/Test" и "Параметр1" скрипта "RT/Test" навсегда принимает значение "Метод выполнен".

    bool? M = false; - гугл говорит, что "bool?" это тип, который может принимать значение NULL. Почему мы не используем тип "bool"?

    Для обращения к скрипту мы используем иной синтаксис (dynamic obj = Скрипт.ScriptObject; ), не как в DT, хотелось бы увидеть пояснения по этому поводу.

    Я вообще могу создавать классы вне библиотечных скриптов? Компилятор постоянно ругается. Если да, то в какой части скрипта происходит объявление пользовательских классов?

    Что касается
    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    1. Напишите на в Visual Studio библиотеку с нужными вам классами, скомпилируйте, положите в папку скады, пропишите в скрипте на вкладке Настройки и обращайтесь к ней.
    постараюсь проверить завтра, когда установлю Visual Studio. Но это не тот путь, которым я хотел бы идти.

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    Зачем нужно назначать несколько библиотечных скриптов одному скрипту? Пропишите в библиотечном скрипте все нужные классы и работайте.
    - чтобы не лепить все классы в одну кучу, а иерархически их разнести по объектам структуры самой МастерСкада.


    Дополнительный вопрос был про отладку, на данный момент вижу три способа:
    1) HostFB.TreeItemHlp.Project.ErrorTracer.ReportError ("Ваша строка");
    Сообщения будут выводится в лог скады. Для открытия окна лога нажмите красную кнопку в правом нижнем углу скады.

    Работает только в режиме исполнения, не работает в режиме отладки.
    2) using System.Windows.Forms;
    MessageBox.Show("Ваша строка");
    Работает только в режиме исполнения, не работает в режиме отладки.
    3)
    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    Но есть вариант лучше, посмотрите эту статью:
    http://blog.insat.ru/2016/10/script-csharp8.html
    опять же постараюсь проверить завтра.


    Я прекрасно понимаю, что никто мне ничем не обязан, поэтому заранее благодарю за любую помощь.
    Изображения Изображения

Похожие темы

  1. Мастерскада 4Д
    от Dima1991 в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 17.10.2016, 17:05
  2. График в Мастерскада
    от Dimur в разделе Master SCADA 3
    Ответов: 5
    Последнее сообщение: 20.12.2012, 14:35
  3. скрипт для МастерСкада
    от yurgin_777 в разделе Помощь Разработчикам
    Ответов: 17
    Последнее сообщение: 06.12.2012, 19:41
  4. Отчет в Мастерскада
    от Tola в разделе Master SCADA 3
    Ответов: 3
    Последнее сообщение: 03.09.2012, 21:32
  5. МастерСкада и МДВВ
    от uagd в разделе Master SCADA 3
    Ответов: 18
    Последнее сообщение: 05.02.2009, 10:54

Ваши права

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