The following code shows how a Beckhoff motor is configured using the Modbus interface:
#!/usr/bin/env perl # # Usage: run bc9000_config.pl [destination] # use strict; use Spectra; my $status = 1; my $base = 0x4000; Spectra::modbusClose( "hasa106bc01"); Spectra::modbusWrite( "hasa106bc01", $base, 2); # halt Spectra::modbusWrite( "hasa106bc01", $base + 0x10, 100); # base, 0 - 2047, microsteps/sec Spectra::modbusWrite( "hasa106bc01", $base + 0x11, 1000); # slew, 0 - 2047, microsteps/sec Spectra::modbusWrite( "hasa106bc01", $base + 0x12, 1000); # accel, 0 - 2047 Spectra::modbusWrite( "hasa106bc01", $base + 0x18, 4); # microstepping # 1 - 6, microsteps/vollschritt, 4 -> 2**4 Spectra::modbusWrite( "hasa106bc01", $base + 0x1, 3); # reset, uebernahme Spectra::wait( 0.1); goto finish if( !defined( $ARGV[0])); my $ziel = $ARGV[0]; Spectra::modbusWrite( "hasa106bc01", $base + 0x2, ($ziel & 0xffff, $ziel >> 16)); # zielposition Spectra::modbusWrite( "hasa106bc01", $base, ( 1)); print "\033[2J"; while( 1) { my @data = Spectra::modbusRead( "hasa106bc01", $base + 0x4, 2); my ($status) = Spectra::modbusRead( "hasa106bc01", $base + 0x8, 1); my $pos = $data[0] + ($data[1] << 16); print sprintf "\033[2;5f pos %7d, status 0x%02x \n", $pos, $status; last if( Spectra::key() == 32); last if( $pos == $ziel); } Spectra::modbusWrite( "hasa106bc01", $base, ( 2)); # halt finish: return $status;