S7 Connector

vikil

Aktives Mitglied
Hallo, stehe wieder mal auf dem schlauch.
Will Daten aus S7 SPS Steuerung rauslesen. Es funktioniert auch einzeln soweit.
Wenn ich aber Status von mehreren variablen abfragen will, fliegt Exception.
Laut der Doku von S7Connector siehe hier
https://www.yumpu.com/en/document/view/19143435/autoccs7connector/25

wird es wie folgt im String zusammengestellt. Oder habe ich irgendwo ein Denkfehler?

Java:
[B]package[/B] Programm;
 
[B]import[/B] autocc.S7Connector.S7Address;
[B]import[/B] autocc.S7Connector.S7_PLC_Connection;
 
[B]public[/B] [B]class[/B] S7 {
 
       [B]public[/B] [B]static[/B] [B]void[/B] main(String[] args) {
 
             S7_PLC_Connection myPLC = [B]new[/B] S7_PLC_Connection("53.186.83.195", 0, 3);
 
             String adresse = "MW1000 / E4.0";
             S7Address s = [B]new[/B] S7Address(adresse);
            
            
 
             System.[I]out[/I].println(myPLC.read(s));
 
            
 
             myPLC.close();
 
       }
 
}

Als Fehlermeldung bekomme ich

openSocketw.c: bind Socket error: No error
openSocketw.c: Connected to host: 53.186.83.195
Exception in thread "main" java.lang.IllegalArgumentException: java.lang.NumberFormatException: For input string: "W1000 / E4"
at autocc.S7Connector.S7Address.<init>(S7Address.java:273)
at Programm.S7.main(S7.java:14)
Caused by: java.lang.NumberFormatException: For input string: "W1000 / E4"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at autocc.S7Connector.S7Address.<init>(S7Address.java:37)
... 1 more


DANKE
 

VfL_Freak

Top Contributor
Moin,

auch wenn Du nicht schreibst, in welcher Zeile die Exception genau auftritt, sollte
Java:
Caused by: [U]java.lang.NumberFormatException[/U]: For input string: "W1000 / E4"
doch wohl eindeutig sein, oder ???:L
Dein String enthält nun mal KEINE Zahl .....

Gruß
Klaus
 

VfL_Freak

Top Contributor
Moin,

Danke erst mal.
Ja du hast Recht. Aber laut Doku muss ich doch ein String übergeben oder siehe Seite 11
Methode read("String").
aber doch wohl nur einen String, der eine Zahl enthält !!!

Außerdem tritt das Problem NICHT beim "read" auf, sondern bereits hier:
Java:
// at Programm.S7.main([U]S7.java:14[/U])
S7Address s = new S7Address(adresse);
DORT ist die Eingabe falsch !!!

Was soll denn "W1000 / E4" für eine Adresse sein ?? :bahnhof:

Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:

vikil

Aktives Mitglied
Kannst mir Erklären wie du auf diese Aussage kommst? Habe gedacht es liegt am read() Methode. Wie gesagt entweder habe ich was falsch interpretiert oder verstanden. Auf der Seite 11 in Doku ist es so beschrieben mit dem String.. wo auch drinsteht ob es ein Ausgang/Merker/Eingang ist..
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Bin ich eigentlich der Einzige der sich über den ganzen BB-Code in dem Codefetzen wundert ? oder ist das durch das umstellen auf vBulletin 4.0 nur fehlerhaft dargestellt ?

@To

Ich hab mich noch nie mit dem S7Connector befassen müssen aber ,

du kannst keine Daten aus einem String parsen wenn dieser auch Buchstaben enthält, außer du schreibst einen eigenen Parser der diese literale verarbeiten kann.

sprich sowas hier funktioniert :

Java:
        String s7 = "1000 4.0";
        
        String[] token = s7.split("\\s+");
        
        int marker = Integer.parseInt(token[0]);
        double input = Double.parseDouble(token[1]);
        
        System.out.println("Marker : " + marker + " Input : " + input);

Du kannst natürlich selbstverständlich auch über REGEX splitten und dann parsen , wenn du die Buchstaben im String nicht entfernen können solltest.

läuft normalerweise sowieso alles über Step7 ( FBD ) und dessen Bausteine ?

oder hast du den Code in ST/SCL vorliegen und möchtest diese auslesen ?


Moin,

es gibt wohl ein Darstellungsproblem, wenn ich beispielsweise einen Codeausschnitt aus einem vorherigen Post in meine Antwort kopiere!
Hier bei Beispiel (in #4 - die dritte Zeile in der Codebox) :
S7 Connector

Wenn ich den Beitrag anschließend bearbeite, sehe ich die Formatierungszeichen aber NICHT, sondern den Text so, wie er sein soll !

Gruß
Klaus


Alles Klar hast du schon gemeldet ^^ hatte ich zu spät gesehen :oops:
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

tja, das ist die Frage ...
Aber wenn ich mir das gepostete Bild so anschaue, dann denke, dass das was dort als Example gezeigt wird, eher das ist, was konstruiert werden soll, nicht das was eingegeben werden soll !

Also die Fehlermeldung its zumindest eindeutig! Der Sting wird nach Zahlen geparst und kommt mit den Buchstaben nicht klar !

Nun kenne ich diesen S7Connector allerdings auch nicht! Gibt es denn dazu nirgendwo Beispiele?

Gruß
Klaus
 

vikil

Aktives Mitglied
Hallo Klaus,
ich Konstruire doch mit
S7Address s = new S7Address(adresse);
oder was meinst du? Bei einer Varible Funktioniert es!
Gruß Viktor
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
S7Address s = new S7Address(adresse);

damit erzeugst du das Address Object für den s7 connector.

dann musst du auch diese Addresse da einsetzen wo sie erwartet wird.

die Frage ist jetzt , wie werden die Informationen verarbeitet, und was genau wird wo erwartet, eigentlich nutzt man eben genau solche api's um sich darum keine gedanken machen zu müssen :)
 

kaoZ

Top Contributor
Oder verstehe ich was falsch. Muss ich die Init Methode aufrufen?

Btw.

init() erwartet ein Properies Objekt,

die Frage ist , eher wie du die Adresse Initialisieren / parsen musst das sie dem connector-Adresse Objekt übergeben werden kann , ich kann hier nirgends sehen wie btw. was das address objekt erwartet, bzw. wie diese dann intern verarbeitet wird.
 

vikil

Aktives Mitglied
Morgen KaoZ,
habe noch nie was mit Properies Objekten was gemacht. Mach mich aber schlau und such weiter ob ich was finde.

DANKE
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe JDBC Connector von Maven Repo importieren Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben