S7-Verbinder für Java: Tester gesucht!

Thomas Rudin

Level-1
Beiträge
8
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Habe mit Hilfe der libnodave eine Java-Bibliothek programmiert
um mit einer S7-CPU zu verbinden.

Brauche jedoch noch ein Paar Leute, die Lust auf Testen haben...:)

Features:

  • Verbinden mit einer Siemens Ethernet-CP/CPU
  • Lesen/Schreiben mit einfacher Notation: readBoolean("M0.0")...
  • Lesen/Schreiben von ganzen Datenblöcken mit Byte-Arrays
Konnte es bis jetzt nur an einer S7-318 mit 343-1 CP testen.

Download bei Sourceforge:
http://sourceforge.net/projects/autocc/files/

Direkter Link zu jar-datei

Dokumentation mit Programmierbeispielen dazu...

Wiki mit Beispielen: http://wiki.rudin.li/index.php?title=S7Connector

Danke schon im Voraus
 
Zuletzt bearbeitet:
Hallo,

interessantes Projekt. Du nutzt die libnodave DLL oder ? Werde demnächst mal einen Test mit einer 315-2 DP durchführen ;)
 
Ich habe mal versucht eine Verbindung mittels Netlink pro aufzubauen. Dazu habe ich die Klasse S7_PLC_Connection etwas modifiziert:
Code:
daveInterface = nodave.daveNewInterface(
                daveSocket,
                daveSocket,
                "IF1",
                0,
                Nodave.daveProtoNLpro,
                Nodave.daveSpeed187k
);
Anschließend versuche ich den Verbindungsaufbau mittels deinem CommandLineInterface:
Code:
try to connect to openSocketw.c: bind Socket error: No error 
openSocketw.c: Connected to host: 192.168.178.40 
# r DB1.DBX0.0
autocc.S7Connector.exceptions.LibNodaveException: Unknown Error: -128
    at autocc.S7Connector.exceptions.LibNodaveException.CheckResult(LibNodaveException.java:25)
    at autocc.S7Connector.S7_PLC_Connection.daveReadBytes(S7_PLC_Connection.java:272)
    at autocc.S7Connector.S7_PLC_Connection.read(S7_PLC_Connection.java:224)
    at autocc.S7Connector.S7_PLC_Connection.read(S7_PLC_Connection.java:207)
    at autocc.S7Connector.CommandLineInterface.interpretLine(CommandLineInterface.java:141)
    at autocc.S7Connector.CommandLineInterface.main(CommandLineInterface.java:91)
