Доступ к .NET сборкам в Vijeo Citect 2015

Приложение А: "Hello World!", код на C# (Visual Studio 2015)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace HelloWorld
{
    public class HelloWorld
    {
        private string _helloWorldString;
        public HelloWorld()
        {
            _helloWorldString = "Hello World!";
        }
        public string Message
        {
            get
            {
                return _helloWorldString;
            }
            set
            {
                _helloWorldString = value;
            }
        }
        public void DisplayMessage()
        {
            MessageBox.Show(Message);
        }
    }
}

Приложение Б: "Hello World!", код на cicode (Vijeo Citect 2015)

// ---------------------------------------------------------------------------
// Файл: HelloWorld1.ci
// ---------------------------------------------------------------------------
//
// ---------------------------------------------------------------------------
// Hello World! примеры для вызова .NET кода из cicode
//
//
// ---------------------------------------------------------------------------
// HelloWorld1
// -----------
//
// Описание: Создаем экземпляра класса HelloWorld, получаем
// свойство Message и, используя cicode функцию Message, отображаем
// его значение в диалоговом окне.
// ---------------------------------------------------------------------------

FUNCTION HelloWorld1()
   
    //Хендл экземпляра класса hello world
    OBJECT hHelloWorld;
    STRING sMessage;
   
    //Создаем экземпляр класса
    hHelloWorld = DllClassCreate(PathToStr("[RUN]:HelloWorld.dll"), "HelloWorld");

    //Если экземпляр класса создан успешно...
    IF DllClassIsValid(hHelloWorld) = 1 THEN
        //Получаем значение свойства Message
        sMessage = DllClassGetProperty(hHelloWorld, "Message");
        Message("Значение свойства из экземпляра .Net класса", sMessage, 0);
    END

    //Освобождаем экземпляр класса
    DllClassDispose(hHelloWorld);
END
// ---------------------------------------------------------------------------
// Файл: HelloWorld2.ci
// ---------------------------------------------------------------------------
//
// ---------------------------------------------------------------------------
// Hello World! примеры для вызова .NET кода из cicode
//
//
// ---------------------------------------------------------------------------
// HelloWorld2
// -----------
//
// Описание: Создаем экземпляр класса HelloWorld, присваиваем значение
// свойству Message и затем вызываем метод DisplayMessage
// для отображения сообщения в диалоговом окне.
// ---------------------------------------------------------------------------

FUNCTION HelloWorld2()
   
    //Хендл экземпляра класса hello world
    OBJECT hHelloWorld;
    STRING sMessage = "Hello World !!!!!";
   
    //Создаем экземпляр класса
    hHelloWorld = DllClassCreate(PathToStr("[RUN]:HelloWorld.dll"), "HelloWorld");

    //Если экземпляр класса создан успешно...
    IF DllClassIsValid(hHelloWorld) = 1 THEN
        //Присваиваем значение свойству Мessage...
        DllClassSetProperty(hHelloWorld, "Message", sMessage);
        //и отображаем это значение через вызов метода DisplayMessage
        DllClassCallMethod(hHelloWorld, "DisplayMessage");
    END

    //Освобождаем экземпляр класса
    DllClassDispose(hHelloWorld)
END

Приложение В: ProcessEventQue(), код на cicode (Vijeo Citect 2015)

FUNCTION ProcessEventQueue()

    INT hQueue;
    INT iRecord;
    STRING sAlarmFmt;
    STRING sRemaining;
    STRING sAlarmName;
    STRING sTime;
    INT iCategory;
    STRING sState;
    INT iSendCategory = 2;
    INT iQueStatus;
    INT iQueLength;
    STRING sPaging;
    STRING sPagingGroup;

    WHILE 1 DO
        hQueue= QueOpen("EventQue", 0);
        Sleep(1);
        IF hQueue<> -1 THEN
            iQueLength = QueLength(hQueue);
            IF iQueLength > 0 THEN
                iQueStatus = 0;
                WHILE iQueStatus = 0 DO
                    iQueStatus = QueRead(hQueue, iRecord, sAlarmFmt, 1);
                    //в sAlarmFmt будет возвращаться строка в формате указанном
                    //в параметре [Alarm]EventQueFmt
                    //В этом примере это это будет быглядеть
                    //{заполните это позже когда будете отлаживать эту функцию}
                    IF sAlarmFmt <> "" THEN
                        sAlarmName = StrLeft(sAlarmFmt, StrSearch(0, sAlarmFmt, ","));
                        sRemaining = StrRight(sAlarmFmt, StrLength(sAlarmFmt) - StrSearch(0, sAlarmFmt ,",") - 1);
                        sTime= StrLeft(sRemaining, StrSearch(0, sRemaining, ","));
                        sRemaining = StrRight(sRemaining, StrLength(sRemaining ) - StrSearch(0, sRemaining, ",") - 1);
                        iCategory = StrToInt(StrLeft(sRemaining, StrSearch(0, sRemaining, ",")));
                        sRemaining = StrRight(sRemaining, StrLength(sRemaining) - StrSearch(0, sRemaining, ",") - 1);
                        sState = StrLeft(sRemaining, StrSearch(0, sRemaining, ","));
                        sRemaining = StrRight(sRemaining, StrLength(sRemaining) - StrSearch(0, sRemaining, ",") - 1);
                        sPaging = StrLeft(sRemaining, StrSearch(0, sRemaining, ","));
                        sPagingGroup = StrRight(sRemaining, StrLength(sRemaining) - StrSearch(0, sRemaining, ",") - 1);
                        IF ((sPaging = "TRUE") AND (iCategory = 2) AND (sState = "ON")) THEN
                            SendEmail("forum(AT)proasutp.com", sAlarmName, "TIME: " + sTime + " STATE:" + sState);
                        END
                    END
                END
            END
        END
    END
END
Источник: www.schneider-electric.com
Перевод, исправление ошибок и адаптация: www.proasutp.com

 

Страницы

Теги: