Целью наших публикаций будет показать возможности, а также несколько типовых примеров использования этого ФБ. Рассказывать подробно про сам язык C# мы не будем, тем более книг по нему существует огромное количество.
«Скрипт C#» находится на закладке «Служебные» палитры ФБ – добавим его в проект.


На вкладке «Настройки» задаются ссылки на сборки. Сборки – это различные .Net библиотеки, классы и методы которых могут использоваться в коде скрипта. Можно подключать как сборки из поставки MasterSCADA, так и добавлять собственные (сторонние).


Вкладка «Код» предназначена непосредственно для написания алгоритма.

1 – секция кода. В данной секции производится написание кода скрипта.
2 – секция входов и выходов. В данной секции создаются входы и выходы, через которые скрипт сможет принимать и передавать данные.
3 – кнопки компиляции и ручного вызова методов.
4 – секция вывода результатов компиляции. Если при компиляции будут обнаружены ошибки, они будут выведены в эту секцию.
Основной является секция кода – именно в ней и будет производится написание алгоритма. Изначально в ней уже находится небольшой код – это шаблон-заготовка, для написания пользовательского кода. В начале находится секция using, в данной секции производится определение пространства имен – какие свойства, классы и методы подключенных библиотек будут доступны из кода.
Затем следует определение класса:
public partial class ФБ : ScriptBase |
Затем происходит объявление метода (метод – это функция, принадлежащая классу) Execute:
public override void Execute() |
Также в классе доступны еще 3 метода:
public override void Start() //метод вызывается один раз при старте режима исполнения. В нем можно произвести инициализацию переменных. public override void Stop() //метод вызывается один раз при остановке режиме исполнения. В нем можно выполнить завершить необходимые процессы. public override void DoAction() //метод ручного вызова. Метод вызывается при нажатии на кнопку "DoAction" в секции кнопок. Данный метод нужен для ручного вызова кода - например если код реализует автопостроение проекта. |
Для примера напишем простейший скрипт для работы в RunTime. Например, сделаем чтобы скрипт выполнял сумму двух чисел, выводил на выход их результат и контролировал чтобы сумма не превышала 100.
Сначала добавим два входа. Для этого в секции входов и выходов вызовем контекстное меню и добавим выберем пункт «Добавить».


Имя – имя переменной (это имя будет присутствовать в дереве объектов, и по нему вы будете обращаться ко входу из кода). Имя допустимо написать кириллицей, но в нем не должно быть пробелов и спецсимволов, и он должен начинаться с буквы. Для переименования нужно выделить поле мышью, а затем еще раз щелкнуть мышью. Переименуем нашу переменную во «Вход1».
Тип – тип доступа переменной. Возможны три варианта – «Чтение», тогда переменная добавляется в группу «Входы», Запись – переменная добавляется в группу «Выходы» и «ЧтениеЗапись» - переменная с одним и тем же именем добавляется и в группу «Входы» и в группу «Выходы». Оставим тип «Чтение».
Тип значения – тип данных входа или выхода. В столбце указывается тип согласно принципам именования в MasterSCADA, но в C#, разумеется, используются другие именования типов. В таблице представлены соотношения типов MasterSCADA и C#.
Тип MasterSCADA | Тип C# |
Вещественный | Double? |
Целый | Int? |
Беззнаковый целый | Uint? |
Логический | Bool? |
Строковый | String |
Время | DateTime? |
Нет | Object |
https://msdn.microsoft.com/ru-ru/library/1t3y8s4s.aspx
Оставим у входа «Вещественный».
Добавим еще одну переменную и назовем ее «Вход2», тип «Чтение», тип данных «Вещественный».
Добавим еще одну переменную, назовем ее «Выход», тип «Запись», тип данных «Вещественный».


В секции Execute напишем наш код. Напомним – нам нужно вычислить сумму значений входа1 и входа2, и выдать ее на выход, при этом значение на выходе не должно превышать 100.
Сначала нам нужно убедится, что на Входе1 и Входе2 есть значения, в противном случае на выход нужно записать Null (то есть на выходе тоже тогда значения быть не должно).
public override void Execute() { if (Вход1.HasValue && Вход2.HasValue) { //здесь мы потом посчитаем сумму } else Выход=null; } |

Теперь посчитаем сумму значений и выведем ее на выход. Заведем для суммы отдельную переменную Summ, типа Double и сохраним в нее сумму входов.
double Summ=Вход1.Value+Вход2.Value; |
double Summ=Вход1.Value+Вход2.Value; if (Summ<100) Выход=Summ; else Выход=100; |
public override void Execute() { if (Вход1.HasValue && Вход2.HasValue) { double Summ=Вход1.Value+Вход2.Value; if (Summ<100) Выход=Summ; else Выход=100; } else Выход=null; } |


Запустим режим исполнения и подадим значения на вход.


Скачать проект с примером данного скрипта можно по этой ссылке.
В следующих статьях мы рассмотрим несколько практических примеров использования скриптов в проектах.