DLL einbinden und Serielle Kommunikation

TDO88

Grünschnabel
Vielen Dank für eure Hilfe.
Jetzt funktioniert es bei mir!
Der Trick mit dem Pointer war es, in der Deklaration der Methode als Datentyp "IntByReference" zu wählen.
Das Interface zu der DLL sieht demnach so aus:
Java:
import com.sun.jna.*;
import com.sun.jna.ptr.IntByReference;


public interface TANGODLL extends Library {
    public int LSX_CreateLSID(IntByReference ILSID);
    public int LSX_ConnectSimple(int lLSID,int lAnInterfaceType,String pcAComName,int lABaudRate,boolean bAShowProt);
    public int LSX_MoveRel (int lLSID,double dX,double dY,double dZ,double dA,boolean bWait);
    public int LSX_Disconnect(int lLSID);
    public int LSX_FreeLSID(int lLSID);
}

Das laden der DLL und aufrufen der Funktionen dann in dieser Form:
Java:
String DLLPath = "C:\\Users\\TDO\\Documents\\NetBeansProjects\\Dauerlauf\\Tango_DLL.dll";
TANGODLL TANGOINST = (TANGODLL) Native.loadLibrary(DLLPath, TANGODLL.class);
     
String COMPort = "COM14";
int returnfunction = 0;
int ILSID = -1;
IntByReference pILSID = new IntByReference(-1);
   
returnfunction = TANGOINST.LSX_CreateLSID(pILSID);
ILSID = pILSID.getValue();

Gruß
TDO
 

TDO88

Grünschnabel
Hallo,

jetzt kommt das nächste Problem... was aber auch schon im Titel steht!
Und zwar möchte ich einfach nur, dass der Benutzer über ein Drop-Down Menü einen verfügbaren COM-Port wählen kann.
Dazu habe ich mir javax.comm runtergeladen und eingebunden und folgendes implementiert:
Java:
public static String[] ComPorts()
    {
        String[] Ports = new String[10];
        int i = 0;
        CommPortIdentifier serialPortId;
        Enumeration enumComm;

        enumComm = CommPortIdentifier.getPortIdentifiers();
       
        while (enumComm.hasMoreElements()) {
            serialPortId = (CommPortIdentifier) enumComm.nextElement();
                if(serialPortId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                    Ports[i] = serialPortId.getName();
                    i++;
            }
        }
        return Ports;
    }

Leider gibt "CommPortIdentifier.getPortIdentifiers()" Das enum danach bleibt leer und die while Schleife wird direkt übersprungen.
Nach etwas googlen habe ich dann gesehen, dass man die comm.jar, javax.comm.properties und die win32com.dll in entsprechende Ordner kopieren soll.
1. comm.jar nach jre\lib\ext
2. properties nach jre\lib
3. dll nach jre\bin

Jetzt sieht meine Ordnerstruktur so aus:
50137-d7d581be30656d8ddff17a257425b874.jpg


Ich habe alles im "jre1.8.0_45" Ordner entsprechend kopiert, aber es funktioniert leider nicht.
Aus einem anderen Forum sagte jemand, man solle die dll ins system32 Verzeichnis kopieren, aber auch das brachte leider nicht den Durchbruch.
Woher weiß ich denn welches jre oder jdk meine IDE benutzt und habt ihr noch Ideen, was ich machen kann, damit ich meiner COM-Ports auflisten kann?
(Und ja, es sind COM-Ports vorhanden ;))

Gruß
TDO
 

Anhänge

  • ordner.jpg
    ordner.jpg
    7,1 KB · Aufrufe: 9

TDO88

Grünschnabel
Hat sich jetzt erledigt!
http://mvnrepository.com/artifact/org.scream3r/jssc/2.8.0
Java:
import jssc.SerialPortList;
        String portlist [] = SerialPortList.getPortNames();
        for (String s : portlist) {
            System.out.println(s);
          
           SerialPort serialPort = new SerialPort(s);
           try {
               System.out.println("Port opened: " + serialPort.openPort());
               System.out.println("Params setted: " + serialPort.setParams(9600, 8, 1, 0));
               System.out.println("\"Hello World!!!\" successfully writen to port: " + serialPort.writeBytes("Hello World!!!".getBytes()));
               System.out.println("Port closed: " + serialPort.closePort());
           }
           catch (SerialPortException ex) {
               System.out.println(ex);
           }
        }

Funktioniert wunderbar
 

Neue Beiträge