I/O and Parameter Objects#

Discrete/analog I/O Point objects, the Group objects that bind them together, the Parameter/Parameter Group objects, and small single-purpose objects (DeviceNet, Register, Presence Sensing, Selection).

[ODVA CIP Vol 1] Wrappers for small, single-purpose CIP objects:

  • DeviceNet (class 0x03, §5-4),

  • Register (class 0x07, §5-8),

  • Presence Sensing (class 0x0E, §5-13), and

  • Selection (class 0x2E, §5-34).

class icspacket.proto.cip.objects.simple.DeviceNetObject(connection: CIP_Connection, instance: int = 1)[source]#

DeviceNet port configuration and status (See CIP Vol 1, §5-4).

Volume 1 only reserves this class code; the attribute set itself is defined in CIP Volume 3, DeviceNet Adaptation of CIP, so no typed attributes are declared here. Use get()/set() with the attribute IDs from that volume.

class icspacket.proto.cip.objects.simple.PresenceSensingObject(connection: CIP_Connection, instance: int = 1)[source]#

Senses the presence or absence of a real-world target (See CIP Vol 1, §5-13).

output: CIPAttribute[int]#

0 = switching element open, 1 = switching element closed (attribute 1).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported (attribute 2).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 3).

diagnostic: CIPAttribute[int]#

0 = good, 1 = fault (attribute 4).

on_delay: CIPAttribute[int]#

On delay in milliseconds, 0-65535 (attribute 5).

off_delay: CIPAttribute[int]#

Off delay in milliseconds, 0-65535 (attribute 6).

one_shot_delay: CIPAttribute[int]#

One-shot delay in milliseconds, 0-65535 (attribute 7).

operate_mode: CIPAttribute[int]#

0 = output attribute as specified, 1 = inversion of output attribute (attribute 8).

sensitivity: CIPAttribute[int]#

Detection amplification, 0 (lowest) - 255 (highest) (attribute 9).

target_margin: CIPAttribute[int]#

Signal strength above the switching threshold, 1-255 (attribute 10).

background_margin: CIPAttribute[int]#

Signal strength below the switching threshold, 0-100 (attribute 11).

min_detect_distance: CIPAttribute[int]#

Minimum detection distance in mm, 0-65535 (attribute 12).

max_detect_distance: CIPAttribute[int]#

Maximum detection distance in mm; shall be >= min_detect_distance (attribute 13).

detect_distance: CIPAttribute[int]#

Current detection distance in mm, 0-65535 (attribute 14).

class icspacket.proto.cip.objects.simple.RegisterObject(connection: CIP_Connection, instance: int = 1)[source]#

Addresses up to 64K bits of input/output register data (See CIP Vol 1, §5-8).

bad_flag: CIPAttribute[int]#

0 = good, 1 = bad (attribute 1).

direction: CIPAttribute[int]#

Direction of data transfer: 0 = Input Register, 1 = Output Register (attribute 2).

size: CIPAttribute[int]#

Size of the register data in bits (attribute 3).

data: CIPAttribute[bytes]#

Register data, LSB-aligned bit array (attribute 4).

class icspacket.proto.cip.objects.simple.SelectionObject(connection: CIP_Connection, instance: int = 1)[source]#

Manages the selection and distribution of data between objects (See CIP Vol 1, §5-34).

destination_list, source_list, and object_source_list (and the algorithm-dependent input_data_value/output_data_value) are exposed as raw bytes: they are lists of path-length-prefixed EPATHs (or, for input_data_value/output_data_value, a type that depends on whichever source/destination is currently selected) rather than a fixed schema.

state: CIPAttribute[int]#

Current state of this instance (attribute 1, See §5-34.4.1, Table 5-34.5).

max_destinations: CIPAttribute[int]#

Maximum number of destination indexes supported, 0 = none (attribute 2).

number_of_destinations: CIPAttribute[int]#

Number of entries in destination_list (attribute 3).

destination_list: CIPAttribute[bytes]#

List of {USINT path_length, EPATH} destination paths (attribute 4).

max_sources: CIPAttribute[int]#

Maximum number of source indexes supported, 0 = none (attribute 5).

number_of_sources: CIPAttribute[int]#

Number of entries in source_list (attribute 6).

source_list: CIPAttribute[Collection[int]]#

