User Tools

Site Tools


Sidebar



Minetest Forum
Content Database
Git Repository
Bug Tracker
Website

usage:nodes:atc_controller

This is an old revision of the document!


ATC controller

Unleash the full power of Advtrains by sending Automatic Train Control commands.

Note: this page has been written for Advtrains 2.0.1 TSS and Minetest 5.1.0. Examples and practices described in this page don't take advantage of improvements introduced in later releases.

Properties

Mod: advtrains_train_track
Node name: advtrains:dtrack_atc_placer
Other names:

  • advtrains:dtrack_atc_st
  • advtrains:dtrack_atc_st_30
  • advtrains:dtrack_atc_st_45
  • advtrains:dtrack_atc_st_60

Craft recipe

This node has no craft recipe.

Extended description

  • When the rail is first built, this rail node does nothing. But once right-clicking (or double tapping on Android) the node, a formspec displays, allowing you to write an ATC command for any trains passing on.
  • When a train is driving on the rail, the command stored in the controller is sent and executed by the train.
  • Sending a new command discards the previous one.
  • In addition, applying brakes, trying to change speed or to open doors will discard the currently running command.
  • If the command is malformed or does not respect the syntax, a warning like this is emitted:
2019-01-01 15:00:00: WARNING[Server]: [advtrains]500000 ATC command parse error: Unknown command: malformed ATC 1
  • This node can be rotated by the Trackworker.
  • Only straight nodes are supported. You can't put this node on a curve or as a switch.

ATC command syntax

In ATC commands, spaces are ignored and can be inserted as needed.

Simple directives

S<speed>

Sets the target speed of driving train to <speed>. The train accelerates if faster than current speed, rolls if slower, and does nothing if at the same speed.

<speed> can be either:

  • a number constituted only of digits. This represents an Advtrains speed unit, or
  • the special value M, which represents the maximal speed of the train as defined by the entity definition passed to advtrains.register_wagon.

Execution of the ATC command continues immediately.

B<speed>

Brakes until the train speed reaches <speed>. The train applies brakes if slower than current speed, and does nothing if not.

<speed> should be a number constituted only of digits, representing an Advtrains speed unit.

Execution of the ATC command continues immediately.

W

Pauses execution of the ATC command until S and B directives reached the desired speed.

Please use with caution. If the train is never able to reach the desired speed, this directive will probably break your ATC command.

R

Reverses movement direction of train. Has only effect while the train is standing.

OL, OR

Open left or right doors. Whether doors are left or right are relative to ATC controller arrow direction. So if you try to drive in wrong direction (the “right” direction being when you placed the rail towards driving direction), the OL command will open right doors compared to driver perspective.

If you open left doors with OL, however, you will not be able to open right doors using OR, and vice-versa.

Execution of the ATC command continues immediately.

OC

Close doors previously opened by OL or OR.

Conditional statements

Advtrains only supports the if conditional statement. Such statements are expressed as follows:

I<condition><code>;

where <condition> is one of the conditions described below, and <code> is a regular ATC command. Notice the semi-colon which is required, otherwise you get two warnings like this:

2019-01-01 15:00:00: WARNING[Server]: Undeclared global variable “id” accessed at /home/username/.minetest/mods/advtrains/advtrains/atc.lua:274
2019-01-01 15:00:00: WARNING[Server]: [advtrains]nil ATC command syntax error: I statement not closed: I+S2 1

If you want to add an else branch, you can use this variant:

I<condition><ifcode>E<elsecode>;

+, -

Tests whether the train is driving in the right direction. + becomes true when it drives in direction of arrow; otherwise it is false. - is the opposite of +.

<, <=, >, >=

Compares the current train speed to the given speed. That speed should be a number constituted only of digits, representing an Advtrains speed unit.

It is not currently possible to test directly the speed for equality or inequality.

Although there is no direct command, it is possible to use nested conditional commands to test for equality or inequality:

I<8
 Not equal to 8
E
 I>8
  Not equal to 8
 E
  Equal to 8
;;

Unfortunately the command

I+I<=8I>=8B0

can't be parsed and the parser complains. For now

Examples

S, B

  • SM: accelerate to maximum speed
  • S2: set target speed to 2 (~ 8 km/h)
  • S0: roll to stand
  • B0: brake to stand
  • S0 B3 or B3 S0: brake to 3, then roll to stand.

W, R

  • S5 W: set target speed to 5 (~ 18 km/h), and wait for speed to be 5
  • B0 W R: brake to stand, wait for speed to be 0, and reverse direction of train
  • B0 W D10 SM: brake to stand, wait 10 seconds after the train stopped, and reverse direction of train

OL, OR, OC

  • B0 W OL D10 OC D1 SM: example of train stopping at a standard station with doors opening on the left
  • B0 W OL R D20 OC D1 SM: example of train stopping at a terminus station, with returning in opposite direction

I, +/-, </<=/>/>=

  • I + S2;: if the train is going in the right direction, set target speed to 2
  • I + SM E B0;: if the train is going in the right direction, accelerate, otherwise stop
  • I <8 S8;: if the train is slower than 8 (~ 30 km/h), set target speed to 8

Trivia

  • Although the node has three different modes (static, mesecon and digilines), only the static mode is supported. It is actually not possible to change directly the mode from the ATC controller.
  • The ATC controller rail has the same texture as the LuaAutomation ATC rail, but its functions are different.
usage/nodes/atc_controller.1573048185.txt.gz · Last modified: 2019-11-06 14:49 by blockhead