/*
Cyclic movement script.
Does cyclic movement between two border points with set values of acceleration, deceleration and top speed.
*/
var axes = [];
var number_of_axes = 0;
var last_serial = 0;
while (serial = get_next_serial(last_serial)) // get next serial number and repeat for each axes.
{
    axes[number_of_axes] = newaxis(serial);
    log("Found axis " + number_of_axes + " with serial number " + serial);
    number_of_axes++;
    last_serial = serial;
}
for (var i = 0; i < number_of_axes; i++)
{
    axis_configure(axes[i]);
}
while (1) { // infinite loop
    for (var i = 0; i < number_of_axes; i++)
    {
        go_first_border(axes[i]);
        go_second_border(axes[i]);
    }
}
function axis_configure(axis)
{
    var speed = 300; // maximum movement speed in steps / second
    var accel = 100; // acceleration value in steps / second^2
    var decel = 100; // deceleration value in steps / second^2
axis.command_stop(); // send STOP command (does immediate stop)
    axis.command_zero(); // send ZERO command (sets current position and encoder value to zero)
    var m = axis.get_move_settings(); // read movement settings from the controller
    m.Speed = speed; // set movement speed
    m.Accel = accel; // set acceleration
    m.Decel = decel; // set deceleration
    axis.set_move_settings(m); // write movement settings into the controller
}function go_first_border(axis)
{
    var first_border = -1000; // first border coordinate in steps
axis.command_move(first_border); // move towards one border
    axis.wait_for_stop(100); // wait until controller stops moving
}function go_second_border(axis)
{
    var second_border = 1000; // second border coordinate in steps
axis.command_move(second_border); // move towards another border
    axis.wait_for_stop(100); // wait until controller stops moving
}