Step 7 mit S7PROSIMLib Werte von PLCSIM auslesen und schreiben

kurmanpa

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

Gerne möchte ich mit ein CSharp-Programm schreiben, welches dem PLCSIM Input-Werte vorgibt und Output-Werte auslesen kann.

Ich benutze folgende Library: S7PROSIMLib
Die Verbindung kann ich aufbauen und auch den Status der CPU auslesen.

Wie kann ich jedoch mit "ReadFlagValue" den Wert am Eingang E0.0 auslesen. Das ganze ist laut Doku CPU-Abhängig (ich benutze eine CPU315-2 DP) . Weiss jemand, wo ich das nachschlagen kann, bzw. welche Werte ich für E0.0 setzten muss?

Besten Dank für eure Hilfe!


Mein momentaner Code:


private void button1_Click(object sender, EventArgs e)
{
S7ProSim ps = new S7ProSim();
System.Object pData = new System.Object();


// Verbindung zu PLCsim herstellen
ps.Connect();


ps.ReadFlagValue(0, 0, PointDataTypeConstants.S7_Bit, pData);
ps.Disconnect();
}-
 
Über die S7PROSIMLib kannst du auf Eingänge nur schreibend und auf Ausgänge nur lesend zugreifen. Damit man im Programm diese geschriebenen Eingänge auch lesen kann, muss auch eine entsprechende Hardware vorhanden sein. Die E/A Karte muss dazu im Rack sitzen oder eine Profibus Baugruppe sein, und die Hardware in Plcsim geladen werden. Profinet-Baugruppen lassen sich nicht simulieren!

Hört sich vielleicht seltsam an, aber für eine Anlagensimulation ist das so durchaus sinnvoll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, danke für die Antwort.

Ich habe nun mit folgendem Statement versucht, den Eingang E0.0 zu schreiben, ich sehe jedoch in PLCSIM keine Änderung...

ps.WriteFlagValue(0, 0, pData);

Was mache ich falsch...?
 
Mit WriteFlagValue schreibst du auf Merkerbereiche und nicht auf Eingänge.

Die Write-Methoden überprüfen den Datentyp des Funktionsparameters pData.
So steht es im Handbuch geschrieben:
"Pointer auf die zu schreibenden Daten. Die gültigen Werte für Data richten sich nach dem Datentyp."

Wenn der Parameter vom Datentyp Int16 ist werden zwei Bytes in der SPS geschrieben, bei einem Int32 4 Bytes usw. Mit einem generischen Object wie du ihn verwenden willst kann die Funktion nichts anfangen und macht darum nichts.

Wenn vorher der Verbindungsaufbau geklappt hat, sollte folgendermaßen der Wert 123 in das Merkerwort 0 geschrieben werden können:
Code:
Int16 value;
value = 123;
ps.WriteFlagValue(0, 0, value);

Hier mal ein ganz einfaches Beispiel:
http://www.sps-forum.de/simatic/39542-s7prosim-visual-studio-c.html#post285758

Und hier habe ich noch ein Programmbeispiel gepostet, in dem die ganze Plcsim Anbindung nochmal in eine eigene Klasse gekapselt ist (Klasse in Plcsim.cs):
http://www.sps-forum.de/simatic/42179-programm-simulation-test-3.html#post324968
 
Zurück
Oben