Consuming I/O Connection Instance IDs, one UINT per source (attribute 7).

source_used: CIPAttribute[int]#

Index into source_list of the source currently in use, 1-based (attribute 8).

source_alarm: CIPAttribute[Collection[int]]#

Per-source availability, one BOOL each: 0 = available, 1 = not available (attribute 9).

algorithm_type: CIPAttribute[int]#

Selection algorithm type; 0 if unsupported (attribute 10).

detection_count: CIPAttribute[int]#

Required when the algorithm type is supported, range 2-255 (attribute 11).

selection_period: CIPAttribute[int]#

Required when the algorithm type is supported, range 1-65535 ms (attribute 12).

object_source_list: CIPAttribute[bytes]#

List of {USINT path_length, EPATH} source paths (attribute 13).

destination_used: CIPAttribute[int]#

Index into destination_list currently in use, 1-based (attribute 14).

input_data_value: CIPAttribute[bytes]#

Copy of the currently selected source attribute’s data (attribute 15).

output_data_value: CIPAttribute[bytes]#

Copy of the currently selected destination attribute’s data (attribute 16).

start() bytes[source]#

Invoke the class-level Start service (See §5-34.2, Table 5-34.3).

stop() bytes[source]#

Invoke the class-level Stop service (See §5-34.2, Table 5-34.3).

reset() bytes[source]#

Invoke the class-level Reset service, clearing table entries (See §5-34.2, Table 5-34.3).

[ODVA CIP Vol 1] Wrappers for the objects that bind groups of other CIP objects together: Group (class 0x12, §5-16), Discrete Input Group (class 0x1D, §5-17), Discrete Output Group (class 0x1E, §5-18), Discrete Group (class 0x1F, §5-19), Analog Input Group (class 0x20, §5-20), Analog Output Group (class 0x21, §5-21), and Analog Group (class 0x22, §5-22).

class icspacket.proto.cip.objects.group.AnalogGroupObject(connection: CIP_Connection, instance: int = 1)[source]#

