Win CC Flex Variable Anzeigen

Guste

Level-1
Beiträge
338
Reaktionspunkte
16
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo WinCC Flex Gemeinde
Auch auf die Gefahr hin daß das Thema schon behandelt wurde.
Ich will in einen Bild zu Diagnosezwecken Bytefelder anzeigen, wie in der 840D unter Diagnose / PLC möglich
Also EB 0 eintippen und der Status vom Byte wird angezeigt.
Oder MW 112 anwählen Bits setzen und mit Enter schreiben. etc.
Ist hier in WinCC Flex schon was vorgesehen oder muß ich es händisch erstellen.
Gruß aus dem Ländle

Guste
 
Es gibt schon.
Unter die Tools ... Enhanced Objects (Erweiterte Objekte ?) ... findest du den Status Force.
Damit kann man beliebige SPS Adressen beobachten und sogar ändern.
Es ist dafür auch etwas gefährlich. Wenn du sperren willst das man Werte ändern kann, dann kannst du abwählen das die "schreiben" Taster dafür angezeigt wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Jesper das schau ich mir doch gleich an.
Ich finde aber unter Werkzeuge / Erweiterte Objekte nur Benutzeranzeige , Kurvenanzeige, Rezepturanzeige, Meldeanzeige

Guß Guste
 
Zuletzt bearbeitet:
Im deutschen WinCCflexible heißt das Objekt "Status/Steuern". Das gibt es aber nicht bei allen Panels.
Was hast Du denn für ein Panel? Und was für eine CPU?

Im Notfall kann man sich so ein Status_Variable schnell selber programmieren, wenn die CPU indirekte Adressierung auf absolute Adressen unterstützt.
Dann sollte man aber unbedingt die OB121 und OB122 in der CPU haben.

Harald
 
Hallo Harald
TP177B denke das TP kann das nicht
Als CPU verwende ich 313 2 DP
OB121 und OB 122 müsste die haben. Denk da muß ich doch selber was stricken
 
Danke Harald
Habe 177B und A zur Hand dachte nicht daß hier der Unterschied so gross ist.
Ist ja eine feine Sache am TP 177B.
Für den TP177A sollete s ja auch einen Weg geben.
Ich habe mir die Syntax DB123.DBW2 auf einem DB als Zeichenfolge angelegt. Wollt dann dies Zeichenfolge als Variable verwenden


//L DB200.DBW2 //
L P#DB160 DBX3.0 Byte 13 // Variable
T DB160.DBW16 // Anzeige

Das haut so erstmal nicht hin

Gruß Guste
 
Brauchst Du wirklich die Möglichkeit, jede Adresse in der SPS zu lesen und zu beschreiben? Damit kann man mehr Schaden anrichten als es nützt. Zu Zeiten der S5 war ein Bild mit SteuernVariable üblich, weil man damit preiswert eine Möglichkeit hatte, mit einfachsten Text-OP vorgesehene und nicht vorhergesehene Eingriffe in das Programm zu machen. Heutzutage nimmt man ein HMI/Grafikpanel und macht ein Bild mit übersichtlich angeordneten E/A-Feldern und Klartextbeschreibung.

Andererseits ist so ein universelles SteuernVariable natürlich eine nette Programmieraufgabe mit hohem Lernfaktor.
Die löst man aber nicht mit ANY-Pointern sondern per indirekter Adressierung (speicherindirekt oder registerindirekt mit AR-Register, siehe AWL-Hilfe). Adressierung von Bytes oder Words reicht, Adressierung von einzelnen Bits ist in der Regel nicht notwendig.
Das geht kurz gefasst ungefähr so: man nehme
- ein symbolisches EA-Feld zum Auswählen des Speicherbereichs (E, A, M, DB, ggf. auch T und C)
damit steuert man die Bereichskennung im AR-Register oder verzweigt das Programm ala SWITCH CASE...
- ein Eingabefeld für die DB-Nummer (UINT)
der Wert geht an ein "AUF DB [dbnr]"
- ein Eingabefeld für die Adresse/Offset (UINT)
der Wert wird mit 8 multipliziert (SLD 3) für die indirekte Adressierung verwendet: z.B. "MB [adresse]" oder "B [AR1, P#0.0]"
- ein Ein/Ausgabefeld für den Wert, der aus der Adresse gelesen bzw. in die Adresse geschrieben werden soll, möglichst hexadezimal formatiert (WORD)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn es nur zur Diagnose dient, warum nicht nur in WinCCflex indirekt adressieren.
Jeweils Eingabefelder für E/A/M/DB und das Byte. Diese unter Eigenschaften/Adressierung angeben, anstelle der Konstanten.

mfG Sinix
 
Grundgerüst StatusVariable in AWL

Ach ja, direkt in WinCCflex geht es auch, das nennt sich Adress-Multiplexen

Falls es in der SPS programmiert werden soll, weil man da flexibler Variablen-Prüfungen und Adressbeschränkungen realisieren kann, hier mal ein
Grundgerüst StatusVariable
Code:
//DB-Nummer mit 0 vorbelegen für Zugriffe auf E/A/M
      L     0
      T     #iTmp_DB_No                 //(INT in TEMP)

//Verteiler gewünschter Speicherbereich --> Bereichskennung
      L     "DB_OP".StVar_Typ           //symbolisches Auswahlfeld: Speicherbereich
      SPL   ETYL
      SPA   MTYE                        // 0: E
      SPA   MTYA                        // 1: A
      SPA   MTYM                        // 2: M
      SPA   MTYD                        // 3: DB
ETYL: L     0                           //ungültige Auswahl!
      T     "DB_OP".StVar_Typ           //symb.Auswahlfeld auf "E" initialisieren

MTYE: L     P#E 0.0                     //Bereichskennung E in AKKU1 für AR1
      SPA   MADD

MTYA: L     P#A 0.0                     //Bereichskennung A in AKKU1 für AR1
      SPA   MADD

MTYM: L     P#M 0.0                     //Bereichskennung M in AKKU1 für AR1
      SPA   MADD

MTYD: L     "DB_OP".StVar_DB            //Eingabefeld: DB-Nummer
      T     #iTmp_DB_No

      L     P#DBX 0.0                   //Bereichskennung DB in AKKU1 für AR1

//    hier Pointer 0.0 + Speicherbereichskennung in AKKU1
MADD: L     "DB_OP".StVar_Adresse       //Eingabefeld: Adresse (Offset)
      SLD   3                           //--> P#offset.0
      +D                                //Bereichskennung zufügen aus Verteiler
      LAR1                              //Zieladresse in Adressregister

//Schreiben oder Lesen?
//...

//adressiertes Byte auslesen für Anzeige auf Panel
      AUF   DB [#iTmp_DB_No]            //DB-Nummer oder 0 bei E/A/M
      L     B [AR1,P#0.0]               //das adressierte Byte auslesen
      T     "DB_OP".StVar_Wert          //Ausgabefeld: Wert

Harald
 
Danke zusammen. Habs kapiert. Werde dann mal anfangen zu schreiben.

Gruss an alle aus dem Süden
 
Zuletzt bearbeitet:
Zurück
Oben