IEC60870.CS101.Master (ExIEC60870 v0.1.0)

Copy Markdown View Source

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

Features:

Summary

Types

mode()

@type mode() :: :balanced | :unbalanced

Functions

add_slave(master, slave_address)

@spec add_slave(GenServer.server(), non_neg_integer()) :: :ok

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

get_app_layer_parameters(master)

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

is_channel_ready?(master, slave_address)

@spec is_channel_ready?(GenServer.server(), non_neg_integer()) :: boolean()

poll_single_slave(master, slave_address)

@spec poll_single_slave(GenServer.server(), non_neg_integer()) :: :ok

request_class_1_data(master, slave_address)

@spec request_class_1_data(GenServer.server(), non_neg_integer()) :: :ok

request_class_2_data(master, slave_address)

@spec request_class_2_data(GenServer.server(), non_neg_integer()) :: :ok

send_asdu(master, asdu, slave_address \\ nil)

@spec send_asdu(GenServer.server(), IEC60870.ASDU.t(), non_neg_integer() | nil) ::
  :ok | {:error, term()}

send_clock_sync_command(master, ca, new_time)

send_counter_interrogation_command(master, cot \\ :activation, ca, qcc \\ 5)

send_interrogation_command(master, cot \\ :activation, ca, qoi \\ 20)

send_process_command(master, cot, ca, io)

send_read_command(master, ca, ioa)

send_test_command(master, ca)

set_dir(master, dir)

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

Sets the DIR bit in balanced link layer mode.

set_idle_timeout(master, timeout_ms)

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

Sets idle timeout in milliseconds.

set_own_address(master, address)

@spec set_own_address(GenServer.server(), non_neg_integer()) :: :ok

Sets own link layer address in balanced mode.

start(master)

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

start_link(opts)

Starts a CS101.Master GenServer.

Options:

  • :transport (required) - {transport_mod, handle} (e.g. VirtualBus.attach(bus))
  • :mode - :unbalanced or :balanced (default :unbalanced)
  • :ll_params - %IEC60870.LinkLayerParameters{}
  • :al_params - %IEC60870.AppLayerParameters{}
  • :own_address - own link layer address for balanced mode (default 0)
  • :slave_address - default target slave link address (default 1)
  • :slaves - list of slave link addresses to register initially in unbalanced mode
  • :dir - DIR bit in balanced mode (default true)
  • :queue_size - max ASDU queue size in balanced mode (default 100)
  • :owner - PID to receive {:iec60870_cs101_master, master_pid, event} messages
  • :asdu_handler - fn master_pid, slave_addr, asdu -> any() end
  • :link_state_handler - fn master_pid, slave_addr, new_state -> any() end
  • :raw_message_handler - fn master_pid, bytes, sent? -> any() end

stop(master)

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

use_slave_address(master, slave_address)

@spec use_slave_address(GenServer.server(), non_neg_integer()) :: :ok