docs(alarms): note operator/IDE toggle drives the live subtag smoke test
C6a: the rig's TestAlarm attributes are object-driven; a flip script OR a manual operator/IDE toggle drives them (confirmed live 2026-06-14). Update the how-to-run comments and Skip reason accordingly.
This commit is contained in:
@@ -16,9 +16,12 @@
|
|||||||
// 1. On the dev rig with AVEVA System Platform installed and Galaxy running:
|
// 1. On the dev rig with AVEVA System Platform installed and Galaxy running:
|
||||||
// $env:MXGATEWAY_RUN_LIVE_MXACCESS_TESTS = "1"
|
// $env:MXGATEWAY_RUN_LIVE_MXACCESS_TESTS = "1"
|
||||||
// 2. Remove (or set to null) the Skip parameter on the [Fact] below.
|
// 2. Remove (or set to null) the Skip parameter on the [Fact] below.
|
||||||
// 3. Run with an alarm flip script (same one used by AlarmsLiveSmokeTests)
|
// 3. Drive a TestMachine alarm so its Active/Acked subtags toggle — either an
|
||||||
// so that TestMachine_001.TestAlarm001 toggles its Active/Acked subtags
|
// alarm flip script (same one used by AlarmsLiveSmokeTests, ~10 s cadence)
|
||||||
// on a ~10 s cadence.
|
// or a manual operator/IDE toggle of the alarm attribute. The rig's
|
||||||
|
// TestAlarm attributes are object-driven, so an external MXAccess Write
|
||||||
|
// cannot toggle them (confirmed live 2026-06-14 by toggling TestAlarm002
|
||||||
|
// from the IDE).
|
||||||
//
|
//
|
||||||
// net48/x86 constraints:
|
// net48/x86 constraints:
|
||||||
// - No init-only properties, records, index/range operators, C# 8+ pattern
|
// - No init-only properties, records, index/range operators, C# 8+ pattern
|
||||||
@@ -49,8 +52,9 @@ namespace ZB.MOM.WW.MxGateway.Worker.Tests.Probes;
|
|||||||
/// <see cref="SubtagAlarmConsumer.AcknowledgeByName"/> writes the
|
/// <see cref="SubtagAlarmConsumer.AcknowledgeByName"/> writes the
|
||||||
/// ack-comment subtag (AckMsg) successfully.
|
/// ack-comment subtag (AckMsg) successfully.
|
||||||
///
|
///
|
||||||
/// Skip-gated; flip <c>Skip=null</c> on the dev rig with the alarm flip
|
/// Skip-gated; flip <c>Skip=null</c> on the dev rig with an alarm being
|
||||||
/// script running. The remaining live-validation item is confirming that
|
/// driven (flip script or a manual operator/IDE toggle of the alarm
|
||||||
|
/// attribute). The remaining live-validation item is confirming that
|
||||||
/// the runtime MXAccess item reference path requires no intermediate
|
/// the runtime MXAccess item reference path requires no intermediate
|
||||||
/// alarm-condition segment (i.e. <c><Object>.<AlarmAttr>.InAlarm</c>
|
/// alarm-condition segment (i.e. <c><Object>.<AlarmAttr>.InAlarm</c>
|
||||||
/// resolves as-is).
|
/// resolves as-is).
|
||||||
@@ -117,7 +121,7 @@ public sealed class AlarmSubtagLiveSmokeTests
|
|||||||
/// the Degraded flag and synthetic GUID are stamped, then
|
/// the Degraded flag and synthetic GUID are stamped, then
|
||||||
/// AcknowledgeByName and verifies the ack-comment write returns 0.
|
/// AcknowledgeByName and verifies the ack-comment write returns 0.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Fact(Skip = "Live dev-rig smoke test — flip Skip=null with AVEVA + an alarm flip script running. Subtag fallback path. Field names confirmed (InAlarm/Acked/AckMsg/Priority); live-validate runtime path resolves without intermediate alarm-condition segment.")]
|
[Fact(Skip = "Live dev-rig smoke test — flip Skip=null with AVEVA + an alarm being driven (flip script or manual operator/IDE toggle of the alarm attribute). Subtag fallback path. Field names confirmed (InAlarm/Acked/AckMsg/Priority); live-validate runtime path resolves without intermediate alarm-condition segment.")]
|
||||||
public void SubtagFallback_FullPipelineRoundTrip_SynthesizesRaiseAndAcknowledges()
|
public void SubtagFallback_FullPipelineRoundTrip_SynthesizesRaiseAndAcknowledges()
|
||||||
{
|
{
|
||||||
Exception? threadException = null;
|
Exception? threadException = null;
|
||||||
@@ -342,9 +346,10 @@ public sealed class AlarmSubtagLiveSmokeTests
|
|||||||
consumer.Subscribe(subscriptionExpression);
|
consumer.Subscribe(subscriptionExpression);
|
||||||
Log("Subscribe returned OK.");
|
Log("Subscribe returned OK.");
|
||||||
|
|
||||||
// 1. Wait for a Raise transition. The alarm flip script (same one
|
// 1. Wait for a Raise transition. Whatever is driving the alarm — a
|
||||||
// used by AlarmsLiveSmokeTests) writes the active subtag on a
|
// flip script (same one used by AlarmsLiveSmokeTests, ~10 s cadence)
|
||||||
// ~10 s cadence. LmxSubtagAlarmSource delivers OnDataChange via
|
// or a manual operator/IDE toggle — writes the active subtag.
|
||||||
|
// LmxSubtagAlarmSource delivers OnDataChange via
|
||||||
// the Windows message pump on the STA, so we must pump messages
|
// the Windows message pump on the STA, so we must pump messages
|
||||||
// here while we wait — mirroring how AlarmsLiveSmokeTests drives
|
// here while we wait — mirroring how AlarmsLiveSmokeTests drives
|
||||||
// its WnWrapAlarmConsumer.PollOnce() from the STA in a tight loop.
|
// its WnWrapAlarmConsumer.PollOnce() from the STA in a tight loop.
|
||||||
|
|||||||
Reference in New Issue
Block a user