Merker/Datenbaustein/libnodave S7-200

rampage

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo nochmal =)

System ist immernoch Step7-Micro/Win 32 V3.2.4.27, eine S7-200 CPU 224, dazu ein EM223 und ein CP243-1...

Wenn ich mit libnodave/delphi meine Merker auslesen bzw. setzen will... muss ich die Merker dann erst in einen Datenbaustein schreiben? Und wenn ja... wie mach ich das?

Kommunikation SPS/PC funktioniert problemlos... und das Test-Programm bei libnodave auch... nur auslesen lässt sich ja da nur irgendwie der DB :confused:


grad erst angefangen mit S7 und schon (fast) die Nase voll :(
 
Das ist richtig, du kannst Merker und der gleichen nicht direkt aus der CPU auslesen, sondern musst den Umweg über den Datenbaustein nehmen.

Bei der 200er Reihe gibt es hier allerdings nur den DB1, der ist Standardmäßig bei jedem Projekt angelegt.
Du findest ihn üblicherweise Links am Bildschirmrand in der Auswahlleiste zwischen "Statustabelle" und "Systemdatenbaustein".

Am PC musst du nun, beim OPC Server, einstellen das er die Daten im DB1 abholen soll und in welchem bereich.

Als Datenbereich musst VB´s verwenden.

So kannst du zum Beispiel den Status eines bestimmten Merkerbyte vom SPS Programm aus in ein Variablenbyte übertragen:

LD M0.0
MOVB MB1, VB1

Auf das VB1 kannst du dann über den OPC Server vom PC aus zugreifen.
Hier kann die Programmierung jedoch je nach eingesetztem Hersteller variieren.

Vielliecht kann dir auch dieser Beitrag helfen:

http://sps-forum.de/showthread.php?t=16225

Gruß smartie
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo nochmal =)

System ist immernoch Step7-Micro/Win 32 V3.2.4.27, eine S7-200 CPU 224, dazu ein EM223 und ein CP243-1...

Wenn ich mit libnodave/delphi meine Merker auslesen bzw. setzen will... muss ich die Merker dann erst in einen Datenbaustein schreiben? Und wenn ja... wie mach ich das?

Kommunikation SPS/PC funktioniert problemlos... und das Test-Programm bei libnodave auch... nur auslesen lässt sich ja da nur irgendwie der DB :confused:


grad erst angefangen mit S7 und schon (fast) die Nase voll :(
Hääähhh? Das Testprogramm testPPI von Libnodave liest MERKER, und zwar die ersten 16 Merkerbytes. Was die Delphi-Komponente tut weiß ich Moment nicht, aber sicher kann man das einstellen.
 
hallo,
du kannst merker mit libnodave ansprechen, bei 0.72 von libnodave hauten nur zeiten und zähler nicht richtig hin, aber sonst alles
@ smartie: libnodave ist kein opc server
 
Sorry, ich bin ganz pauschal von einer OPC Verbindung ausgegangen.

Aber wie heisst es doch so schön : Errare humanum est. ;)

Gruß smartie
 
Guten Morgen,

erstmal vielen Dank für eure Antworten... :)

Hab das mit dem Delphi Testprogramm nochmals probiert, sobald ich da was anderes einstelle als den DB, dann erscheint unten eine Fehlermeldung sinngemäß "not available for this PLC (200 serie)". Daten werden zwar gelesen, aber es sind immer wieder dieselben aus dem DB, wenn der einmal ausgelesen wurde.

Den DB kann ich dann aber wie gesagt auslesen. 157 Bytes davon sind ja mit der Konfiguration der CP schon belegt, hab jetzt meine Merker in einem extra Unterprogramm in die VBs des DB übertragen, und zwar von VB160 an (hab nur 8 Merkerbytes belegt), und kann dann über das Delphi Testprogramm die VBs von VB160 an auslesen. Funktioniert einwandfrei :)

Vielen Dank an alle Beteiligten! :)

Was mir gerade noch aufgefallen ist... ist das richtig, dass meine Symboltabelle weg ist, sobald ich das Programm AUS der CPU lade? Also, die Symboltabelle wird nicht übertragen? Gut, die CPU wird's wahrscheinlich sowieso nur ohne symbolische Adressierung abarbeiten können.

@smartie:

Eine Frage zu deinem Beispiel hätte ich nochmal... du hattest ja geschrieben:

LD M0.0
MOVB MB1, VB1
hab das jetzt ohne LD, gemacht, also nur MOVB und meine 8 Merkerbytes untereinander den entsprechenden VBs zugeordnet... was "macht" denn das LD? Das würde doch dann nur den M0.0 laden, oder?


Gruß, rampage
 
Hi rampage,

