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 String, ByVal 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.