Binds a group of analog objects spanning more than one class (See CIP Vol 1, §5-22).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by the group (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

number_of_bound_instances: CIPAttribute[int]#

Number of points in a group (attribute 3).

binding: CIPAttribute[Collection[GroupBinding]]#

List of {class_id, instance_id} entries bound to this group (attribute 4).

status: CIPAttribute[int]#

0 = good, 1 = alarm state, for the whole group (attribute 5).

owner_vendor_id: CIPAttribute[int]#

Vendor ID of the group’s owner (attribute 6).

owner_serial_number: CIPAttribute[int]#

32-bit serial number of the group’s owner (attribute 7).

value_data_type: CIPAttribute[int]#

Shared wire type propagated to all bound objects’ Value: 0=INT (default), …, 9=LREAL (attribute 8).

class icspacket.proto.cip.objects.group.AnalogInputGroupObject(connection: CIP_Connection, instance: int = 1)[source]#

Binds a group of Analog Input Point objects (See CIP Vol 1, §5-20).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by the group (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

number_of_bound_instances: CIPAttribute[int]#

Number of points in a group (attribute 3).

binding: CIPAttribute[Collection[int]]#

Instance IDs of the Analog Input Points bound to this group (attribute 4).

status: CIPAttribute[int]#

0 = good, 1 = alarm state, for the whole group (attribute 5).

owner_vendor_id: CIPAttribute[int]#

Vendor ID of the group’s owner (attribute 6).

owner_serial_number: CIPAttribute[int]#

32-bit serial number of the group’s owner (attribute 7).

value_data_type: CIPAttribute[int]#

Shared AIP Value wire type: 0=INT (default), 1=REAL, 2=USINT, …, 9=LREAL (attribute 8).

temp_mode: CIPAttribute[int]#

Temperature scale for a temperature value: 0 = Celsius, 1 = Fahrenheit (attribute 10).

class icspacket.proto.cip.objects.group.AnalogOutputGroupObject(connection: CIP_Connection, instance: int = 1)[source]#

Binds a group of Analog Output Point objects (See CIP Vol 1, §5-21).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by the group (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

number_of_bound_instances: CIPAttribute[int]#

Number of bindings in the group (attribute 3).

binding: CIPAttribute[Collection[int]]#

Instance IDs of the Analog Output Points bound to this group (attribute 4).

status: CIPAttribute[int]#

0 = good, 1 = alarm state, for the whole group (attribute 5).

owner_vendor_id: CIPAttribute[int]#

Vendor ID of the group’s owner (attribute 6).

owner_serial_number: CIPAttribute[int]#

32-bit serial number of the group’s owner (attribute 7).

value_data_type: CIPAttribute[int]#

Shared wire type for any bound Value/fault_value/idle_value: 0=INT (default), …, 9=LREAL (attribute 8).

command: CIPAttribute[int]#

Changes state of bound AOPs: 0 = idle, 1 = run (attribute 9, required).

fault_action: CIPAttribute[int]#

Output value to go to on fault: 0=use fault_value, 1=hold last state (default), 2=low limit, 3=high limit (attribute 10).

fault_value: CIPAttribute[bytes]#

Shared fault value; wire type selected by value_data_type, required if fault_action is implemented (attribute 11).

idle_action: CIPAttribute[int]#

Output value to go to on idle: 0=use idle_value, 1=hold last state (default), 2=low limit, 3=high limit (attribute 12).

idle_value: CIPAttribute[bytes]#

Shared idle value; wire type selected by value_data_type, required if idle_action is implemented (attribute 13).

read_fault_value() object[source]#

Read and decode fault_value according to the current value_data_type.

write_fault_value(value: object, *, instance: int | None = None) bytes[source]#

Encode and write fault_value according to the current value_data_type.

read_idle_value() object[source]#

Read and decode idle_value according to the current value_data_type.

write_idle_value(value: object, *, instance: int | None = None) bytes[source]#

Encode and write idle_value according to the current value_data_type.

class icspacket.proto.cip.objects.group.DiscreteGroupObject(connection: CIP_Connection, instance: int = 1)[source]#

Binds a group of discrete objects spanning more than one class (See CIP Vol 1, §5-19).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by the group (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

number_of_bound_instances: CIPAttribute[int]#

Number of points in this group (attribute 3).

binding: CIPAttribute[Collection[GroupBinding]]#

List of {class_id, instance_id} entries bound to this group (attribute 4).

status: CIPAttribute[int]#

0 = good, 1 = alarm state, for the whole group (attribute 5).

class icspacket.proto.cip.objects.group.DiscreteInputGroupObject(connection: CIP_Connection, instance: int = 1)[source]#

Binds a group of Discrete Input Point objects (See CIP Vol 1, §5-17).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by the device (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

number_of_bound_instances: CIPAttribute[int]#

Number of points bound to this group (attribute 3).

binding: CIPAttribute[Collection[int]]#

Instance IDs of the Discrete Input Points bound to this group (attribute 4).

status: CIPAttribute[int]#

0 = OK, 1 = product-specific alarm or status, for all bound points (attribute 5).

off_on_delay: CIPAttribute[int]#

Shared filter time in microseconds for an off-to-on transition, default 0 (attribute 6).

on_off_delay: CIPAttribute[int]#

Shared filter time in microseconds for an on-to-off transition, default 0 (attribute 7).

class icspacket.proto.cip.objects.group.DiscreteOutputGroupObject(connection: CIP_Connection, instance: int = 1)[source]#

Binds a group of Discrete Output Point objects (See CIP Vol 1, §5-18).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by the device (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

number_of_bound_instances: CIPAttribute[int]#

Number of points bound to this group (attribute 3).

binding: CIPAttribute[Collection[int]]#

Instance IDs of the Discrete Output Points bound to this group (attribute 4).

status: CIPAttribute[int]#

0 = OK, 1 = product-specific alarm or status, for all bound points (attribute 5).

command: CIPAttribute[int]#

Changes state of all bound DOPs: 0 = idle, 1 = run (attribute 6, required).

fault_action: CIPAttribute[int]#

Shared state after a recoverable failure: 0 = use fault_value, 1 = hold last state (attribute 7).

fault_value: CIPAttribute[int]#

Shared user-defined value for use with fault_action (attribute 8).

idle_action: CIPAttribute[int]#

Shared state while idle: 0 = use idle_value, 1 = hold last state (attribute 9).

idle_value: CIPAttribute[int]#

Shared user-defined value for use with idle_action (attribute 10).

class icspacket.proto.cip.objects.group.GroupBinding(class_id: int, instance_id: int)[source]#

One {Class ID, Instance ID} entry in a class-heterogeneous group’s Binding list.

class_id: int#

Class code of the bound object.

instance_id: int#

Instance ID of the bound object.

class icspacket.proto.cip.objects.group.GroupObject(connection: CIP_Connection, instance: int = 1)[source]#

Binds other objects (e.g. AIP, AOP, DIP, DOP, or their groups) together (See CIP Vol 1, §5-16).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by the group (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

number_of_bound_instances: CIPAttribute[int]#

Number of points bound to this group (attribute 3).

binding: CIPAttribute[Collection[GroupBinding]]#

List of {class_id, instance_id} entries bound to this group (attribute 4).

status: CIPAttribute[int]#

0 = good, 1 = alarm state, for the whole group (attribute 5).

owner_vendor_id: CIPAttribute[int]#

Vendor ID of the group’s owner (attribute 6).

owner_serial_number: CIPAttribute[int]#

32-bit serial number of the group’s owner (attribute 7).

[ODVA CIP Vol 1] Wrappers for the Parameter Object (class 0x0F, §5-14) and Parameter Group Object (class 0x10, §5-15).

class icspacket.proto.cip.objects.parameter.ParameterObject(connection: CIP_Connection, instance: int = 1)[source]#

Public, self-describing interface to one of a device’s configuration parameters (See CIP Vol 1, §5-14).

data_type is a CIP data-type-segment code (See Appendix C-6.1) and parameter_value/minimum_value/maximum_value/default_value are shaped by it (and by data_size), so all four are exposed as raw bytes rather than a fixed schema. Attributes 22-24 (International Parameter/Engineering Units/Help Name Strings, data type STRINGI) need the Get_Member service to decode and are not implemented.

parameter_value: CIPAttribute[bytes]#

Actual parameter value; shape depends on data_type/data_size, set-only if descriptor bit 4 is clear (attribute 1).

Size of link_path in bytes, 0 = no link (attribute 2).

CIP path to the object attribute this parameter’s value is linked to, up to 255 bytes (attribute 3).

descriptor: CIPAttribute[int]#

Parameter behavior bit flags, e.g. bit 4 = read only (attribute 4, See §5-14.2.1.1, Table 5-14.9).

data_type: CIPAttribute[bytes]#

CIP data-type-segment code selecting the type of the value attributes (attribute 5, See Appendix C-6.1).

data_size: CIPAttribute[int]#

Number of bytes in parameter_value (attribute 6).

parameter_name_string: CIPAttribute[str]#

Human-readable parameter name, up to 16 characters, e.g. “Frequency #1” (attribute 7).

units_string: CIPAttribute[str]#

Engineering unit string, up to 4 characters (attribute 8).

help_string: CIPAttribute[str]#

Help string, up to 64 characters (attribute 9).

minimum_value: CIPAttribute[bytes]#

Minimum settable value; shape depends on data_type (attribute 10, See §5-14.2.1.3).

maximum_value: CIPAttribute[bytes]#

Maximum settable value; shape depends on data_type (attribute 11, See §5-14.2.1.3).

default_value: CIPAttribute[bytes]#

Factory default value; shape depends on data_type (attribute 12).

scaling_multiplier: CIPAttribute[int]#

Multiplier for the scaling formula (attribute 13, See Figure 5-14.11).

scaling_divisor: CIPAttribute[int]#

Divisor for the scaling formula (attribute 14).

scaling_base: CIPAttribute[int]#

Base for the scaling formula (attribute 15).

scaling_offset: CIPAttribute[int]#

Offset for the scaling formula, may be negative (attribute 16).

Parameter instance sourcing the scaling multiplier, 0 = use scaling_multiplier (attribute 17).

Parameter instance sourcing the scaling divisor, 0 = use scaling_divisor (attribute 18).

Parameter instance sourcing the scaling base, 0 = use scaling_base (attribute 19).

Parameter instance sourcing the scaling offset, 0 = use scaling_offset (attribute 20).

decimal_precision: CIPAttribute[int]#

Number of decimal places to show for the scaled engineering value (attribute 21).

get_class_attribute(attribute: int) bytes[source]#

Read a Parameter class attribute from instance 0 (See §5-14.1, Table 5-14.2).

apply_attributes() bytes[source]#

Invoke Apply_Attributes, committing parameter values whose use is pending.

reset() bytes[source]#

Invoke the class-level Reset service, restoring all parameters to their factory default.

save() bytes[source]#

Invoke Save, persisting this parameter instance’s value to non- volatile storage.

restore() bytes[source]#

Invoke Restore, reloading this parameter instance’s value from non- volatile storage.

class icspacket.proto.cip.objects.parameter.ParameterGroupObject(connection: CIP_Connection, instance: int = 1)[source]#

Names and lists the parameter instances that belong to one configuration group (See CIP Vol 1, §5-15).

The “Nth Parameter Number in Group” instance attributes are numbered dynamically - starting at attribute 3 for revision 1’s abbreviated static set (§5-15.2), or attribute 16 for revision >1’s extended static set (§5-15.3) - so member() computes the attribute ID rather than declaring one CIPAttribute per group slot.

group_name: CIPAttribute[str]#

Human-readable group name, up to 16 characters, e.g. “Setup” (attribute 1).

number_of_members: CIPAttribute[int]#

Number of parameters in this group (attribute 2).

member(index: int, *, extended: bool = False) int[source]#

Read the Nth (1-based) Parameter Object instance number bound to this group.

Parameters:
  • index – 1-based member position within the group.

  • extended – Use the extended static attribute set’s numbering (1st member at attribute 16) instead of the abbreviated set’s (1st member at attribute 3); the class- level Revision attribute selects which layout is active (See §5-15.1.1.1).

get_class_attribute(attribute: int) bytes[source]#

Read a Parameter Group class attribute from instance 0 (See §5-15.1, Table 5-15.1).

[ODVA CIP Vol 1] Wrappers for the discrete/analog I/O point objects:

Discrete Input Point (class 0x08, §5-9), Discrete Output Point (class 0x09, §5-10), Analog Input Point (class 0x0A, §5-11), and Analog Output Point (class 0x0B, §5-12).

icspacket.proto.cip.objects.point.ANALOG_VALUE_TYPES: dict[int, Any] = {0: <int16>, 1: <float32>, 2: <int8>, 3: <int8>, 4: <int32>, 5: <int64>, 6: <int16>, 7: <int32>, 8: <int64>, 9: <float64>}#

Attribute 8 (Value Data Type) code -> wire schema, shared by Analog Input and Analog Output Point (See CIP Vol 1, §5-11.3/§5-12.2, Table 5-11.3/5-12.2). Value 100 (vendor specific) has no fixed schema and decodes to raw bytes.

class icspacket.proto.cip.objects.point.AnalogInputPointObject(connection: CIP_Connection, instance: int = 1)[source]#

Models an analog input channel (See CIP Vol 1, §5-11).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by this point (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

value: CIPAttribute[bytes]#

Analog input value; wire type is selected by value_data_type (defaults to INT) (attribute 3).

status: CIPAttribute[int]#

0 = operating without alarms or faults, 1 = alarm or fault condition (attribute 4).

owner_vendor_id: CIPAttribute[int]#

Vendor ID of the channel’s owner (attribute 5).

owner_serial_number: CIPAttribute[int]#

32-bit serial number of the channel’s owner (attribute 6).

input_range: CIPAttribute[int]#

Input range the point is operating in, e.g. 0 = -10V to 10V (attribute 7, See Table 5-11.3).

value_data_type: CIPAttribute[int]#

Selects value’s wire type: 0=INT (default), 1=REAL, 2=USINT, …, 9=LREAL (attribute 8).

read_value() int | float | bytes[source]#

Read and decode value according to the current value_data_type.

class icspacket.proto.cip.objects.point.AnalogOutputPointObject(connection: CIP_Connection, instance: int = 1)[source]#

Models an analog output channel (See CIP Vol 1, §5-12).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by this point (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

value: CIPAttribute[bytes]#

Analog output value; wire type is selected by value_data_type (defaults to INT) (attribute 3).

status: CIPAttribute[int]#

0 = operating without alarms or faults, 1 = alarm or fault condition (attribute 4).

owner_vendor_id: CIPAttribute[int]#

Vendor ID of the channel’s owner (attribute 5).

owner_serial_number: CIPAttribute[int]#

32-bit serial number of the channel’s owner (attribute 6).

output_range: CIPAttribute[int]#

Output range the channel is to use, e.g. 0 = 4mA to 20mA (attribute 7, See Table 5-12.2).

value_data_type: CIPAttribute[int]#

Selects value/fault_value/idle_value’s wire type: 0=INT (default), …, 9=LREAL (attribute 8).

fault_action: CIPAttribute[int]#

Output value to go to on fault: 0=hold last state (default), 1=low limit, 2=high limit, 3=use fault_value (attribute 9).

idle_action: CIPAttribute[int]#

Output value to go to on idle: 0=hold last state (default), 1=low limit, 2=high limit, 3=use idle_value (attribute 10).

fault_value: CIPAttribute[bytes]#

Value output in fault mode when fault_action selects it; required if fault_action is implemented (attribute 11).

idle_value: CIPAttribute[bytes]#

Value output in idle mode when idle_action selects it (attribute 12).

command: CIPAttribute[int]#

Changes the point to Idle (0) or Run (1) mode; required if idle_action is implemented (attribute 13).

object_state: CIPAttribute[int]#

1=Non-Existent, 2=Available, 3=Idle, 4=Ready, 5=Run, 6=Recoverable Fault, 7=Unrecoverable Fault (attribute 14).

read_value() int | float | bytes[source]#

Read and decode value according to the current value_data_type.

write_value(value: int | float | bytes, *, instance: int | None = None) bytes[source]#

Encode and write value according to the current value_data_type.

class icspacket.proto.cip.objects.point.DiscreteInputPointObject(connection: CIP_Connection, instance: int = 1)[source]#

Models a discrete input, e.g. a toggle switch or screw terminal (See CIP Vol 1, §5-9).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by this product (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

value: CIPAttribute[int]#

Input point value: 0 = off, 1 = on (attribute 3).

status: CIPAttribute[int]#

0 = OK, 1 = product-specific alarm or status (attribute 4).

off_on_delay: CIPAttribute[int]#

Filter time in microseconds for an off-to-on transition, default 0 (attribute 5).

on_off_delay: CIPAttribute[int]#

Filter time in microseconds for an on-to-off transition, default 0 (attribute 6).

off_on_cycles: CIPAttribute[int]#

Total number of Off-to-On transitions of value, default 0 (attribute 7).

class icspacket.proto.cip.objects.point.DiscreteOutputPointObject(connection: CIP_Connection, instance: int = 1)[source]#

Models a discrete output, e.g. a relay or LED (See CIP Vol 1, §5-10).

number_of_attributes: CIPAttribute[int]#

Number of attributes supported by this product (attribute 1).

attribute_list: CIPAttribute[bytes]#

List of supported attribute IDs, one USINT each (attribute 2).

value: CIPAttribute[int]#

Output point value: 0 = off, 1 = on (attribute 3).

status: CIPAttribute[int]#

0 = OK, 1 = failure or alarm (attribute 4).

fault_action: CIPAttribute[int]#

Action on value in the Recoverable Fault state: 0 = use fault_value, 1 = hold last state (attribute 5).

fault_value: CIPAttribute[int]#

User-defined value applied when fault_action selects it (attribute 6).

idle_action: CIPAttribute[int]#

Action on value when idle: 0 = use idle_value, 1 = hold last state (attribute 7).

idle_value: CIPAttribute[int]#

User-defined value applied when idle_action selects it (attribute 8).

run_idle_command: CIPAttribute[int]#

Generates the Receive_Idle (0) or Receive_Ready_to_Run (1) event (attribute 9).

flash: CIPAttribute[int]#

Flash the output at flash_rate while value is on, default 0 (attribute 10).

flash_rate: CIPAttribute[int]#

Flash frequency in Hz for the flash attribute (attribute 11).

object_state: CIPAttribute[int]#

1=Non-Existent, 2=Available, 3=Idle, 4=Ready, 5=Run, 6=Recoverable Fault, 7=Unrecoverable Fault (attribute 12).

icspacket.proto.cip.objects.point.decode_analog_value(data: bytes, value_data_type: int) int | float | bytes[source]#

Decode an analog Value/Fault Value/Idle Value payload using its Value Data Type code.

icspacket.proto.cip.objects.point.encode_analog_value(value: int | float | bytes, value_data_type: int) bytes[source]#

Encode an analog Value/Fault Value/Idle Value payload using its Value Data Type code.