Verbindungsprobleme Libnodave SPS

Peter1234

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

Ich habe eine SPS S7-1200. Und kann erfolgreich mit libnodave werte auslesen oder schreiben.
Mein Programm pollt alle 30 sec, die SPS und holt sich Messwerte. Soweit so gut.
Hin und wieder ( 1x Mal am Tag mindestens scheint sich was zu verhängen auf der SPS und ich kann keine Werte mehr holen.

Mein Code zum Verbinden:

fds.rfd = libnodave.openSocket(102, this.IP);
fds.wfd = fds.rfd;
if (fds.rfd > 0)
{
di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
di.setTimeout(100000000);
dc = new libnodave.daveConnection(di, 0, rack, slot);
int connResult = dc.connectPLC();
if (0 ==connResult)
{

ConnResult ist in diesem Fehlerfall dann -1 und sollte ich da trotzdem einen Leseversuch starten, bekomme ich den Fehler, Es wurde versucht einen geschützten Speicherbereich zu lesen oder so ähnlich. Ich glaube aber das das nur ein folge der defekten Verbindung ist.
Dieses Problem verschwindet erst wieder wenn ich die SPS komplett Stromlos schalte und dann neu starte. Step7 kann aber während dieser Phase immer daten Lesen.

Hat Irgendeiner von euch SPS / Libnodave Profis eine Idee?

wünsche noch einen Guten Abend

Peter
 
...

Hallo,

Peter1234 schrieb:
scheint sich was zu verhängen auf der SPS und ich kann keine Werte mehr holen.

Peter1234 schrieb:
Step7 kann aber während dieser Phase immer daten Lesen.

Daraus folgt, das sich nichts auf der SPS verhakt, sondern eher in Deiner Applikation. Mal eine Frage : Öffnest Du zu jedem Lesen die Verbindung und schließt die anschließend wieder ?

Peter1234 schrieb:
ConnResult ist in diesem Fehlerfall dann -1 und sollte ich da trotzdem einen Leseversuch starten, bekomme ich den Fehler

Und genau deshalb musst Du in Deiner Applikation verhindern, bei einer nicht bestehenden Verbindung (und das ist die Aussage ConnResult = -1), noch weitere Lese/Schreibaufträge zu starten, Du schreibst dann in nicht initiierte Speicherbereiche Deiner Applikation.
Und das mit dem Wert für den Timeout solltest Du Dir auch nochmal überlegen

Gruß

Question_mark
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja ich baue die Verbindung jedesmal neu auf und wieder ab. Mein Verdacht lag auch zuerst mal bei meinem Programm, aber die SPS nimmt auch keine Libnodave verbindungen mehr von einem anderen PC und anderen Programm mehr an.

Das das Timeout zu hoch ist, ist mir klar aber bei 1 Sek war es das selbe, das scheint es nicht zu sein.
 
Grundlagen ...

Hallo,

Peter1234 schrieb:
Ja ich baue die Verbindung jedesmal neu auf und wieder ab.

Das habe ich auch schon befürchtet :rolleyes:

Es gibt keinen vernünftigen Grund, die Verbindung für jeden Schreib/Lesezugriff aufzubauen und danach wieder zu schließen. Sowas ist absoluter Unfug. Baue beim Start Deiner Applikation die Verbindung auf und schließe die Verbindung erst beim Beenden Deiner Applikation. Und wenn Deine Applikation ein paar Jahre durchläuft, dann bleibt auch die Verbindung ein paar Jahre bestehen. Und so soll es auch sein, jedenfalls wenn man ein Grundverständnis für den Begriff "Verbindung" hat.

Peter1234 schrieb:
aber die SPS nimmt auch keine Libnodave verbindungen mehr von einem anderen PC und anderen Programm mehr an.

Wie ich schon im vorigen Beitrag geschrieben habe, liegt das nicht an der SPS sondern an LibNoDave oder eher wahrscheinlich an Deiner Applikation.

Gruß

Question_mark
 
Also an dem Timeout musst Du noch arbeiten

Hallo,

Peter1234 schrieb:
Das das Timeout zu hoch ist, ist mir klar aber bei 1 Sek war es das selbe, das scheint es nicht zu sein.

Eine Sekunde ist auch Unsinn und kann im Ethernet nicht funktionieren. Bis das OS im PC die Ressourcen für diese Verbindung freigegeben hat und mit der gleichen Verbindung wieder belegt werden kann, vergehen einige Sekunden. Stelle den Timeout auf 10 sec. ein, das ist ein guter Wert.
Es gibt zwar Wege, diese Ressourcen direkt wieder verfügbar zu machen, aber damit will ich Dich jetzt nicht belästigen.

Gruß

Question_mark
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Was mir da noch so auffällt

Hallo,

=Peter1234 schrieb:
di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);

Ich kenne jetzt die LibNoDave nicht exakt im Detail, aber mir springt da nur ins Auge : Protokoll = ISOTCP, aber Speed = 187k (also MPI) ?

Vielleicht gibt es dafür eine vernünftige Erklärung, da ich mich nicht wirklich intensiv mit LibNoDave beschäftigt habe (das Ding ist mir zu unhandlich, das könnte man alles anwenderfreundlicher machen, aber Ok, ist eben für Umme) fällt mir nur so auf den ersten Blick dieser Widerspruch auf. Vielleicht kann uns der Zottel den Zusammenhang etwas besser erklären.

Gruß

Question_mark
 
mir springt da nur ins Auge : Protokoll = ISOTCP, aber Speed = 187k (also MPI) ?
[...]
Vielleicht kann uns der Zottel den Zusammenhang etwas besser erklären.
Bei daveProtoISOTCP wird der letzte Parameter daveSpeed187k natürlich nicht benötigt. Es ist tatsächlich egal, was man da einsetzt.
Damit es nicht für jedes Protokoll eine andere daveInterface() gibt, hat Zottel das eben so gelöst, daß daveInterface() immer mit
5 Parametern aufgerufen wird, egal ob benötigt oder nicht.
Auf diese Art läßt sich das eigene Programm ohne große Änderungen am Quelltext schnell auf andere Protokolle und Verbindungswege
umstellen. Ich meine, das hat Zottel auch schon mal irgendwo hier im Forum geschrieben.

Harald
 
Guten Morgen!

Ich hab mein Programm grad umgebaut und warte jetzt mal ob das wieder auftritt, was ich befürchte.
Falls es das mit dem permantenten Verbinden nicht ist, hier noch einige Zusatzinformationen.
Der Fehler tritt unter linux und auch unter Windows auf. Mein Programm kommuniziert mit mehreren SPSen über LAN oder VPN. Damit bei einem Crash in Libnodave (unmanaged Code) nicht auch mein Programm in c# mitstirbt (trotz try catch) habe ich den Libnodave code in ein eigenes Programm ausgelagert welches regelmäßig angestoßen wird. und Daten von nur einer SPS holt. Es besteht immer nur eine Verbindung mit einer SPS.

Kann das sein das das mit mehreren Spsen gleichzeitig ein Problem ist?

Das mit der Speedeinstellung habe ich auch schon so irgendwo gelesen.

Ein Workaround, der mir aber nicht gefällt wäre es die SPS von Remote zu booten, oder mit einer Art Watchdog zuversehen ( 5 min kein Rücksetzen eines Wertes => reboot).

Gruß Peter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was zeigen denn die Verbindungsresourcen deiner CPU an wenn Libnodave keine Verbindung mehr aufbauen kann?

Ich denke fasst dass die Verbindungsresourcen deiner CPU erschöpft sind da evtl. eine Verbindung nach einem Hängen deiner Anwendung nicht mehr frei gegeben wird.

Step7 geht dann immer, da eine Verbindung immer für das PG frei gehalten wird.
 
Hi

Das hört sich sehr nach meinem Problem an. Ich mache zwar Serverseitig die Verbindungen auch wieder zu, aber bei einem Crash, bleibt da vielleicht was zurrück. Ich hatte gestern vor dem Ausfall 4 -6 Solche Verbindungsunterbrechungen laut meinem Log.

Wo im Step 7 finde ich das? Und gibt es eine möglichkeit diese Ressourcen aus dem SPS Programm her wieder freizugeben, damit das automatisch geht?

Grüße Peter
 
Aktuelle Verbindungen findest du unter "Zielsystem-Diagnose/Einstellung-Baugruppenzustand" (oder einfach auf die CPU-Klicken und Ctrl-D).
Dort im Reiter "Kommunikation" Gibt es den Bereich "Verbindungs-Ressourcen".

Alte CPUen hatten da immer sehr viel für die S7-Basis-Kommunikation reserviert.

Vergleich dann mal reserviert mit belegt!

Einstellen kann man das im Hardwaremanger unter den Eigenschaften der CPU (auch Reiter Kommunikation).

Was ich aber nicht weiß (evtl. kann ja ein Kollege weiter helfen) ob die CPU die Resource wieder frei gibt nach einem Timeout oder ob man dies in der SPS per SFC lösen kann.

Aber die CPU jedes mal neu starten ist sicherlich keine Lösung die ich anstreben würde.

Viel Erfolg!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Er hat ja eine S7-1200, ob es da diese Diagnosefunktion auch so gibt?

Wo ich bei der Beschreibung "VPN-Verbindung" lese: läuft die Verbindung z.B. über eine DSL-Strecke die einmal täglich getrennt wird?

Ich hatte schonmal eine Kommunikationsbaugruppe (Sinaut TIM) die nach einem Timeout in der Kommunikation bis zu eine Stunde benötigte bis die Ressourcen wieder freigegeben wurden, solange ließen sich mit der Station keine Daten austauschen - ein Ping war jedoch erfolgreich. Das war ein Fehler in der Firmware der Baugruppe.
Vielleicht gibt es so eine Art Problem auch bei der S7-1200.

Zur Not würde ich einfach mal für einen Tag Wireshark mitlaufen lassen. Mit einem entsprechenden Aufzeichnungsfilter hält sich die Datenmenge in Grenzen.
 
Huch - peinlich! Stimmt 1200er habe ich ganz überlesen!

Nehme alles zurück und behaupte das Gegenteil!

Sorry, aber etwas in der Art wird es doch wohl im TIA auch geben oder?
 
Die Siemens sagt das das schon so sein kann das da Ressourcen offen bleiben wenn eine Verbindung unterbrochen wird. Und ein auf Stop setzen reicht offenbar nicht aus um die Ressourcen wieder freizubekommen.

Wenn ich nur kurz die Verbindung trenne kann ich sie soffort wieder herstellen. Im anderen Fall ist das nach Tagen immer noch blockiert.
 
Zurück
Oben