WinCC Steuerungsauftrag 70

phil_ed9

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

Ich habe gerade mit dem Steuerungsauftrag 70 zu kämpfen. Ich möchte einfach ein Datensatz meiner Rezepturverwaltung in die Steuerung laden, sofern die Freigabe dafür mittels eines Merkers erteilt wird.
Dazu habe ich in einem DB den Bereich für diesen Steuerungsauftrag folgendermassen definiert:

Byte 0 = DB1.DBB20 (Byte)
Auftragsnummer = DB1.DBB21 (Byte)
Rezepturnummer= DB1.DBW22 (INT)
Datensatznummer = DB1.DBW24 (Int)
Wort4 = DB1.DBW26 (Int)

Wenn ich das nun in der Variablentabelle beobachte und von Hand die Datensatznummer ändere, lädt er mir die Werte des Rezeptes in die dafür deklarierten Variablen.

Doch irgendwie klappt das beim einbinden in mein Programm nicht.
In einem FC erteile ich den Befehl zum laden des Rezeptdatensatztes :

U M10.0
L 6 (Datensatznummer)
T DB1.DBW24
L70
T DB1.DBB21

Was kann daran nicht stimmen ?

Besten Dank für Eure Antworten...gruss phil
 
Die Lade- und Transfer-Befehle sind NICHT VKE-abhängig und werden daher unabhängig vom Zustand des M10.0 immer ausgeführt. Sollen sie nicht ausgeführt werden, dann müssen sie übersprungen werden, z.B. mit bedingten Sprüngen SPB oder SPBN.

Harald
 
So das mit den Sprungmarken habe ich begriffen und in mein Netzwerk eingebunden. Jedoch kann ich den Baustein nicht mehr speichern, da sich im Netzwerk noch ungültige Anweisungen befinden. Aber welche ? Mein schlaues AWL Programmierbuch gibt dazu leider nicht viel her.


U M10.0
SPBN S1
L 2
T "Kommunikation_WinCC".Steuerungsauftrag.Datensatznummer
L 70
T "Kommunikation_WinCC".Steuerungsauftrag.Auftragsnummer
S1: = M 50.0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit welcher Software programmierst Du?
Wenn der Step7-AWL-Editor meint, daß da noch ungültige Anweisungen sind, dann macht er die normalerweise unübersehbar rot.
Bei mir wird dieses anstandslos gespeichert:
Code:
      U     M     10.0
      SPBN  S1
      L     2
      T     DB1.DBW   24
      L     70
      T     DB1.DBB   21
S1:   NOP   0
"S1: = M 50.0" ginge auch, ist aber eher wenig sinnvoll. M50.0 würde immer "1" zugewiesen. Sprungmarken direkt vor Zuweisungs-Operationen sind für AWL-Anfänger aber nicht unbedingt zu empfehlen ...

Harald
 
Hast Du vielleicht mehrere Zeilen mit "S1: " geschrieben? In einem Baustein muß jede Sprungmarke anders heißen, es kann keine 2 Sprungmarken mit der gleichen Bezeichnung geben.

Harald
 