Ja es ist richtig das die Symboltabelle in der SPS nicht hinterlegt wird. Wenn du (oder ein Kunde) also irgendwann wann mal einen Abzug
von der SPS machst ohne das Originalprogramm zu haben dann hat er keine Symbolik dabei. :(

Also am besten das Originalprogramm aufmachen, unter neuer Version speichern und dann "Laden aus CPU" wählen.


Zu der Sache mit :

LD M0.0
MOVB MB1, VB1

Ich nehme an du progst in AWL?

Wenn du nämlich die MOV - Funktion benutzt und in FUP oder KOP arbeitest, so bekommst du beim übersetzen einen Fehler.

LD M0.0 hast zur Folge das die Aktion nur ausgeführt wird wenn M0.0 "1" wird.

Wenn du nicht mit einem Merker arbeiten willst kanst du auch

LD SM0.0

schreiben.

Der SystemMerker 0.0 hat eine feste "1" und kann für diese Funktionen verwendet werden.


Gruß smartie
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab das mit dem Delphi Testprogramm nochmals probiert, sobald ich da was anderes einstelle als den DB, dann erscheint unten eine Fehlermeldung sinngemäß "not available for this PLC (200 serie)".
Stell mal bei "Area:" "Flags" ein, und bei "DB:" eine "0". Per default steht das auf "Datablock" und "1", und nur bei "Datablock" darf in "DB:" was anderes als "0" stehen. Das gilt nicht nur für das Demoprogramm, auch in Deinem eigenen Programm darfst Du nur für Datenblöcke eine DB-Nummer <> 0 verwenden.


Gruß Axel
 
@smartie: aah, jez is die sache klarer mit dem LD :)

@afk: hm hab ich grad mal probiert, auf Flags gestellt, und bei DB "0" eingegeben... aber sobald ich "0" eingebe und aus dem Feld herausgehe, stell sich das automatisch wieder auf 1 :confused:
 
.. aber sobald ich "0" eingebe und aus dem Feld herausgehe, stell sich das automatisch wieder auf 1 :confused:
Stimmt, da ist noch ein kleiner Bug drin, das Feld ist ein TSpinEdit, und der MinValue steht auf 1. Kannst Du aber im MainForm vom Demo-Projekt ganz einfach auf 0 ändern.

Das hab ich wohl gemacht, als ich noch nicht wußte, das Werte <> 0 nur bei DBs erlaubt sind ... :roll:


Gruß Axel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ afk

hm hab das versucht zu ändern im main... ist ja der spinedit1... (also hab das in der main.dfm geändert... min auf 0)... und dann ja sicherlich auch noch in der main.pas, damit sich das bei 0 nicht mehr auf 1 zurückstellt... nur entweder hab ich noch irgendwas übersehen... oder k.A., geht auf jeden Fall irgendwie noch nich so richtig :(

andere Frage die jetzt noch auftritt: Wenn ich vom PC zur SPS schreiben will, muss ich dann andere Merker bzw. VBs verwenden? also, ich kann nich die selben schreiben wie das Demo Programm abfragt (wenn ich im SPS Programm schon eine Funktion zugewiesen hab), oder?
 
Du kannst dieselben Merker schreiben, aber wenn du sie im SPS-Programm setzt, werden sie wieder überschrieben, wer zuletzt schreibt gewinnt. Ausserdem mußt du dir darüber im Klaren sein, daß dein SPS-Programm möglicherweise seltsame Dinge tut, wenn du Merker überschreibst, die dort gebraucht werden, auch wenn das SPS-Programm sie nur liest...
 
... ist ja der spinedit1... (also hab das in der main.dfm geändert... min auf 0)... und dann ja sicherlich auch noch in der main.pas, damit sich das bei 0 nicht mehr auf 1 zurückstellt...
In der main.pas muß nichts geändert werden, die Begrenzung erfolgt nur über die Eigenschaft MinValue.

... nur entweder hab ich noch irgendwas übersehen... oder k.A., geht auf jeden Fall irgendwie noch nich so richtig :(
Ich bin mir nicht sicher, ob das bei einer 200er mit daveFlags überhaupt geht, da ich selbst nur mit 300er- und 400er-CPUs arbeite ...


Gruß Axel
 
Also, mit Merker direkt auslesen hab ich nicht hinbekommen, hab den Umweg über den Datenbaustein genommen und kann sowohl von der SPS lesen als auch in die SPS schreiben :)

Funktioniert also erstmal alles wie es soll (mit dem libnodave delphi-Test Programm).

Nun noch Einbindung in unser vorhandenes PC-Programm, und dann mal schauen :)

Vielen Dank schon mal an alle Helfer :)

Gruß, rampage
 
SPS Eingänge und Ausgänge schalten

Hallo Zusammen,

nach langem Suchen hoffe ich hier richtig zu sein.
Ich habe eine Haussteuerung mit einer S7 laufen. Allerdings habe ich bis jetzt nur Eingänge als Taster auf Ausgänge gesetzt (Eltako).
Mit Merkern habe ich auch schon ein wenig rumgespielt (alles aus, alles an etc.)

Jetzt habe ich libnodave als Schnittstelle zu meiner noch zu erstellenden PC-Steuerung 8IP-Symcon) installiert.
Hier kann ich aber nur Byteweise die Merker lesen. schreiben bekomme ich gar nicht hin.
Auch habe ich das Problem, wenn Eingänge oder Ausgänge direkt ansprechen möchte klappt dies nicht. Ausgänge gehen nur, wenn das SPS-Programm diese nicht verwendet (wie oben geschrieben, SPS überschreibt dies wohl) Eingänge werden ignoriert.

Was kann ich den machen, wenn ich einfach nur in einer Visu das möchte, was STEP7 bei der Programmierung kann, nämlich einfach den Eingang schalten, als ob er physikalisch geschaltet wäre?

Vielen Dank im Voraus für Eure Hilfe. Ich stehe vollkommen im Wald

Viele Grüße
Bastelfrosch
 
Zurück
Oben