The following virutal motor moves 3 motors in parallel. The position and the limits of the virtual motor is taken from one of the motors.
#!/usr/bin/perl -w # # file name: /online_dir/vm1.pl # # DCM_Z # my ($method, $value_new) = @ARGV; my $status = 1; if( $method eq "set_position") { $status = Spectra::move( oh1_mot03 => $value_new, oh1_mot04 => $value_new, oh1_mot07 => $value_new); } elsif( $method eq "get_position") { $SYM{RETURN_VALUE} = Spectra::gmup( "oh1_mot03"); } elsif( $method eq "get_limit_min") { $SYM{RETURN_VALUE} = Spectra::gmuli( "oh1_mot03"); } elsif( $method eq "get_limit_max") { $SYM{RETURN_VALUE} = Spectra::gmula( "oh1_mot03"); } elsif( $method eq "exec_stop") { Spectra::stop_move( "oh1_mot03"); Spectra::stop_move( "oh1_mot04"); Spectra::stop_move( "oh1_mot07"); } else { Spectra::error( "vm1: failed to identify $method"); $status = 0; goto finish; } finish: $status;