keine Verbindung S7-1200 mit Windows-Anwendung( libnodave+VS2008/2010 c#)

jbo

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich versuche zur Zeit im Rahmen eines Schulprojekts eine S7-1200 (1212C AC/DC/RLY) mittels eines Programms, geschrieben in c#, zu verbinden um Daten zu lesen bzw zu schreiben.
Dazu benutze ich VS c# mit libnodave. Es befinden sich beide dll im debug-Ordner, und die libnodave.net.dll ist als Verweis hinzugefügt.
Das Programm orientiert sich an einem Prog eines Users das laut seiner Aussage in der gleichen Kombination funktioniert.
Verbunden ist das ganze per Ethernet, soll also per ISO over TCP laufen.

Problem: der Befehl dc.connectPLC() liefert nur -1

Probiert habe ich: diverse Kombinationen Rack/Slot da teils unterschiedliche Aussagen welche denn lauffähig ist; VS 2008,VS2010( dabei jeweils auf 32bit umgestellt da System 64 bit), VMWare mit XP32bit und VS2010

mit TIA Portal kann ich alles wunderbar programmieren und auch online Veränderungen der Eingänge/Variablen im DB beobachten.

Spassershalber habe ich einmal Wireshark während des Verbindungsversuchs laufen lassen, dabei liefert schon der Befehl connectPLC() an die SPS ein malformed Packet oder Wireshark kann damit einfach nix anfangen. Nach erhalt es Pakets führt die SPS scheinbar einen RESTART aus( auch wenn ich optisch an der SPS nicht sehe) und das wars dann.
Ich habe schon dieses und auch jede Menge englischsprachige Foren durchsucht, es gab zwar einige mit dem gleichen Problem aber nix was mir zu einer Lösung verholfen hat.
Ich muss gestehen, dass sich meine Kenntnisse in c# als auch SPS nur auf den Schulunterricht begrenzen(c# halbes Jahr; SPS 1,5 Jahre)
Müssen denn in der SPS bzw im Projekt bestimmte Sachen eingestellt werden um das ganze lauffähig zu machen( TCON? )
Die Toolbox habe ich mir auch runtergeladen muss aber ebenfalls gestehen das ich nur Bahnhof versteh wie die zu verwenden ist. Von den Beispielprogrammen ist auch keins lauffähig, da kommt direkt ne Fehlermeldung von Win7
Und es gibt noch 2 große Fragezeichen: einmal gibt es in der libnodave Funktionen die mir als protected angezeigt werden, z.b daveReadBytes(....), daveconnectPLC(),...
die auch einige User verwendet haben. Ich kann die aber gar nicht benutzen-> VS meldet Zugriff aufgrund der Sicherheitsebene nicht möglich
Was mach ich da falsch??
und zum anderen diese Befehle:
a = dc.getS32();
b = dc.getS32();
c = dc.getS32();
d = dc.getFloat();
(nach: res = dc.readBytes(libnodave.daveFlags, 0, 1, 16, null);
die ich überhaupt nicht verstehe. wieso der gleiche Befehl dreimal ?und dann float-weiss jetzt nicht ob der Lesebefehl dafür korrekt ist, hab viel rumgebastelt aber lief ja nix zum testen- was liest der denn da in die vier Variablen ein???? Vielleicht ein Beispiel damit ich das verstehe :)


Vielen Dank schonmal im Vorraus ( ich weiss, is bissl was zum lesen)

Hoffe jemand kann mir helfen, bin sonst echt am A...
 
Poste doch mal etwas Code wie du vorgehst.

Was meinst du mit die ToolBox hab Ich mir runtergeladen? meist du damit meine SiemensPlcToolbox? Wenn ja, die Beispiele darin sollten sich eigendlich alle compilieren lasen, und auch laufen. Du musst bei vielen aber noch die libnodave_jfkmod (oder die 64er je nach compilier option) in das bin verzeichnis kopieren. Falls sie nicht compilieren, was läuft denn schief?

TCON solltest du nicht brauchen, du kannst aber nur auf DB zugreifen welche absolut adressiert werden, nicht auf vollsymbolische!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
VS2010 kann egal bei welchen Prgramm die Test.vbproj nicht öffnen weil der Projekttyp nicht unterstützt wird.
VS2008 kann den Verweis nicht finden, obwohl ich die sogar schon mal neu hinzugefügt hab und auch mal in den debug ordner reingepackt hab.

Die Geschichte mit der absoluten Adressierung hab ich schon berücksichtigt. Kann mich aber nicht mal mit der SPS verbinden um in den Genuss diesen Fehlers zu kommen.

Hier mal ein Ausschnitt mit den wesentlichen Prog.text:
libnodave.daveOSserialType fdss;
libnodave.daveInterface dii;
libnodave.daveConnection dcc;

int a = 0, res, b = 0, c = 0;
float d = 0;
fdss.rfd = libnodave.openSocket(102, "192.168.0.1");
fdss.wfd = fdss.rfd;
if (fdss.rfd > 0)
{
dii = new libnodave.daveInterface(fdss, "IF1",0, libnodave.daveProtoISOTCP , libnodave.daveSpeed187k);
dii.setTimeout(5000);
res = dii.initAdapter();

dcc = new libnodave.daveConnection(dii, 0,0,2);
dcc.connectPLC();

if (0 == dcc.connectPLC())
{
MessageBox.Show("läuft");
res = dcc.readBytes(libnodave.daveFlags, 0, 1, 16, null);


danach kommt noch bissl mehr( auslesen, abfragen etc aber unwichtig), aber mein Problem ist der Befehl connectPLC() der mir ne null liefern müsste wenn es funktioniert und das macht er nicht....
 
Hallo,
ich hatte - allerdings mit einer S7 200 - das Problem, dass ich keine Verbindung mit Libnodave aufbauen konnte wenn MicroWIN lief. Ich weiß S7 200 und S7 1200 sind zwei paar Stiefel, aber vielleicht ...
 
benutze ja nur TIA Portal, und habs auch meist gar nicht offen gehabt zum testen.

Sonst hat keiner eine Idee??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Versuch mal mit Rack = 0 und Slot = 0.
Da gibt es garnichts zu versuchen, denn Siemens schreibt in seinen Handbüchern eindeutig Rack 0 und Slot 1.

Siehe im PDF bezüglich Konfiguration des OPC-Servers mit Step7 5.5:
Siemens Industry Online Support - Wie binden Sie eine PC-Station über OPC an eine S7-1200 an?

Dann funktioniert der Zugriff auf Merker oder Datenbausteine mit 300/400 kompatiblem Bausteinzugriff einer S7-1200 mit libnodave tadellos.
 
Funktioniert bei meiner ja auch, ich würde mich aber nicht darauf verlassen dass es bei neueren Firmwareständen so bleibt. Vielleicht ist es ein Fehler gewesen ;-)
 
dii.setTimeout(5000);
setzt das timeout in MIKROSEKUNDEN. 5000=5ms. Das wird wohl VIEL zu wenig sein. Im Beispiel simpleISO_TCP.cs ist die Timeout-Zeit auf 1000000, also 1s gesetzt. Zumindest im Original-Code von Libnodave ist das so.
Hast du den allerersten Punkt in den FAQ.de.txt gelesen, verstanden und ausgführt? Geht es mit den vorkompilierten Testprogrammen? Ich meine damit >testISO_TCP.exe --slot=1 <IP deiner CPU>
Egal, ob es geht oder nicht, als nächstes:
testISO_TCP.exe -d --slot=1 <IP deiner CPU>
Die Ausgabe anschauen, posten, mit der des eigenen Programms vergleichen.
 
Hi Zottel,

Die Zeit hab ich irgendwann zum testen mal geändert in der Hoffnung da würde sich was tun, hatte sie anfangs auf 1000000,
ok der 1.Befehl: 1st parameter --
fds8
fds.rfd 0
fds.wfd 0
Couldn´t establish connection to slot=1
( das selbe bei slot 0 oder 2)

der 2.Befehl:
1st parameter -d
turning debug onf
ds8
openSocketw.c: enter OpenSocket
openScoketw.c: 1
openSocketw.c: 2 6600
openSocketw.c: peer:192.168.0.1=16820416
openSocketw.c: 6
openSocketw.c: 7
openSocketw.c: socket is 120
openSocketw.c: setsockopt No error 0
openSocketw.c: 8
openSocketw.c: connected to host= 192.168.0.1
fds.rfd 120
fds.wfd 120
send pecket: :
0:0x03;0x00........
10:0x02,0x01,0x02,0xc0,0x01,0x09,
timeout in ReadISOPacket
IF1 daveConnectPLC() step1, got packet: :
IF1 error in daveConnectPLC() step 1. retrying...timeout in ReadISOPacket.
(und das ganze dann noch 2mal, endet mit retrying...)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht interessiert es ja noch mehr Leute, wie man die Testprogramme nutzt. Hier eine Anleitung mit Bildern:

1. Du öffnest im Windows-Startmenü "Ausführen"
2. Du gibst "cmd" ein. An diesen Punkt kommst du in XP auch über Zubehör/Eingabeaufforderung.
3. Du hast jetzt ein Kosolenfenster wie dieses (Screenshot cmd.gif)
cmd.GIF
4. Darin zum Ort wechseln, wo du libnodave abgespeichert hast, darin zum Verzeichnis win (cmd2.gif)
cmd2.GIF
5. Jetzt kannst du das Testprogramm testISO_TCP.exe mit der IP-Adresse deiner SPS aufrufen (cmd3.gif). Bei mir hat es mit dem default-mäßigen Slot 2 funktioniert.
cmd3.GIF
6. Mit --slot=1 kannst du eine Slot-Nummer angeben: Hier funktioniert es dann aber nicht mehr...(cmd4.gif)
cmd4.GIF
7. Wenn du wissen willst, was genau passiert, füge Option -d hinzu (cmd5.gif). Man sieht die Daten enes Paketes, das an die SPS gesendet wird, aber die SPS antwortet nie: "timeout in ReadISOpacket".
cmd5.GIF
8. Wenn du die Ausgabe mit der Debug-Option in eine Datei leiten willst, hängst du ">degug.txt" an die Befehlszeile an (cmd6.gif).
Du wirst keine Ausgabe mehr sehen. Statt dessen wurde die Datei debug.txt geschrieben, die ich hier auch anhänge.

Schade, ich darf nur 5 Dateien anhängen...
 
Also gehts hier weiter...
8. Wenn du die Ausgabe mit der Debug-Option in eine Datei leiten willst, hängst du ">degug.txt" an die Befehlszeile an (cmd6.gif).

Du wirst keine Ausgabe mehr sehen. Statt dessen wurde die Datei debug.txt geschrieben, die ich hier auch anhänge.cmd6.GIF
Anhang anzeigen debug.txt
 
....
couldn´t establish connection to slot=1
Es muß schon das Programm testISO_TCP.exe aus dem Unterverzeichnis libnodave-0.8.4.6/win sein.
Entweder hast du ein anderes benutzt oder gar keine IP-Adresse angegeben.
In dem Zitat wurde jedenfalls versucht "slot=1" als IP-Adresse zu benutzen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
in dem pascal-ordner war auch eine exe... :)
aber jetzt hab ichs denk ich..Anhang anzeigen debug0.txtAnhang anzeigen debug.txt
hoff mal das funktioniert... also sollte sein einmal: debug.txt mit slot=1 und einmal debug0.txt mit slot=0

hatte jetzt auch gelesen das es probleme gibt wenn der port belegt ist, bei mir spielt da ein Siemens-Programm mit rum: s7oiehsx64.exe. Kann das möglich sein??
 
Zuletzt bearbeitet:
in dem pascal-ordner war auch eine exe... :)
Ja, die ist halt mehr als Beispiel für Pascal-Programmierer gedacht. Sie hat nicht denselben Funktionsumfang.
aber jetzt hab ichs denk ich..
Beide sehen gut aus. Offenbar geht es mit beiden Slot-Nummern. Würde aber dem Argument von Thomas_v2.1 folgen und die Nummer nehmen, die Siemens für den OPC-Server vorschlägt.
...: debug.exe mit slot=1 und einmal debug0.exe mit slot=0...
Generell sollte die Erweiterung .exe ausführberen Dateien vorbehalten sein?!?
hatte jetzt auch gelesen das es probleme gibt wenn der port belegt ist, bei mir spielt da ein Siemens-Programm mit rum: s7oiehsx64.exe. Kann das möglich sein??
Mmmh... An sich können mehrere Programme eine Verbindung zur SPS aufbauen, sowohl auf TCP als auch S7-Ebene. Ich weiß aber nicht, wo bei einer 1200 die Grenze ist.
Eine andere Sache ist, daß ich manchmal Schwierigkeiten hatte, daß eine S7-Softsps nach dem Start nicht kommunizierte, weil ein anderes Programm auf Port 102 hörte.
 
Generell sollte die Erweiterung .exe ausführberen Dateien vorbehalten sein?!?
hatte mich verschrieben, is ja schon etwas fortgeschritten die zeit:)

ich teste jetzt mein Prog mal auf nen anderen pc wo definitiv kein Siemens läuft, der Port is auf jeden Fall frei das hab ich schon gescheckt.

btw vielleicht kannst du mir beim Verständnis von einem Codeteil helfen(hab ich so von nem anderen User übernommen):

res = dc.readBytes(libnodave.daveFlags, 0, 1, 16, null);

if (res == 0)
{
a = dc.getS32();
b = dc.getS32();
c = dc.getS32();
d = dc.getFloat();

tb_a.Text = a.ToString();
tb_b.Text = b.ToString();
tb_c.Text = c.ToString();
tb_d.Text = d.ToString();
ich versteh nicht so ganz wieso ich den getS32() befehl 3 mal (+den getFloat() ) aufrufe und jeweils in ne andre Variable packe. in welcher form liegen denn die Daten die man über den ReadBytes befehl ausliest vor?
 
Zurück
Oben