FTOptix 1.7.0.804, API среды выполнения C#, VariableChangeC#

Место общения программистов C#
Ответить
Anonymous
 FTOptix 1.7.0.804, API среды выполнения C#, VariableChange

Сообщение Anonymous »

Я пытаюсь реализовать обработчик событий VariableChange для цифрового ввода-вывода, чтобы можно было управлять изменениями ввода-вывода в моем коде:

Код: Выделить всё

//------------------------------------------------------------------------------
//File:    clsLiveIO.cs
//Author:  Simon Platten
//Purpose: Updates controls with live I/O data
//History:
// 2026/03/02 Created
//------------------------------------------------------------------------------
#region Using directives
using System.Threading;
using UAManagedCore;
using FTOptix.NetLogic;
using System;
using FTOptix.RAEtherNetIP;
#endregion

public class clsLiveIO : BaseNetLogic {
//Alias
const string mcstrAliasModule = "aModule";
//Point / Label prefix
const string mcstrPrefixPt = "Pt";
//Path to I/O point description
const string mcstrPtMarker = "##";
IUAVariable[] maryiuavIO = null;
/// 
/// Event handler for when variable value changes.
/// 
/// 
/// 
/// 
private void OnChange(object sender, VariableChangeEventArgs e) {
try {
Tag tTag = sender as Tag;
if (tTag == null || tTag.Owner == null) {
throw new Exception($"tTag is null or has no owner");
}
TagStructure tsTag = tTag.Owner as TagStructure;
if (tsTag == null) {
throw new Exception($"tsTag is null");
}
string strPt = tsTag.BrowseName.Substring(mcstrPrefixPt.Length);
Log.Info($"clsLiveIO OnChange I/O Pt[{strPt}]");
Log.Info($"clsLiveIO OnChange tsTag.Value: {tsTag.Value}");
if (tsTag.Value == null || tsTag.Value.Value == null) {
throw new Exception($"clsLiveIO Value is null");
}
UAValue uaValue = tsTag.Value;
string strValue = uaValue.ToString();
Log.Info($"clsLiveIO OnChange {tsTag.BrowseName} value {strValue}");
} catch (Exception ex) {
Log.Error($"clsLiveIO.cs OnChange() exception: {ex.Message}!");
}
}
/// 
/// Called when runtime logic is started.
/// 
public override void Start() {
//Thread.Sleep(5000);
Log.Info("clsLiveIO.cs Start()...");
try {
IUANode iuanModule = Owner.GetAlias(mcstrAliasModule);
if (iuanModule == null) {
throw new Exception($"Cannot find alias \"{mcstrAliasModule}\"");
}
maryiuavIO = new IUAVariable[iuanModule.Children.Count];
uint uintRow = 0;
do {
string strPtData = $"Pt{uintRow:D2}/Data";
maryiuavIO[uintRow] = iuanModule.Get(strPtData) as IUAVariable;
if (maryiuavIO[uintRow] != null) {
Tag tIO = maryiuavIO[uintRow] as Tag;
bool blnValue = Convert.ToBoolean(maryiuavIO[uintRow].Value.Value);
Log.Info($"clsLiveIO.cs adding VariableChange handler for I/O Pt[{uintRow}]: {blnValue}...");
tIO.VariableChange += OnChange;
OnChange(tIO, null);
}
} while (++uintRow < maryiuavIO.Length);
} catch (Exception ex) {
Log.Error($"clsLiveIO.cs Start() exception: {ex.Message}!");
}
Log.Info("clsLiveIO.cs Start() completed...");
}
public override void Stop() {
// Insert code to be executed when the user-defined logic is stopped
}
}
У меня на дисплее есть переменная под названием «aModule», она содержит «Local:1:I», которая представляет собой модуль цифрового ввода (5059-IB16F/A).
Помимо начальных вызовов, когда я вызываю OnChange из функции Start, я не вижу никаких событий изменения, и у меня постоянно включается и выключается первый цифровой вход.
Вышеупомянутое построено с использованием MSVC 2022 Professional никаких предупреждений или ошибок ни во время компиляции, ни во время выполнения не возникает.
После начальных стартовых сообщений последующие события изменений не фиксируются.

Подробнее здесь: https://stackoverflow.com/questions/799 ... ablechange
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»