#
Die Verbindung kommt scheinbar garnicht erst Zustande (das zeigen auch die netlink LED's). Hast du eine Idee wos klemmt ?
 
Hallo Thomas,

Die Parameter MPI, Rack und Slot hatte ich schon geändert, dabei habe ich mich an dem Testprogramm "testNLpro" orientiert:

MPI: 2, Rack: 0, Slot: 0 (hatte auch schon Slot = 2 probiert)

Aber trotzdem gleicher Fehler :( Das testNLpro läuft aber auf Anhieb.

Aus dem Fehler (-128) kann man aber auch nicht auf Probleme schließen oder ?
 
Habe mir das testNLpro-programm mal genauer angeschaut.
Irgendwas passiert dort mit der lokalen und sps-mpi-adresse.

Habe leider die nächsten zwei Wochen keine Zeit um mir das anzuschauen... :(
Werde aber bescheid geben, sobald ich was herausfinde

Thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hi Thomas,

zufällig habe ich mitbekommen, wenn ich vorher z.B. mit testNLpro.exe eine Verbindung herstelle und gleichzeitig (man muss schnell genug sein, bevor die Verbindung wieder beendet wurde) versuche mittels der Java Version zu connecten funktioniert die Verbindung.

--> Ich denke der netlink benötigt noch eine zusätzliche Initialisierung (o.ä.).

Also habe ich mal geschaut was das testNLpro.c Programm nach dem Aufbau der Verbindung macht und dabei sind mir folgende Zeilen aufgefallen:

Code:
daveSetTimeout(di,5000000);
    
for (i=0; i<3; i++) {
        if (0==daveInitAdapter(di)) {
        initSuccess=1;    
        if(doLifeList) {        
            a= daveListReachablePartners(di,buf1);
            printf("daveListReachablePartners List length: %d\n",a);
            if (a>0) {
            for (j=0;j<a;j++) {
                if (buf1[j]==daveMPIReachable) printf("Device at address:%d\n",j);
            }    
            }
        }        
        break;    
        } else daveDisconnectAdapter(di);
}
@Thomas: Kann ich die fehlenden Funktionen wie daveSetTimeout() oder daveInitAdapter einfach in das Interface einbauen oder wie kann ich diese auch in der Java Version verfügbar machen ?

Und wie kann ich einen Realwert von einem DB lesen?
 
Hallo Stefan

Wenn du lust hast kannst du dich ja bei sourceforge anmelden und beim Projekt
teilnehmen, ist grundsätzlich offen für alle...

Der S7-Connector ist ursprünglich nur ein Teilprojekt gewesen.
Ich hatte eigenltich vorgehabt ein Automations-Control-Center auf Web-Basis zu programmieren (mit Datenbankschnittstelle für Tags usw..). Bin aber noch am Anfang des ganzen ;)


Thomas
 
hi Thomas,

nachdem ich ein paar fehlende Funktionen (wichtig ist die daveInitAdapter()) hinzugefügt habe, funktioniert nun auch der S7 Connector mit dem netlink pro ;)

Wenn du mich für das Projekt freischaltest (user st400) kann ich die kleine Modifikation gern hochladen.

Btw, hast du die Lib mal unter Linux x64 getestet? Bei mir stürzt das Programm dabei ab.

Stefan
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Stefan,

Bin die letzten paar Wochen unterwegs gewesen und hatte keinen Internetzugang :|

Habe dich nun beim Projekt hinzugefügt.
Ich wäre froh wenn du die Änderungen einchecken könntest...

Danke


Thomas
 
Hallo Leute!

Das klingt ja ziemlich interessant, was ihr da macht. Ich bin auch gerade am Anfang einer Webanwendung, die die S7 ausliest und steuert. Dabei bin ich über das Projekt gestolpert und hab versucht, das bei mir zum Laufen zu bringen. Leider läuft bei mir auch ein einfacher Test nicht. Kann mir da eventuell wer von euch weiterhelfen?

code:
import autocc.S7Connector.S7_PLC_Connection;

public class ConnectPLC {

/**
* @param args
*/
public static void main(String[] args) {
S7_PLC_Connection myPCL = new S7_PLC_Connection("10.0.0.99");

myPCL.close();
}
}

Ausgabe:
openSocketw.c: bind Socket error: No error
Exception in thread "main" autocc.S7Connector.exceptions.LibNodaveException: Unknown Error: -1
at autocc.S7Connector.exceptions.LibNodaveException.CheckResult(LibNodaveException.java:25)
at autocc.S7Connector.S7_PLC_Connection.connect(S7_PLC_Connection.java:505)
at autocc.S7Connector.S7_PLC_Connection.<init>(S7_PLC_Connection.java:69)
at autocc.S7Connector.S7_PLC_Connection.<init>(S7_PLC_Connection.java:80)
at autocc.S7Connector.S7_PLC_Connection.<init>(S7_PLC_Connection.java:94)
at ConnectPLC.main(ConnectPLC.java:9)


was mach ich da denn falsch?

danke für die Hilfe
...
Werner
 
Hallo Werner

Der Fehler mit Nummer -1 bedeutet, dass die Verbindung vom Partner nicht
akzeptiert wurde (Connection refused)

Womöglich falsche IP?

Was für Hardware benutzt du denn?

Thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich benutze eine S7 300. Irgendwie hab ich das Problem, daß das Connecten nicht jedesmal funktioniert. Entweder ich connecte mich mit einem der Testtools und führe dann das java-Teil aus oder ich muß das java-Teil 2x aufrufen. Erst beim zweiten Mal funktioniert der connect. Hast du dieses Problem nicht?

Danke für die Hilfe
...
Werner
 
Zurück
Oben