2.8  Transfer przebiegów wzorcowych

 

Typowym zadaniem  w przypadku aplikacji wykorzystujących przebiegi wzorcowe jest transfer definicji przebiegu do sterownika. Można to wykonać sekwencją operacji wysyłających kolejne punkty poprzez pojedynczą zmienną, ale z reguły lepszym wyjściem jest wysłanie całej definicji pojedynczą transmisją z wykorzystaniem zmiennej tablicowej.

Do odczytu przebiegów wzorcowych wykorzystywana jest metoda GetTrendPatternPoints interfejsu IApplication.

C#

using System;

using System.Windows.Forms;

using Askom.AsixEvo.Scripting;

 

public class Curve : IScript

{

    public bool Initialize(string[] aParameters, IApplication aApplication)

    {

        IVariable v = aApplication.GetVariable(aParameters[1], false);

        int varSize = Convert.ToInt32(v.VariableAttribute("ElementsCount"));

 

        int[] transferBuffer = new int[varSize];

        int pointsCount = 0;

        foreach (TrendPatternPoint point in 

                                   aApplication.GetTrendPatternPoints(aParameters[0]))

        {

            if (pointsCount <= varSize - 2)

            {

                transferBuffer[pointsCount] = (int)point.TimeStamp.TotalSeconds;

                transferBuffer[pointsCount + 1] = (int)point.Value;

                pointsCount += 2;

            }

            else

            {

                if (pointsCount <= varSize)

                    transferBuffer[pointsCount] = 0;

                break;

            }

        }

        v.SetVariableValue(transferBuffer);

 

        v.Dispose();

        return true;

    }

 

    public void FinalizeScript()

    {

    }

}

VB

 

Imports System

Imports System.Windows.Forms

Imports Askom.AsixEvo.Scripting

 

Public Class CurveVB

    Implements IScript

 

    Public Function Initialize(ByVal aParameters() As StringByVal aApplication _

                                   As IApplication) As Boolean Implements IScript.Initialize

 

        Dim v As IVariable = aApplication.GetVariable(aParameters(1), False)

        Dim varSize As Integer = Convert.ToInt32(v.VariableAttribute("ElementsCount"))

        Dim pointsCount As Integer = 0

 

        Dim transferBuffer() As Integer = New Integer(varSize) {}

 

        For Each point As TrendPatternPoint In _

                                        aApplication.GetTrendPatternPoints(aParameters(0))

 

            If pointsCount <= varSize - 2 Then

 

                transferBuffer(pointsCount) = CInt(point.TimeStamp.TotalSeconds)

                transferBuffer(pointsCount + 1) = CInt(point.Value)

                pointsCount += 2

 

            Else

 

                If (pointsCount <= varSize) Then transferBuffer(pointsCount) = 0

                Exit For

 

            End If

        Next point

 

        v.SetVariableValue(transferBuffer)

 

        v.Dispose()

        Return True

    End Function

 

    Public Sub FinalizeScript() Implements IScript.FinalizeScript

    End Sub

 

End Class  

 

 

Pierwszą operacją w skrypcie jest odczyt atrybutu ElementsCount zmiennej docelowej w celu określenia wielkości dostępnego bufora. Zakłada się, że typem elementów zmiennej jest 32-bitowa  liczba całkowita. Dodatkowo tworzona jest tablica transferBuffer, o rozmiarze zgodnym z wielkością zmiennej procesowej.

Następnie kolejne punkty przebiegu wzorcowego (pobrane metodą GetTrendPatternPoints) są zapisywane do kolejnych elementów tablicy  transferBuffer, parami przesunięcie czasowe i wartość punktu. Jeżeli przebieg nie wypełnia całej tablicy, to dodawana jest pojedyncza wartość zerowa oznaczająca koniec przebiegu.

Działanie skryptu kończy standardowe wywołanie metody SetVariableValue.