IEC60870.CS101.Slave (ExIEC60870 v0.1.0)

Copy Markdown View Source

IEC 60870-5-101 Slave (cs101_slave.c), supporting both :unbalanced and :balanced link layer modes.

Features:

  • Separate Class 1 (high-priority / command confirmations / events) and Class 2 (periodic / background) FIFO queues
  • Compatible with IEC60870.CS104.MasterConnection helpers (send_asdu/2, send_act_con/3, send_act_term/2) so application handlers can be shared between 101 and 104 Slaves
  • Standard application callbacks (interrogation_handler, counter_interrogation_handler, read_handler, clock_sync_handler, reset_process_handler, delay_acquisition_handler, reset_cu_handler, asdu_handler)

Summary

Functions

Returns a specification to start this module under a supervisor.

Enqueues an ASDU into the Class 1 (high-priority) queue. Safe to call from inside Slave callbacks or external processes.

Enqueues an ASDU into the Class 2 (low-priority) queue. Safe to call from inside Slave callbacks or external processes.

Sets DIR bit in balanced link layer mode.

Sets idle timeout in milliseconds.

Sets local link layer address.

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

enqueue_user_data_class_1(slave, asdu)

@spec enqueue_user_data_class_1(GenServer.server(), IEC60870.ASDU.t()) :: :ok

Enqueues an ASDU into the Class 1 (high-priority) queue. Safe to call from inside Slave callbacks or external processes.

enqueue_user_data_class_2(slave, asdu)

@spec enqueue_user_data_class_2(GenServer.server(), IEC60870.ASDU.t()) :: :ok

Enqueues an ASDU into the Class 2 (low-priority) queue. Safe to call from inside Slave callbacks or external processes.

flush_queues(slave)

@spec flush_queues(GenServer.server()) :: :ok

get_app_layer_parameters(slave)

@spec get_app_layer_parameters(GenServer.server()) :: IEC60870.AppLayerParameters.t()

is_class_1_queue_full?(slave)

@spec is_class_1_queue_full?(GenServer.server()) :: boolean()

is_class_2_queue_full?(slave)

@spec is_class_2_queue_full?(GenServer.server()) :: boolean()

send_act_con(slave, asdu, negative \\ false)

@spec send_act_con(GenServer.server(), IEC60870.ASDU.t(), boolean()) :: :ok

send_act_term(slave, asdu)

@spec send_act_term(GenServer.server(), IEC60870.ASDU.t()) :: :ok

set_dir(slave, dir)

@spec set_dir(GenServer.server(), boolean()) :: :ok

Sets DIR bit in balanced link layer mode.

set_idle_timeout(slave, timeout_ms)

@spec set_idle_timeout(GenServer.server(), pos_integer()) :: :ok

Sets idle timeout in milliseconds.

start(slave)

@spec start(GenServer.server()) :: :ok

start_link(opts)

stop(slave)

@spec stop(GenServer.server()) :: :ok