Skip to content

Condition

pyrung.core.condition

Condition classes for the immutable PLC engine.

Conditions are evaluated lazily at scan time against SystemState.

Condition

Bases: ABC

Base class for all conditions.

Conditions are pure functions: evaluate(state) -> bool. They read from state but never modify it.

Supports both direct evaluation via evaluate(state) and context-based evaluation via evaluate(ctx) for batched scans.

evaluate abstractmethod

evaluate(ctx: ScanContext) -> bool

Evaluate this condition against a ScanContext.

Uses context for read-after-write visibility within a scan.

CompareEq

Bases: Condition

Equality comparison: tag == value or tag == other_tag.

CompareNe

Bases: Condition

Inequality comparison: tag != value or tag != other_tag.

CompareLt

Bases: Condition

Less-than comparison: tag < value.

CompareLe

Bases: Condition

Less-than-or-equal comparison: tag <= value.

CompareGt

Bases: Condition

Greater-than comparison: tag > value.

CompareGe

Bases: Condition

Greater-than-or-equal comparison: tag >= value.

BitCondition

Bases: Condition

Normally open contact (XIC) - true when bit is on.

This is the default condition when a BOOL tag is used directly in a Rung.

IntTruthyCondition

Bases: Condition

INT truthiness contact - true when value is nonzero.

NormallyClosedCondition

Bases: Condition

Normally closed contact (XIO) - true when bit is off.

The inverse of BitCondition.

RisingEdgeCondition

Bases: Condition

Rising edge detection - true only on 0->1 transition.

Reads previous value from state.memory["_prev:{tag.name}"].

FallingEdgeCondition

Bases: Condition

Falling edge detection - true only on 1->0 transition.

Reads previous value from state.memory["_prev:{tag.name}"].

IndirectCompareEq

Bases: Condition

Equality comparison for IndirectRef: indirect_ref == value or indirect_ref == tag.

IndirectCompareNe

Bases: Condition

Inequality comparison for IndirectRef: indirect_ref != value or indirect_ref != tag.

IndirectCompareLt

Bases: Condition

Less-than comparison for IndirectRef: indirect_ref < value.

IndirectCompareLe

Bases: Condition

Less-than-or-equal comparison for IndirectRef: indirect_ref <= value.

IndirectCompareGt

Bases: Condition

Greater-than comparison for IndirectRef: indirect_ref > value.

IndirectCompareGe

Bases: Condition

Greater-than-or-equal comparison for IndirectRef: indirect_ref >= value.

AllCondition

Bases: Condition

AND condition - true when all sub-conditions are true.

Example

with Rung(all_of(Ready, AutoMode)): out(StartPermissive)

AnyCondition

Bases: Condition

OR condition - true when any sub-condition is true.

Example

with Rung(Step == 1, any_of(Start, oCmdStart)): out(Light)