# S7 Connector



## vikil (15. Aug 2014)

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?


```
[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 (15. Aug 2014)

Moin,

auch wenn Du nicht schreibst, in welcher Zeile die Exception genau auftritt, sollte 

```
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


----------



## vikil (15. Aug 2014)

Danke erst mal.
Ja du hast Recht. Aber laut Doku muss ich doch ein String übergeben oder siehe Seite 11
Methode read("String").
Mit einer Variabler Funktioniert es auch, nur bei mehreren nicht

https://www.yumpu.com/en/document/vi...s7connector/25


----------



## VfL_Freak (15. Aug 2014)

Moin,



vikil hat gesagt.:


> 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:

```
// 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


----------



## vikil (15. Aug 2014)

MW1000 / E4.0"-> in SPS sind es MerkerWord1000 und Eingang 4.0


----------



## vikil (15. Aug 2014)

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..


----------



## kaoZ (15. Aug 2014)

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 :


```
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) :
> ...




Alles Klar hast du schon gemeldet ^^ hatte ich zu spät gesehen


----------



## vikil (16. Aug 2014)

Hallo kaoZ,
Danke erst mal. Ich habe mich auch über die Darstellung auch gewundert. Kommt denke ich durch die Umstellung.
ja aber so wie ich es aus der Doku rausgelesen habe, muss ich die Werte so übergeben siehe Bild. und Doku.
https://www.yumpu.com/en/document/view/19143435/autoccs7connector/3


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


----------



## VfL_Freak (16. Aug 2014)

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 (16. Aug 2014)

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


----------



## kaoZ (16. Aug 2014)

> 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 (17. Aug 2014)

> 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 (18. Aug 2014)

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

DANKE


----------

