PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SSC-32 Servocontroller über COM-Port mit Java steuern



trabri
02.04.2010, 13:48
Hallo,

Wir versuchen gerade einen SSC 32 Servontroller über Java anzusteuern. Das Gerät ist von lynxmotion. Mit der dort erhältlichen Terminalsoftware lässt sich der Controller richtig steuern, solange man hierfür den Schieberegler rechts verwendet. Mit selber eingegebenen Befehlen funktioniert es leider nicht.

Wir möchten gerne eigene Software für die Steuerung programmieren. Hierfür nutzen wir Java, Win XP und eclipse. Leider reagiert der Controller auch hier nicht auf die Befehle. Die LED suggeriert zwar durch flackern ein Eingangssignal, aber der Servo bewegt sich nicht.

Wir vermuten, dass etwas an der Syntax der Befehle nicht stimmt und unser Programm eventuell auch einen Fehler enthält.

In der Vermutung, dass einige erfahrene Roboterbastler sich schon intensiv mit dem Controller befasst haben, hoffen wir auf eure Hilfe!

Hier noch der Javaquellcode den wir aktuell verwenden:

import gnu.io.*;

import java.io.IOException;
//import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
//import java.util.TooManyListenersException;

//import OeffnenUndSenden.serialPortEventListener;



public class EinfachSenden implements Runnable {

/**
* @param args
*/
public static void main(String[] args)
{
Runnable runnable = new EinfachSenden();
new Thread(runnable).start();
System.out.println("main finished");
}

/**
*
*/

CommPortIdentifier serialPortId;
Enumeration enumComm;
SerialPort serialPort;
OutputStream outputStream;
// InputStream inputStream;
Boolean serialPortGeoeffnet = false;

int baudrate = 115200;
int dataBits = SerialPort.DATABITS_8;
int stopBits = SerialPort.STOPBITS_1;
int parity = SerialPort.PARITY_NONE;
//String portName = "/dev/ttyS0";
String portName = "COM1";

int secondsRuntime = 5;

public EinfachSenden()
{
System.out.println("Konstruktor: EinfachSenden");
}

public void run()
{
Integer secondsRemaining = secondsRuntime;
if (oeffneSerialPort(portName) != true)
return;

while (secondsRemaining > 0) {
System.out.println("Sekunden verbleiben: " + secondsRemaining.toString() );
secondsRemaining--;
try {
Thread.sleep(1000);
} catch(InterruptedException e) { }
sendeSerialPort("#0 P800 T3000");
}
schliesseSerialPort();
}

boolean oeffneSerialPort(String portName)
{
Boolean foundPort = false;
if (serialPortGeoeffnet != false) {
System.out.println("Serialport bereits geöffnet");
return false;
}
System.out.println("Öffne Serialport");
enumComm = CommPortIdentifier.getPortIdentifiers();
while(enumComm.hasMoreElements()) {
serialPortId = (CommPortIdentifier) enumComm.nextElement();
if (portName.contentEquals(serialPortId.getName())) {
foundPort = true;
break;
}
}
if (foundPort != true) {
System.out.println("Serialport nicht gefunden: " + portName);
return false;
}
try {
serialPort = (SerialPort) serialPortId.open("Öffnen und Senden", 500);
} catch (PortInUseException e) {
System.out.println("Port belegt");
}
try {
outputStream = serialPort.getOutputStream();
} catch (IOException e) {
System.out.println("Keinen Zugriff auf OutputStream");
}
/*
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
System.out.println("Keinen Zugriff auf InputStream");
}
try {
serialPort.addEventListener(new serialPortEventListener());
} catch (TooManyListenersException e) {
System.out.println("TooManyListenersException für Serialport");
}
serialPort.notifyOnDataAvailable(true);
*/
try {
serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);
} catch(UnsupportedCommOperationException e) {
System.out.println("Konnte Schnittstellen-Paramter nicht setzen");
}

serialPortGeoeffnet = true;
return true;
}

void schliesseSerialPort()
{
if ( serialPortGeoeffnet == true) {
System.out.println("Schließe Serialport");
serialPort.close();
serialPortGeoeffnet = false;
} else {
System.out.println("Serialport bereits geschlossen");
}
}

void sendeSerialPort(String nachricht)
{
System.out.println("Sende: " + nachricht);
if (serialPortGeoeffnet != true)
return;
try {
outputStream.write(nachricht.getBytes());
} catch (IOException e) {
System.out.println("Fehler beim Senden");
}
}
}