DotNetSiemensPLCToolBoxLib Connection

mlsoftware

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

Ich bin neu hier und gleich eine Frage.
Ich benutze die DotNetSiemensPLCToolBoxLib und möchte per IP zu meiner S7-300 die Kommunikation aufbauen. Jedoch kommt immer ein ERROR: TIMEOUT CONNECTING TO IP was mache ich falsch? Kann mir jemand tipps geben?!? Danke schon mal

Gruss mlsoftware

PLCConnectionConfiguration myconfig = new PLCConnectionConfiguration();
myconfig.Timeout = 10000;
myconfig.CpuIP =
"192.168.1.100";
myconfig.TimeoutIPConnect = 10000;
PLCConnection myConn = new PLCConnection(myconfig);

try
{
myConn.Connect();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex);
}
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die schnelle Antwort.
Habe die Firewall meines PC's ausgeschalten, bringt auch nichts.

Mit Libnodave hatte ich kein Problem mit der Verbindung aber leider mit dieser Library schon :( sonst noch ne idee?
 
Hallo,

versuche gerade von Libnodav auf DotNetSiemensPLCToolBoxLib umzustellen, habe aber schon Probleme eine Verbindung zur SPS herszustellen.

Im Anhang mal ein Bild mit meinem Code und der Fehlermeldung.

Kann mir jemand sagen was ich falsch mache?

fehlerVerbindung.jpg
 
Die Variable timeout ist in uS, d.h. wahrscheinlich ist sie zu klein. Defaultwert ist "5000000" Der Timeout IPConnect ist in mS!
Der unterschied kommt daher, das eine ist der Timeout welcher an libndave geht, der andere mit dem ich den socket connect abbreche!
 
Hallo,

versuche gerade von Libnodav auf DotNetSiemensPLCToolBoxLib umzustellen, habe aber schon Probleme eine Verbindung zur SPS herszustellen.

Im Anhang mal ein Bild mit meinem Code und der Fehlermeldung.

Kann mir jemand sagen was ich falsch mache?

Anhang anzeigen 18380

Sorry, war noch ein fehler wenn man in der ConnectionConfig keinen Namen einträgt! Dann wurde Null an eine C Funktion übergeben! Ist nun gefixt!
 
Nochwas:

Du weist aber auch das du mit
Code:
Configuration.ShowConfiguration("SimpleCSharpDemonstrationConnection", true);

Eine Oberfläche zum einstellen nutzen kannst!

dann kannst du so die verbindung verwenden:
Code:
  myConn = new PLCConnection("SimpleCSharpDemonstrationConnection");
                myConn.Connect();

Oder du kannst auch

Code:
Configuration.ShowConfiguration(myConfig);

das von dir erzeugte Config Objekt bearbeiten. Dann sollte aber beim myConfig Objekt der Parameter "myconfig.ConfigurationType = LibNodaveConnectionConfigurationType.ObjectSavedConfiguration;" gesetzt sein, sonst wird versucht die Config global zu speichern!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mit der Oberfläche das ist mir bekannt, ich schreibe aber ein kleines Tool welches nur aus einer bestimmten Steuerung Daten auslesen und anzeigen soll. Der Anwender dieses Tools weis nichts von IP-Adressen, Racks , Slots u.s.w.

Werde das morgen erst testen können.
 
Hallo Jochen,

Verbindung herstellen funktioniert jetzt!

Kannst du mit noch einen Tip geben wie ich mit DotNetSiemensPLCToolBoxLib mehrere Integer aus einem DB auslesen und in einem Array in VB.NET speichern kann, anbei mal ein Codebeispiel wie ich das mit Libnodave gemacht habe.

Ich möchte halt nicht jeden Wert einzeln definieren und auslesen.

Kann mir jemand sagen was ich falsch mache??
 

Anhänge

  • Codebeispiel.jpg
    Codebeispiel.jpg
    45,3 KB · Aufrufe: 24
Zuletzt bearbeitet:
Code:
List<PLCTag> tags = new List<PLCTag>();
            PLCTag tag = new PLCTag("P#DB851.DBW0");
            for (int n=1;n<20;n++)
            {
                tag.LibNoDaveDataType = DotNetSiemensPLCToolBoxLibrary.DataTypes.TagDataType.Int;
                tags.Add(tag);
                tag = new PLCTag(tag);
                tag.ByteAddress += 2;
            }


            myConn.ReadValues(tags);
            myConn.Disconnect();
 
Hat geklappt, vielen Dank, man muss da ein bisschen umdenken gegenüber Libnodave aber grundsätzlich wird der Zugriff auf die CPU schon erleichtert.
 
Ok, hab mal einen "Basic" Array-Support! Schreiben geht noch nicht, aber auslesen. Eichfach ArraySize des PLCTag Objektes auf den gewünschten wert stellen!
 
Hallo,

habe ein Tool geschrieben welches mir jede Sekunde ein paar Daten aus einem DB liest. Das funktioniert soweit auch ganz gut nur wenn es länger läuft (1 Tag) ist die Prozessorauslastung sehr hoch. Habe mit einem Memory Profiler festgestellt das Instanzen von PLCTag nicht gelöscht werden. Meine Connection halte ich offen, wollte nicht jede Sekunde neu verbinden.

Habe mal einen Teil meines Codes und ein sceenshot vom Profiler im Anhang.

Kann mir jemand sagen was ich falsch mache?

ProgrammAusschnitt.jpg Deklaration.jpg Profiler.jpg
 
Zuletzt bearbeitet:
Klar, brauche meine Liste Abrüstplatztyp ja nur einmal füllen und dann jede Sekunde verwenden. Habe jetzt den Codeabschnitt aus vorherigem Post in die Sub Form_Load verschoben und schon funktioniert es.
Hatte vorher die Liste Abruestplatz am Ende der "Sub Timer_Tick" mit "Abruestplatz = Nothing" abgelöscht, hatte aber nicht funktioniert, diese Zeile musste ich jetzt natürlich löschen.

Also vielen Dank, manchmal sieht man den Wald vor lauter Bäumen nicht.
 
Klar, brauche meine Liste Abrüstplatztyp ja nur einmal füllen und dann jede Sekunde verwenden. Habe jetzt den Codeabschnitt aus vorherigem Post in die Sub Form_Load verschoben und schon funktioniert es.
Hatte vorher die Liste Abruestplatz am Ende der "Sub Timer_Tick" mit "Abruestplatz = Nothing" abgelöscht, hatte aber nicht funktioniert, diese Zeile musste ich jetzt natürlich löschen.

Also vielen Dank, manchmal sieht man den Wald vor lauter Bäumen nicht.
Ich schau dann trotzdem mal ob's da ein memoryLeak mit PLCTag Objekten gibt...
 
Zurück
Oben