Hallo
Ich programmiere im AWL Editor des Step7 (oder besser gesagt, ich bin die awl sprache am lernen). Den Programmcode habe ich direkt hier ins forum kopiert. Leerschläge oder doppelte verwendung sind ausgeschlossen. Rot gekennzeichnet ist nichts. Den M50.0 Merker ist nur dort, dass in dieser Zeile neben der Sprungmarke etwas steht. Ich bin mir nicht sicher ob dort etwas stehen muss oder nicht. Darum habe ich den mal dort platziert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
habe mal den den Programmcode von PN/DP kopiert und sehe da, es kann ohne probleme gespeichert werden. Jedoch wird bei M10.0 = 1 der Steuerungsauftrag nicht richtig ausgeführt. :-(
Das Laden der Datensatz- und Auftragsnummer wird ausgeführt, jedoch werden die Rezeptdaten nicht in die Variablen geschrieben. Führe ich den Steuerungsauftrag manell in der Variablentabelle druch, werden die Rezeptdaten in die Variablen geschrieben. ??
 
Zuletzt bearbeitet:
Wie lange ist Dein M10.0 aktiv? So wie Dein Codefragment aussieht, sollte er nur 1 Zyklus lang aktiv sein.
Ein Steuerungsauftrag darf nicht ständig aufgerufen werden. Es darf auch nicht ständig die Auftragsnummer (Dein DBB21) beschrieben werden, weil das HMI als Fertigmeldung da eine 0 reinschreibt. Genaugenommen darf die Auftragnummer nur beschrieben werden, wenn da 0 drinsteht (oder nach einem Kommunikations-Timeout), da ein neuer Steuerungsauftrag nur ausgelöst werden darf, wenn der vorherige beendet ist. Es kann immer nur 1 Steuerungsauftrag aktiv sein. Am besten, das Steuerungsauftrag-Fach wird überhaupt nur einmal (1 Zyklus lang) beschrieben.

Dein Steuerungsauftrag 70 ist nicht vollständig, in DBW24 muß auch eine Datensatznummer 1...65535 reingeschrieben werden.
Ich würde außerdem die Deklaration des DBB20 löschen und die Auftragsnummer von BYTE auf INT ändern (belegt dann DBW20 = DBB20 MSB und DBB21 LSB).
Code:
      U     M     10.0
      SPBN  S1
//    R     M     10.0          //M10.0 könnte hier zurückgesetzt werden

      L     1
      T     DB1.DBW   22        //Rezepturnummer 1..999
      L     1
      T     DB1.DBW   24        //Datensatznummer 1..65535
      L     70                  //Steuerungsauftrag 70
      T     DB1.DBW   20        //Auftragsnummer (niederwertiges Byte ist DBB21)
S1:   NOP   0

Harald
 
Hallo
Habe nun den Steuerungsauftrag so hingebracht, dass bei setzten des M10.0 die Daten in die Steuerung gehen (Beobachtet in der Variablentabelle, Datensatznummer und Rezeptnummer werden da für einen Zyklus angezeigt).
Doch die Rezeptdaten werden nicht in die, in der Rezepturverwaltung eingegebenen Variablen gespeichert. Gibts da noch eine zusätzliche Einstellung ?
Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Führe ich den Steuerungsauftrag manell in der Variablentabelle druch, werden die Rezeptdaten in die Variablen geschrieben
Dann kann die Projektierung in der HMI ja nicht ganz falsch sein.

Du mußt herausfinden, was Dein Programmcode anders macht als Du manuell in der Variablentabelle. Benutzt Dein Programm tatsächlich genau die gleichen Adressen für den Steuerungsauftrag wie Du in der Variablentabelle benutzt? Stelle doch mal Deinen Code hier ein, vielleicht sehen wir ja was.

Harald
 
Jetzt werden die Daten nur noch in die Variablen geschrieben, wenn ich in der Rezepturanzeige die Schaltfläche "Laden in Steuerung" drücke. Manmanman...ich blicke da nicht durch. Kann doch nicht so schwierig sein :-(

Das ist mein Programmcode
Code:
U     M     60.0
      SPBN  S1
      R     M     60.0
      L     0
      T     "Kommunikation_WinCC".Steuerungsauftrag.Byte0
      L     1
      T     "Kommunikation_WinCC".Steuerungsauftrag.Rezeptnummer
      L     3
      T     "Kommunikation_WinCC".Steuerungsauftrag.Datensatznummer
      L     70
      T     "Kommunikation_WinCC".Steuerungsauftrag.Auftragsnummer
S1:   NOP   0

Der Bereich im DB für den Steuerungsauftrag

DB1.DBB 22 "Kommunikation_WinCC".Steuerungsauftrag.Byte0 DEZ 0
DB1.DBB 23 "Kommunikation_WinCC".Steuerungsauftrag.Auftragsnummer DEZ 0
DB1.DBW 24 "Kommunikation_WinCC".Steuerungsauftrag.Rezeptnummer DEZ 0
DB1.DBW 26 "Kommunikation_WinCC".Steuerungsauftrag.Datensatznummer DEZ 0
DB1.DBW 28 "Kommunikation_WinCC".Steuerungsauftrag.Wort4 DEZ 0
 
Ich kann in Deinem Code keinen Fehler finden, bei mir funktioniert das so einwandfrei. Sobald ich M60.0 setze, schreibt der Code die benötigten Angaben in die Datenbereiche des Steuerungsauftrags. Das HMI schreibt mir daraufhin den angeforderten Rezepturdatensatz in meine Rezepturvariablen und löscht danach alle 4 Wörter des Steuerungsauftrags zu 0.

Benutze mal für M60.0 einen Merker, der garantiert noch nirgendwo benutzt wird. Setze den Merker mit der Variablentabelle und beobachte die Steuerungsauftrags-Wörter und die Rezepturvariablen.

Prüfe, ob Dein Programm noch anderswo in den Datenbereich des Steuerungsauftrages schreibt.

Du hast die Steuerungsauftrag-Struktur von DB1.DBB20... zu DB1.DBB22... verschoben. Hast Du auch das HMI neu übersetzt und geladen?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Merker M60.0 wird garantiert nur da verwendet. Du hast in einer vorigen Antwort geschrieben, dass ich die Deklaration der Auftragsnummer von Byte zu Int wechseln soll. Was bringt das für Vorteile ? Der Steuerungsauftrag wurde in einem FC erstellt, besser mit einem FB ?
Danke
 
Wenn die Auftragsnummer als INT deklariert ist, dann sparst Du das extra beschreiben des "Kommunikation_WinCC".Steuerungsauftrag.Byte0, weil es dann Bestandteil von "Kommunikation_WinCC".Steuerungsauftrag.Auftragsnummer ist und beim schreiben der Auftragsnummer automatisch mit beschrieben wird (das höherwertige Byte der Auftragsnummer ist immer 0).

FB / FC?
Ob FB mit Instanz oder FC und globale Merker ist hier imho Geschmackssache.
Von einem FB erwarte ich, daß er KEINERLEI globale Ressourcen (z.B. Merker) benutzt, sondern nur seine Instanz. Alles was von global benötigt wird, soll über die Bausteinschnittstelle übergeben werden. Wenn das zu viele Übergabeparameter werden, dann eben besser ein FC.

Harald
 
Habe nun den Datenbereich für den Auftrag neu definiert und das Programm angepasst. Leider keine Veränderung. In der Variablentabelle sehe ich wie die Datensatznummer, Rezeptnummer und die Auftragsnummer für einen Zyklus lang beschrieben werden, doch die Variablen in der die Rezeptdaten geschrieben werden sollen, bleiben immer leer. Die werden nur dann beschrieben, wenn ich über die Rezepturanzeige die Daten in die Steuerung schreibe.

@PN/DP, darf ich dir ein Projekt schicken, vielleicht siehst du auf den ersten Blick wo der Wurm steckt.
Danke
 
Der Bereichszeiger "Steuerungsauftrag" im HMI liegt an Adresse DB1.DBW20 ..., in der SPS aber an Adresse DB1.DBB22 ... (den Tip gab es eigentlich schon in #14)
Zumindest im HMI-Projekt gibt es noch keinen Datensatz Nr. 3, doch vielleicht auf Deinem Panel?

Wenn ich im HMI-Projekt den Bereichszeiger "Steuerungsauftrag" auf DB1.DBW22 ändere und im FC3 statt Datensatznummer 3 den Datensatz Nummer 2 anfordere, dann schreibt die Simulation die Rezepturdaten erfolgreich in die Rezepturvariablen.

Ich habe im WinCCflexible-Projekt die temporären Dateien gelöscht und alles neu generiert. Die Warnungen vom Compiler bekommst Du alleine weg?

Harald
 
Zurück
Oben