string ApplicationText(string aTextId);
Function ApplicationText (ByVal aTextId As String) As String
Funkcja zapewnia wsparcie dla aplikacji wielojęzycznych. Zwraca napis z puli napisów aplikacji. Zwracany jest napis o identyfikatorze podanym w parametrze aTextId w wersji językowej zgodnej z aktualnym jezykiem pracy aplikacji.
Thread CreateThread(ThreadStart aThreadFunction);
Function CreateThread (ByVal aThreadFunction As System.Threading.ThreadStart) As System.Threading.Thread
Funkcja tworzy nowy wątek wykonawczy skryptu. Parametr aThreadFunction określa funkcję, która zostanie wykonana w nowym wątku. Funkcja wątku musi być zgodna z systemowym delegatem ThreadStart. Funkcja CreateThread zwraca systemowy obiekt klasy Thread, za pośrednictwem którego można kontrolować pracę skryptu.
W skryptach Asix.Evo zalecane jest tworzenie wątków za pośrednictwem funkcji CreateThread, zamiast bezpośrednich metod platformy .Net.
Przykład:
C#
void ThreadFnc()
{
//
// kod wątku
//
}
public bool Initialize(string[] aParameters, IApplication aApplication)
{
Thread t1 = aApplication.CreateThread(ThreadFnc);
t1.Start();
return false;
}
VB
Sub ThreadFun()
'
' kod wątku
'
End Sub
Public Function Initialize(ByVal aParameters() As String, ByVal aApplication As _
IApplication) As Boolean Implements IScript.Initialize
Dim t1 As System.Threading.Thread
t1 = aApplication.CreateThread(AddressOf ThreadFun)
t1.Start()
Return False
End Function
Funkcja ThreadFnc stanowi kod wątku. Wywołanie CreateThread tworzy wątek, a funkcja Start obiektu Thread uruchamia wątek.
bool ExecuteAction(string aAction);
bool ExecuteAction(string aAction, bool aWaitForFinish);
Function ExecuteAction (ByVal aAction As String) As Boolean
Function ExecuteAction (ByVal aAction As String, , ByVal aWaitForFinishRefresh As Boolean) As Boolean
Funkcja uruchamia akcję operatorską określoną parametrem aAction. Parametr aWaitForFinish określa czy należy oczekiwać na zakończenie wykonywania akcji operatorskiej. Wartość false lub brak parametru oznacza, że akcja operatorska zostanie wykonana asynchronicznie. Funkcja zwraca wartość false, gdy wystąpił błąd wykonania akcji.
Funkcja ExecuteAction rozszerza możliwości skryptów Asix.Evo o pełny zestaw operacji realizowanych w aplikacjach przy pomocy akcji operatorskich. Należy jednak zwrócić uwagę, że niektóre akcje wykonane w kontekście skryptu rezydentnego mogą mieć niekorzystne działanie. Na przykład, wykonanie akcji OpenWindow w przypadkowej chwili czasu może stanowić zaskoczenie dla użytkownika.
string[] GetActiveAlarms(string aDomain);
Function GetActiveAlarms (ByVal aDomain As String) As String()
Funkcja zwraca tablicę identyfikatorów wszystkich aktualnie aktywnych alarmów w domenie alarmowej określonej parametrem aDomain. Jeżeli nazwa domeny jest pusta, to wywołanie dotyczy domeny domyślnej (pierwszej zdefiniowanej) aplikacji.
IAlarm GetAlarm(string aAlarmName);
IAlarm GetAlarm(string aDomainName, string aAlarmName);
Function GetAlarm (ByVal aAlarmName As String) As IAlarm
Function GetAlarm (ByVal aDomain As String, ByVal aAlarmName As String) As IAlarm
Funkcja zwraca referencję do obiektu realizującego interfejs IAlarm dla alarmu o identyfikatorze określonym przez parametr aAlarmName z domeny o nazwie aDomain. Wersja wywołania bez podania nazwy domeny dotyczy domeny domyślnej (pierwszej zdefiniowanej) aplikacji.
Interfejs IAlarm pozwala na uzyskanie informacji na temat definicji alarmu i jego aktualnego stanu. Pozwala też na kontrolę stanu alarmu: zgłaszanie, kończenie i potwierdzanie alarmu.
string[] GetAlarmDomainController(string aDomain);
Function GetAlarmDomainController (ByVal aDomain As String) As String()
Funkcja zwraca nazwę stanowiska aktywnego kontrolera domenie alarmowej określonej parametrem aDomain. Jeżeli nazwa domeny jest pusta, to wywołanie dotyczy domeny domyślnej (pierwszej zdefiniowanej) aplikacji.
string[] GetAlarmDomains();
Function GetAlarmDomains () As String()
Funkcja zwraca tablicę nazw wszystkich aktywnych domen alarmowych zdefiniowanych w aplikacji.
AlarmStationMode GetAlarmDomainStationName(string aDomain);
Function GetAlarmDomainStationName (ByVal aDomain As String) As AlarmStationMode
Funkcja zwraca aktualny tryb pracy systemu alarmów w domenie alarmowej określonej parametrem aDomain. Jeżeli nazwa domeny jest pusta, to wywołanie dotyczy domeny domyślnej (pierwszej zdefiniowanej) aplikacji.
Typ wyliczeniowy AlarmStationMode może przyjmować następujące wartości: ActiveController, PasiveController, Terminal i Undetermined. Tryb Undetermined jest trybem przejściowym, który może zostać zwrócony w stanach nieustalonych, np. w trakcie uruchamiania domeny.
AlarmDomainStatistics GetAlarmDomainStatistics(string aDomain);
Function GetAlarmDomainStatistics (ByVal aDomain As String) As AlarmDomainStatistics
Funkcja zwraca obiekt klasy AlarmDomainStatistics, za pośrednictwem którego można sprawdzić szereg informacji statystycznych dotyczących aktualnego stanu domeny alarmowej określonej parametrem aDomain. Jeżeli nazwa domeny jest pusta, to wywołanie dotyczy domeny domyślnej (pierwszej zdefiniowanej) aplikacji.
string[] GetAppData(string aId);
Function GetAppData (ByVal aId As String) As Object
Funkcja zwraca wartość wskazanej danej aplikacyjnej.
ChannelState GetChannelState(string aChannelName);
Function GetChannelName (ByVal aChannelName As String) As ChannelState
Funkcja zwraca aktualny status pracy kanału komunikacyjnego o nazwie podanej w parametrze aChannelName.
Typ wyliczeniowy ChannelState może przyjmować następujące wartości:
Correct - Kanał pracuje poprawnie
Initializing - Inicjalizacja kanału
MainChannelCommunicationError - Błąd komunikacji
MainChannelCommunicationErrorRedundantCommunication - Błąd komunikacji redundantnej
ControllerSTOP - Stan STOP sterownika
TempraryOff - Tymczasowo wyłączony
RedundantEvoDriver - W kanale Asix.Evo jest aktywny drajwer redundantny
OtherError - Inny błąd kanału
Unknown Channel - Nieznany kanał
Undetermined - Nieokreślony stan kanału
string[] GetDefinedAlarms(string aDomain);
Function GetDefinedAlarms (ByVal aDomain As String) As String()
Funkcja zwraca tablicę identyfikatorów wszystkich alarmów zdefiniowanych w domenie alarmowej określonej parametrem aDomain. Jeżeli nazwa domeny jest pusta, to wywołanie dotyczy domeny domyślnej (pierwszej zdefiniowanej) aplikacji.
string[] GetDiagStations();
Function GetDiagStations () As String()
Funkcja zwraca listę stanowisk, dla których dostępne są dane diagnostyczne Diagnostyki centralnej.
IPowerGuardMeter GetPowerGuardMeter(string aMeterName);
Function GetPowerGuardMeter(ByVal aMeterName As String) As IPowerGuardMeter
Funkcja zwraca interfejs miernika strażnika mocy o nazwie określonej parametrem aMeterName. Jeżeli miernik o danej nazwie nie istnieje, to zwraca null.
StationDiagData GetStationDiagInfo(string aStation);
Function GetStationDiagInfo(ByVal aStation As String) As StationDiagData
Dla danego stanowiska funkcja zwraca dane diagnostyczne zgromadzone na serwerze diagnostyki centralnej. Nazwa stanowiska może być podana jako np.: SRV1 lub TERMINAL1&192.168.1.10 lub TERMINAL1@KOMPUTER_BIURO lub TERMINAL1@RDS_SRV#1
TrendPatternPoint[] GetTrendPatternPoints(string aPatternName);
Function GetTrendPatternPoints(ByVal aPatternName As String) As TrendPatternPoint()
Funkcja zwraca tablicę punktów dla przebiegu wzorcowego o nazwie podanej w parametrze aPatternName.
Funkcja używana w skryptach, których zadaniem jest transfer przebiegu krzywej wzorcowej do sterownika.
UserInfo GetUserInfo(string aUserId);
Function GetUserInfo(ByVal aUserId As String) As UserInfo
Funkcja zwraca informacje o wskazanym użytkowniku Asix.Evo.
IVariable GetVariable(string aVarName, bool aRefresh, bool aWithTimeStampsEvent);
IVariable GetVariable(string aVarName, bool aRefresh);
Function GetVariable(ByVal aVarName As String, ByVal aRefresh As Boolean) As IVariable
Function GetVariable(ByVal aVarName As String, ByVal aRefresh As Boolean, ByVal aWithTimeStampsEvent As Boolean) As IVariable
Funkcja zwraca referencję do obiektu realizującego interfejs IVariable dla zmiennej o nazwie określonej przez parametr aVarName. Parametr aRefresh określa, czy należy rozpocząć odświeżanie(okresowy odczyt) wartości zmiennej. Odświeżanie należy włączyć w przypadku monitorowania zmian wartości bieżącej zmiennej. Jeżeli skrypt będzie korzystał tylko z danych archiwalnych lub jedynie sterował wartością zmiennej, to włączenie odświeżania jest zbędne.
Parametr aWithTimeStampsEvent określa w jaki sposób wywoływana będzie funkcja monitorowania wartości zmiennych (deklarowana metodą RegisterStateEvent interfejsu IVariable). Wartość false lub brak parametru oznacza, że funkcja moniotorowania będzie wykonywana tylko wtedy, gdy zmieni się wartość lub status zmiennej. Wartość true oznacza, że kontrolowane będą także zmiany stempla czasu wartości.
Interfejs IVariable pozwala na uzyskanie informacji na temat definicji zmiennej oraz jej aktualnej wartości. Pozwala też na odczyt wartości archiwalnych oraz udostępnia metody zapisu wartości zmiennej.
ArcVariableState[ ] GetVariableArcData(string aVarName,DateTime aStartTime, DateTime aEndTime, string aAggregate, TimeSpan aAggregateInterval);
Function GetVariableArcData(ByVal aVarName As String,ByVal aStartTime As Date, ByVal aEndTime As Date, ByVal aAggregate As String, ByVal aAggregateInterval As System.TimeSpan) As ArcVariableState( )
Funkcja pozwala na odczyt danych archiwalnych dla zmiennej określonej przez parametr aVarName. Parametry aStartTime i aEndTime oznaczają kolejno początek i koniec okresu czasu, z jakiego dane należy odczytać. Parametr aAggregate określa nazwę zastosowanego agregatu, a parametr aAggregateInterval okres jego wyliczania.
W momencie wykonania metody działanie skryptu jest zawieszane do chwili zakończenia odczytu danych archiwalnych. Metoda zwraca tablicę punktów (obiektów ArcVariableState) odczytanego przebiegu archiwalnego. W przypadku błędy zwracane jest wartość null.
Alternatywnym sposobem odczytu danych archiwalnych jest metoda OrderArcData interfejsu IVariable.
Zobacz też
Rodzaje agregatów danych archiwalnych - patrz: Rodzaje agregatów danych archiwalnych
Przykład:
C#
public bool Initialize(string[] aParameters, IApplication aApplication)
{
ArcVariableState[] values = aApplication.GetVariableArcData("Pomiar1",
DateTime.Today, DateTime.Now, "average", TimeSpan.FromMinutes(15));
if (values == null)
aApplication.ReportMessage(EvoMessageType.Error, "Read error");
else
{
foreach (ArcVariableState v in values)
aApplication.ReportMessage(EvoMessageType.Info,
v.TimeStamp.ToString() + ": " + v.Value.ToString());
}
return true;
}
VB
Public Function Initialize(ByVal aParameters() As String, ByVal aApplication As _
IApplication) As Boolean Implements IScript.Initialize
Dim values As ArcVariableState()
values = aApplication.GetVariableArcData("Pomiar1", Date.Today, Date.Now, _
"average", TimeSpan.FromMinutes(15))
If (values Is Nothing)
aApplication.ReportMessage(EvoMessageType.Error, "Read Error")
Else
For Each v As ArcVariableState In values
aApplication.ReportMessage(EvoMessageType.Error, _
v.TimeStamp.ToString() + ": " + v.Value.ToString())
Next v
End If
Return True
End Function
Wywołanie metody GetVariableArcData powoduje odczyt 15-minutowych wartości średnich z okresu od początku dnia do chwili bieżącej. Jeżeli odczyt zakończył się poprawnie, to do logu komunikatów zapisywane są wszystkie wartości archiwalne, które zostały zwrócone w tablicy elementów klasy ArcVariableState.
object GetVariableAttribute(string aVarName, string aAttributeName);
Function
GetVariableAttribute (ByVal aVarName As String, ByVal
aAttributeName As String) As Object
Funkcja zwraca definicję atrybutu o nazwie aAttributeName, dla zmiennej procesowej określonej parametrem aVarName.
String[] GetVariableNames(string aAttributeName, string aAttributeValue);
Function GetVariableNames(ByVal aAttributeName As String, ByVal aAttributeValue As String) As String()
Funkcja zwraca tablicę nazw wszystkich zmiennych, dla których atrybut o nazwie podanej w parametrze aAttributeName jest zgodny z wartością poodaną w parametrze aAttributeValue. W parametrze aAttributeValue można stosować znaki specjalne * i ?.
Przykład:
C#
sring[] n = aApplication.GetVariableNames("Channel", "K1");
VB
Dim n As String() = aApplication.GetVariableNames("Channel", "K1")
Powyższe wywołanie zwraca tablicę nazw wszystkich zmiennych z kanału komunikacyjnego o nazwie K1.
VariableState GetVariableValue(string aVariableName, bool aForceRead);
Function GetVariableValue(ByVal aVariableName As String, ByVal aForceRead As Boolean) As VariableState
Funkcja zwraca obiekt klasy VariableState z bieżąca wartością zmiennej o nazwie podanej w parametrze aVariableName. Wartość false parametru aForceRead oznacza, że zwrócona wartość pochodzi z ostatniego planowego odświeżenia wartości zmiennej. Wartość true powoduje bezpośredni odczyt aktualnej wartości zmiennej w chwili wykonania funkcji.
object GlobalProperty(string aPropertyName);
Function
GlobalProperty (ByVal aPropertyName As String) As
Object
Funkcja zwraca definicję właściwości globalnej aplikacji o nazwie określonej parametrem aPropertyName.
bool HasRole(string aRoleName);
Function
HasRole (ByVal aRoleName As String) As Boolean
Funkcja zwraca wartość logiczną, która określa, czy aktualnie zalogowany użytkownik pełni rolę o nazwie przekazanej w parametrze aRoleName.
bool LoginUser(string aUser, string aPassword);
Function LoginUser (ByVal aUser As String, , ByVal aPassword As Boolean) As Boolean
Funkcja powoduje zalogowanie użytkownika o identyfikatorze i haśle podanym w parametrach wywołania. Funkcja zwraca wartość true, gdy operacja zakończyła się poprawnie.
Funkcja LoginUser może być użyta w przypadku tworzenia własnych mechanizmów logowania użytkownika, także wykorzystujących mechanizmy sprzętowe.
DateTime OPCTime(string aOPCTimeString);
DateTime OPCTime(string aOPCTimeString, DateTime aBaseTime);
Function OPCTime(ByVal aOPCTimeString As String) As Date
Function OPCTime (ByVal aOPCTimeString As String, ByVal aBaseTime As Date) As Date
Funkcja zwraca chwilę czasu wyliczoną na podstawie czasu bazowego i przesunięcia określonego wyrażeniem formatującym OPC. Czas bazowy jest określony parametrem aBaseTime lub jest czasem aktualnym dla wywołania jednoargumentowego.
Przesunięcie przekazywane w parametrze aOPCTimeString opisane jest rozszerzonym wyrażeniem formatującym OPC postaci:
[NOW|SECOND|MINUTE|HOUR|DAY|WEEK|MONTH|YEAR][cykl[/przesunięcie]] [[+|-][liczba][Y|MO|W|D|H|M|S]...]
Pierwsza część wyrażenia określa początkowe przesunięcie, np. HOUR początek godziny. Klauzule cykl i przesunięcie pozwalają na implementacje cykli, np. HOUR8/6 pozwala na wyliczenie początku 8-godzinnej zmiany, gdzie pierwsza zmiana zaczyna się o godzinie 6. Końcowa część wyrażenia pozwala dodatkowo przesunąć czas, np. HOUR-15M , oznacza 15 minut przed początkiem godziny.
VariableState() ReadVariables(params string[] aVarNames);
Function ReadVariables(ByVal ParamArray aVarNames As String()) As VariableState()
Funkcja wykonuje grupowy odczyt wartości wielu zmiennych procesowych. Nazwy zmiennych podawane są tablicy przekazywanej w parametrze aVarNames. Funkcja zwraca tablicę obiektów klasy VariableState z bieżącymi wartościami zmiennych. Funkcja wykonuje rzeczywisty odczyt wartości zmiennych (w taki sam sposób jak metoda GetVariableValue z parametrem aForceRead ustawionym na true). Czas wykonania funkcji zależy od liczby zmiennych i stosowanych kanałów komunikacyjnych. Jest jednak z reguły znacznie krótszy niż dla wielokrotnego wywołania metody GetVariableValue.
IAlarmEventInfo RegisterAlarmDomainEvents(string aDomain, AlarmEvent aFunction, AlarmDomainEvents aEvent);
Function RegisterAlarmDomainEvents(ByVal aDomain As String, ByVal aFunction As AlarmEvent, ByVal aEvent As AlarmDomainEvents) As IAlarmEventInfo
Funkcja służy do zarejestrowania funkcji zwrotnej, która będzie wywoływana przy każdym zdarzeniu związanym ze zmianą stanu domeny. Parametr aEvent określa rodzaj zdarzeń, które należy monitorować. Typ wyliczeniowy AlarmDomainEvents przybiera następujące wartości: AlarmBegin (wykrycie początku alarmu), AlarmEnd (wykrycie końca alarmu), AlarmManagement (zmiana stanu wynikająca z działań operatora, np. potwierdzenia alarmu), DomainStart (uruchomienie pracy domeny), DomainStop (zatrzymanie pracy domeny), All (wszystkie typy zdarzeń). Możliwe jest łączenie typów zdarzeń operatorem sumy logicznej.
Parametr aFunction określa funkcję monitorującą stan alarmu - musi ona być zgodna z delegatem AlarmEvent.
delegate void AlarmEvent(string aDomain, string aAlarm, AlarmState aAlarmState, AlarmEventType aEventType);
Delegate Sub AlarmEvent(ByVal aDomain As String, ByVal aAlarm As String, ByVal aAlarmState As AlarmState ,ByVal aEventType As AlarmEventType).
W momencie wywołania funkcji monitorującej przekazywane są do niej trzy parametry. Parametry aDomain i aAlarm określają odpowiednio nazwę domeny i identyfikator alarmu, którego wywołanie funkcji zwrotnej dotyczy. Parametr aAlarmState przekazuje obiekt, z którego można odczytać aktualny stan alarmu. Parametr aEventType określa rodzaj zdarzenia. Typ wyliczeniowy AlarmEventType przybiera następujące wartości: AlarmBegin (wykrycie początku alarmu) , AlarmEnd (wykrycie końca alarmu), AlarmManagement (zmiana stanu wynikająca z działań operatora, np. potwierdzenia alarmu), DomainStart (uruchomienie pracy domeny), DomainStop (zatrzymanie pracy domeny).
Metoda RegisterAlarmDomainEvents zwraca obiekt interfejsu IAlarmEvcentInfo. Obiekt ten udostępnia jedną metodę UnregisterStateEvent. Służy ona do wyrejestrowania funkcji monitorującej.
Przykład:
C#
IAlarmEventInfo alarmInfo;
IApplication application;
public bool Initialize(string[] aParameters, IApplication aApplication)
{
application = aApplication;
alarmInfo = aApplication.RegisterAlarmDomainEvents("DemoB1", AlarmFun,
AlarmDomainEvents.AlarmBegin | AlarmDomainEvents.AlarmEnd);
return false;
}
public void FinalizeScript()
{
if (alarmInfo != null)
alarmInfo.UnregisterStateEvent();
}
void AlarmFun(string aDoamin,string aId, AlarmState aState, AlarmEventType aType)
{
if (aType == AlarmEventType.AlarmBegin)
application.ReportMessage(EvoMessageType.Info,
"Wykryty początek alarmu " + aId + ", czas detekcji " +
aState.BeginDetectionTimeStamp);
else if (aType == AlarmEventType.AlarmEnd)
application.ReportMessage(EvoMessageType.Info,
"Wykryty koniec alarmu " + aId + ", czas detekcji " +
aState.EndDetectionTimeStamp);
}
VB
Dim alarmInfo As IAlarmEventInfo
Dim application As IApplication
Public Function Initialize(ByVal aParameters() As String, ByVal aApplication _
As IApplication) As Boolean Implements IScript.Initialize
application = aApplication
alarmInfo = aApplication.RegisterAlarmDomainEvents("DemoB1", _
AddressOf AlarmFun, _
AlarmDomainEvents.AlarmBegin Or AlarmDomainEvents.AlarmEnd)
Return False
End Function
Public Sub FinalizeScript() Implements IScript.FinalizeScript
If Not alarmInfo Is Nothing
alarmInfo.UnregisterStateEvent()
End If
End Sub
Sub AlarmFun(aDomain As String, aId As String, aState As AlarmState, _
aType As AlarmEventType)
If aType = AlarmEventType.AlarmBegin
application.ReportMessage(EvoMessageType.Info, _
"Wykryty początek alarmu " + aId + ", czas detekcji " + _
aState.BeginDetectionTimeStamp)
Else If aType = AlarmEventType.AlarmEnd
application.ReportMessage(EvoMessageType.Info, _
"Wykryty koniec alarmu " + aId + ", czas detekcji " + _
aState.EndDetectionTimeStamp)
End If
End Sub
Powyższy kod rejestruje funkcję monitorującą w domenie DemoB1 dla zdarzeń początków i końców alarmów. Funkcja monitorująca zapisuje w logu komunikatów informację o każdym rozpoczętym i zakończonym alarmie.
IEventInfo RegisterAppDataEvent(SimpleEvent aFunction);
Function RegisterAppDataEvent(ByVal aFunction As SimpleEvent) As IEventInfo
Funkcja służy do zarejestrowania funkcji zwrotnej, która będzie wywoływana przy każdym zdarzeniu związanym ze zmianą wartości którejś z danych aplikacyjnych (AppData).
Parametr aFunction określa funkcję monitorującą stan danych aplikacyjnych - musi ona być zgodna z delegatem AppDataEvent:
delegate void AppDataEvent(string aAppDataId);
Delegate Sub AppDataEvent(ByVal aAppDataId As String)
IEventInfo RegisterTimeEvent(SimpleEvent aFunction, TimeSpan aPeriod, TimeSpan aAlign);
Function RegisterTimeEvent(ByVal aFunction As SimpleEvent, ByVal aPeriod As System.TimeSpan, ByVal aAlign As System.TimeSpan) As IEventInfo
Funkcja służy do zarejestrowania funkcji zwrotnej, która będzie cyklicznie wywoływana w określonych odstępach czasu. Parametr aFunction określa funkcję, która będzie wykonywana okresowo - musi ona być zgodna z delegatem SimpleEvent.
delegate void SimpleEvent();
Delegate Sub SimpleEvent()
Parametr aPeriod określa okres czasu z jakim funkcja zwrotna będzie wykonywana. Parametr aAlign określa wyrównanie czasu uruchomienia względem początku doby. Jeżeli parametr jest mniejszy niż zero (np. TimeSpan.FromSeconds(-1) ), to wyrównanie nie jest wykonywane. Jeżeli aAlign jest równy zero, to funkcja zwrotna będzie wywoływana co okres aPeriod, zaczynając od godziny 00:00. Jeżeli aAlign jest większy niż zero, to funkcja zwrotna będzie wywoływana co okres aPeriod, zaczynając od godziny 00:00 + aAlign.
Funkcja RegisterTimeEvent zwraca wartość, którą można użyć do wyrejestrowania funkcji zwrotnej przy pomocy metody UnregisterEvent.
Przykład:
C#
void CallbackFun()
{
//
// kod funkcji zwrotnej
//
}
public bool Initialize(string[] aParameters, IApplication aApplication)
{
aApplication.RegisterTimeEvent(CallbackFun, TimeSpan.FromHours(1),
TimeSpan.FromMinutes(15));
return false;
}
VB
Sub CallbackFun()
'
' kod funkcji zwrotnej
'
End Sub
Public Function Initialize(ByVal aParameters() As String, ByVal aApplication As _
IApplication) As Boolean Implements IScript.Initialize
aApplication.RegisterTimeEvent(AddressOf CallbackFun, TimeSpan.FromHours(1),_
TimeSpan.FromMinutes(15))
Return False
End Function
Funkcja zwrotna CallbackFun będzie wykonywana co godzinę z przesunięciem 15 minut, czyli o godzinach 0:15, 1:15, 2:15 itd.
void ReportMessage(EvoMessageType aType, string aText);
Sub ReportMessage (ByVal aType As EvoMessageType, ByVal aText As String)
Funkcja zapisuje w aplikacyjnym logu komunikat o treści podanej w parametrze aText. Parametr aType określa ważność komunikatu. Wyliczeniowy typ EvoMessageType przyjmuje następujące wartości: Exception, Error, Warning, Info, Trace. Komunikaty typu Trace nie są wyświetlane w okienku komunikatów, są jedynie zapisywane w pliku logu.
Poziom raportowania pracy skryptu w logu komunikatów jest w gestii projektanta skryptu. Należy jednak pamiętać o dokładnym raportowaniu wszystkich błędów, które wystąpiły w trakcie pracy. Dotyczy to szczególnie skryptów rezydentnych.
void RestartScript();
Sub RestartScript()
Metoda pozwala na wykonanie pełnego restart skryptu. Należy stosować wtedy, gdy własny kod kontrolny skryptu stwierdzi jego nieprawidłowe działanie wymagające restartu. Niezależnie od tego mechanizmu, w przypadku niekontrolowanego upadku skrytpu, możliwy jest jego automatyczny restart (jeżeli została ustawiona właściwość RestartIfFailed interfejsu IScriptSettings).
void SetAppData(string aId);
Sub SetAppData (ByVal aId As String, ByVal aData As Object)
Funkcja ustawia lub zmienia wartość wskazanej danej aplikacyjnej.
Przykład 1:
public bool Initialize(string[] aParameters, IApplication aApplication)
{
aApplication.SetAppData("Number_1", 12);
return true;
}
Przykład 2:
public bool Initialize(string[] aParameters, IApplication aApplication)
{
DataTable dt = new DataTable();
dt.Columns.Add("X", typeof(double));
dt.Columns.Add("Y", typeof(double));
dt.Columns.Add("Label", typeof(string));
dt.Columns.Add("Color", typeof(string));
for(int i = 0; i < 10; i++)
{
Color c = Color.FromArgb(mRnd.Next(255), mRnd.Next(255), mRnd.Next(255));
dt.Rows.Add(i, mRnd.Next(100), "L" + mRnd.Next(100), Askom.Ascent.StringHelper.ColorToHex(c) );
}
mApplication.SetAppData("DataTable_1", dt);
}
void SetReturnValue(object aData);
Sub SetReturnValue (ByVal aData As Object)
Funkcja ustawia przekazany argument aData jako wartość zwracaną przez skrypt.
Przykład:
Ponizszy skrypt zwraca jako wynik wartość liczbową odczytaną z pliku tekstowego o nazwie przekazanej jako pierwszy parametr z wiersza o numerze przekazanym jako drugi argument.
public bool Initialize(string[] aParameters, IApplication aApplication)
{
try
{
// Nazwa pliku przekazana jako pierwszy parametr. Plik znajduje sie w katalogu głównym aplikacji
string path = Path.Combine(aApplication.ApplicationDirectory, aParameters[0]);
// Numer wiersza przekazany jako drugi argument
int lineNo = int.Parse(aParameters[1]);
//Odczyt linii pliku tekstowego
var lines = File.ReadLines(path);
if(lines != null)
{
//Szukamy wiersza o zadanym numerze
int i = 0;
foreach(string line in lines)
{
if(i == lineNo)
{
//Znaleziono wiersz - zwracamy jego wartość jako liczbę zmiennoprzecinkową
double dv = double.Parse(line);
aApplication.SetReturnValue(dv);
return true;
}
i++;
}
}
aApplication.ReportMessage(EvoMessageType.Error,
string.Format("W pliku {0} nie odnaleziono wiersza o numerze {1}.", aParameters[0], aParameters[1]));
}
catch (Exception ex)
{
aApplication.ReportMessage(EvoMessageType.Error, ex.Message);
}
return true;
}
Zobacz też: Funkcja ScriptValue
bool SetVariableBits(string aVariableName, long aValue, long aMask);
bool SetVariableBits(string aVariableName, long aValue, long aMask, StatusOpc aStatus);
bool SetVariableBits(string aVariableName, long aValue, long aMask, StatusOpc aStatus, DateTime aTimeStamp);
Function SetVariableBits(ByVal aVariableName As String, ByVal aValue As Long, ByVal aMask As Long) As Boolean
Function SetVariableBits(ByVal aVariableName As String, ByVal aValue As Long, ByVal aMask As Long, ByVal aStatus As Askom.Ascent.StatusOpc) As Boolean
Function SetVariableBits(ByVal aVariableName As String, ByVal aValue As Long, ByVal aMask As Long, ByVal aStatus As Askom.Ascent.StatusOpc, ByVal aTimeStamp As Date) As Boolean
Funkcja powoduje wysterowanie zmiennej procesowej o nazwie podanej w parametrze aVariableName na wartość podaną w parametrze aValue z dodatkowym maskowaniem zmienianych bitów przez parametr aMask. W pierwszej fazie wykonania odczytywana jest bieżąca wartość zmiennej, a następnie bity, którym w masce aMask odpowiada wartość 1, zmieniane są zgodnie z wartościami w parametrze aValue.
Wersja wywołania z parametrem aStatus dodatkowo ustawia nowy status zmiennej. Wersje bez parametru aStatus ustawiają zawsze status na StatusOpc.Good.
Wersja wywołania z parametrem aTimeStamp dodatkowo ustawia nowy stempel czasu zmiennej. Wersje bez parametru aTimeStamp ustawiają zawsze stempel czasu i na chwilę wykonania funkcji.
Funkcja zwraca wartość false w przypadku niepowodzenia. Ponieważ funkcja wykonywana jest w sposób asynchroniczny, to test poprawności dotyczy tylko spełnienia warunków wstępnych. W przypadku błędu komunikacji zostanie on zgłoszony w panelu komunikatów.
bool SetVariables(string[] aVarNames, object[] aValues);
bool SetVariables(string[] aVarNames, object[] aValues, StatusOpc aStatus);
bool SetVariables(string[] aVarNames, object[] aValues, StatusOpc aStatus, DateTime aTimeStamp );
Function SetVariables(ByVal aVarNames As String(), ByVal aValues As Object()) As Boolean
Function SetVariables(ByVal aVarNames As String(), ByVal aValues As Object(), ByVal aStatus As Askom.Ascent.StatusOpc) As Boolean
Function SetVariables(ByVal aVarNames As String(), ByVal aValues As Object(), ByVal aStatus As Askom.Ascent.StatusOpc,ByVal aTimeStamp As Date) As Boolean
Funkcja powoduje wysterowanie zmiennych procesowej o nazwach podanych w tablicy aVarNames na wartości podane w tablicy aValues. Rozmiary tablic nazw i wartości muszą być identyczne. Czas wykonania sterowań przez funkcję SetVariables jest z reguły krótszy niż wykonanie kilku wywołań metody SetVariableValue.
Wersja wywołania z parametrem aStatus dodatkowo ustawia nowy status zmiennych. Wersje bez parametru aStatus ustawiają zawsze status na StatusOpc.Good.
Wersja wywołania z parametrem aTimeStamp dodatkowo ustawia nowy stempel czasu zmiennych. Wersje bez parametru aTimeStamp ustawiają zawsze stempel czasu i na chwilę wykonania funkcji.
Możłiwość ustawienia czasu i statusu zależy od typu kanału, do którego zmienna należy. W szczególności, tej funkcjonalności nie mają zazwyczaj kanały fizyczne.
Funkcja zwraca wartość false w przypadku niepowodzenia. Ponieważ funkcja wykonywana jest w sposób asynchroniczny, to test poprawności dotyczy tylko spełnienia warunków wstępnych. W przypadku błędu komunikacji zostanie on zgłoszony w panelu komunikatów.
IVariableControlState[] SetVariablesSync(string[] aVarNames, object[] aValues);
IVariableControlState[]SetVariablesSync(string[] aVarNames, object[] aValues, StatusOpc aStatus);
IVariableControlState[]SetVariablesSync(string[] aVarNames, object[] aValues, StatusOpc aStatus, DateTime aTimeStamp );
Function SetVariablesSync(ByVal aVarNames As String(), ByVal aValues As Object()) As IVariableControlState()
Function SetVariablesSync(ByVal aVarNames As String(), ByVal aValues As Object(), ByVal aStatus As Askom.Ascent.StatusOpc) As IVariableControlState()
Function SetVariablesSync(ByVal aVarNames As String(), ByVal aValues As Object(), ByVal aStatus As Askom.Ascent.StatusOpc, ByVal aTimeStamp As Date) As IVariableControlState()
Funkcja służy do grupowego sterownia wartościami zmiennych z kontrolą rzeczywistego wykonania wszystkich sterowań. Poza tym działa identycznie jak metoda SetVariables.
Funkcja powoduje wysterowanie zmiennych procesowej o nazwach podanych w tablicy aVarNames na wartości podane w tablicy aValues. Rozmiary tablic nazw i wartości muszą być identyczne. Czas wykonania sterowań przez funkcję SetVariables jest z reguły krótszy niż wykonanie kilku wywołań metody SetVariableValue.
Wersja wywołania z parametrem aStatus dodatkowo ustawia nowy status zmiennych. Wersje bez parametru aStatus ustawiają zawsze status na StatusOpc.Good.
Wersja wywołania z parametrem aTimeStamp dodatkowo ustawia nowy stempel czasu zmiennych. Wersje bez parametru aTimeStamp ustawiają zawsze stempel czasu i na chwilę wykonania funkcji.
Możłiwość ustawienia czasu i statusu zależy od typu kanału, do którego zmienna należy. W szczególności, tej funkcjonalności nie mają zazwyczaj kanały fizyczne.
Funkcja zwraca referencje do obiektu klasy IVariableControlState. Obiekt ten może służyć do kontroli procesu wykonania operacji.
Przykład:
C#
string[] varNames = new string[]{"var1","var2"};
object[] varVals = new object[]{101,102};
IVariableControlState[] rs = aApplication.SetVariablesSync(varNames, varVals);
bool allFinished = false;
while (!allFinished)
{
aApplication.Sleep(TimeSpan.FromMilliseconds(100)); // or do something
allFinished = true;
foreach(IVariableControlState s in rs)
{
if (s.ControlStatus == VariableControlStatus.Pending)
{
allFinished = false;
break;
}
}
}
foreach(IVariableControlState s in rs)
{
if (s.ControlStatus == VariableControlStatus.Error)
aApplication.ReportMessage(EvoMessageType.Error,
"Write failed: " + s.ErrorMsg);
}
VB
Dim varNames As String() = {"var1","var2"}
Dim varVals As Object() = {101,102}
Dim s As IVariableControlState
Dim rs As IVariableControlState() = aApplication.SetVariablesSync(varNames, varVals)
Dim allFinished As Boolean = False
While Not allFinished
aApplication.Sleep(TimeSpan.FromMilliseconds(100)) ' or do something
allFinished = True
For Each s In rs
If s.ControlStatus = VariableControlStatus.Pending Then
allFinished = False
Exit For
End If
Next
End While
For Each s In rs
If s.ControlStatus = VariableControlStatus.Error Then
aApplication.ReportMessage(EvoMessageType.Error, "Write failed: " + _
s.ErrorMsg)
End If
Next
bool SetVariableValue(string aVariableName, object aValue);
bool SetVariableValue(string aVariableName, object aValue, StatusOpc aStatus);
bool SetVariableValue(string aVariableName, object aValue, StatusOpc aStatus, DateTime aTimeStamp );
Function SetVariableValue(ByVal aVariableName As String, ByVal aValue As Object) As Boolean
Function SetVariableValue(ByVal aVariableName As String, ByVal aValue As Object, ByVal aStatus As Askom.Ascent.StatusOpc) As Boolean
Function SetVariableValue(ByVal aVariableName As String, ByVal aValue As Object, ByVal aStatus As Askom.Ascent.StatusOpc, ByVal aTimeStamp As Date) As Boolean
Funkcja powoduje wysterowanie zmiennej procesowej o nazwie podanej w parametrze aVariableName na wartość podaną w parametrze AValue.
Wersja wywołania z parametrem aStatus dodatkowo ustawia nowy status zmiennej. Wersje bez parametru aStatus ustawiają zawsze status na StatusOpc.Good.
Wersja wywołania z parametrem aTimeStamp dodatkowo ustawia nowy stempel czasu zmiennej. Wersje bez parametru aTimeStamp ustawiają zawsze stempel czasu i na chwilę wykonania funkcji.
Możliwość ustawienia czasu i statusu zależy od typu kanału, do którego zmienna należy. W szczególności, tej funkcjonalności nie mają zazwyczaj kanały fizyczne.
Funkcja zwraca wartość false w przypadku niepowodzenia. Ponieważ funkcja wykonywana jest w sposób asynchroniczny, to test poprawności dotyczy tylko spełnienia warunków wstępnych. W przypadku błędu komunikacji zostanie on zgłoszony w panelu komunikatów.
void Sleep(TimeSpan aTimeSpan);
Sub Sleep (ByVal aTimeSpan As System.TimeSpan)
Funkcja zawiesza działanie bieżącego wątku skryptu na okres czasu podany w parametrze aTimeSpan. Funkcję należy stosować wszędzie tam, gdzie wymagane jest odczekanie na zajście jakiegoś zdarzenia lub upłynięcie określonego odcinka czasu. W żadnym przypadku nie należy stosować aktywnej pętli testującej warunki - prowadzi to do nadmiernego obciążenia procesora).
Przykład:
C#
aApplication.Sleep(TimeSpan.FromSeconds(5));
VB
aApplication.Sleep(TimeSpan.FromSeconds(5))
Wywołanie zawiesza działania skryptu na 5 sekund.
void TerminateScript(bool aWithFinalize);
Sub TerminateScript (ByVal aWithFinalize As Boolean)
Wywołanie funkcji powoduje zakończenie pracy skryptu. Parametr aWithFinalize określa, czy w trakcie procesu rozładowania skryptu należy wykonać metodę Finalize skryptu.
Funkcja TerminateScript jest używana tylko w szczególnych przypadkach. Skrypty interakcyjne (jednorazowe) zazwyczaj kończone są przez wyjście z funkcji Initialize z wartością zwracaną true. Skrypty rezydentne są kończone automatycznie w momencie końca pracy aplikacji.
bool ToggleBits(string aVariableName, long aMask);
bool SetVariableToggleBits(string aVariableName, long aMask, StatusOpc aStatus);
bool ToggleBits(string aVariableName, long aMask, StatusOpc aStatus, DateTime aTimeStamp);
Function ToggleBits(ByVal aVariableName As String, ByVal aMask As Long) As Boolean
Function ToggleBits(ByVal aVariableName As String, ByVal aMask As Long, ByVal aStatus As Askom.Ascent.StatusOpc) As Boolean
Function ToggleBits(ByVal aVariableName As String, ByVal aMask As Long, ByVal aStatus As Askom.Ascent.StatusOpc, ByVal aTimeStamp As Date) As Boolean
Funkcja powoduje zmianę wartości wybranych bitów zmiennej procesowej o nazwie podanej w parametrze aVariableName na ich wartość przeciwną. W pierwszej fazie wykonania odczytywana jest bieżąca wartość zmiennej, a następnie bity, którym w parametrze aMask odpowiada wartość 1, zmieniane są na wartość przeciwną. Pozostałe bity zmiennej pozostają bez zmiany.
Wersja wywołania z parametrem aStatus dodatkowo ustawia nowy status zmiennej. Wersje bez parametru aStatus ustawiają zawsze status na StatusOpc.Good.
Wersja wywołania z parametrem aTimeStamp dodatkowo ustawia nowy stempel czasu zmiennej. Wersje bez parametru aTimeStamp ustawiają zawsze stempel czasu i na chwilę wykonania funkcji.
Funkcja zwraca wartość false w przypadku niepowodzenia. Ponieważ funkcja wykonywana jest w sposób asynchroniczny, to test poprawności dotyczy tylko spełnienia warunków wstępnych. W przypadku błędu komunikacji zostanie on zgłoszony w panelu komunikatów.
void UnregisterEvent(IEventInfo aCallbackInfo);
Sub UnregisterEvent(ByVal aCallbackInfo As IEventInfo)
Wyrejestrowanie funkcji uruchamianej czasowo, która została wcześniej zarejestrowana przy pomocy funkcji RegisterTimeEvent. Jako parametr aCallbackInfo należy przekazać wartość zwróconą w momencie rejestrowania funkcji.
IArcWriteSeriesResult WriteArcSeries(string aVarName, ArcSeriesSample[] aSamples, WriteSeriesFlags aFlags, ByVal Char aArcType=”*”);
Function WriteArcSeries(ByVal aVarName As String, ByVal aSamples As ArcSeriesSample(), ByVal aFlags As WriteSeriesFlags, Optional ByVal aArcType As String = ”*”) As IArcWriteSeriesResult
Metoda zapisuje bezpośrednio serię danych aSamples do archiwum danego typu aArcType wskazanej zmiennej aVarName. Typ archiwum moze być podany jako: B (bazodanowe),D (dzienne),Y (roczne),M (miesieczne),X (bazodanowe X) lub * (dowolne). Maksymalnie można zapisać jednorazowo 1000 próbek.