Step 7 Wincc flexibel indirekte Adressierung

Fiski

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

ich habe auch ein kleines Problem und hoffe, das mir jemand weiterhelfen kann. Ich habe einen riesigen DB, in der 20 Strukturen sind, mit je 10 Variablen mit den Datentypen Int und REAL. Indirkete Adressierung geht ja so :

DB 3 DBW [UebungsDatenBau.Allgemein_Daten_Multiple] Zu Testzwecken habe ich mir ein Skript geschrieben, in der ich den Index (UebungsDatenBau.Allgemein_Daten_Multiple) eine Zahl zuweise, und dieses Skript einer Schaltfläche als Ereignis zuweise : SmartTags("UebungsDatenBau.Allgemein_Daten_Multiple") = 36
In meiner Testvariablentabelle habe ich dann dort stehen : DB3.DBW36 = 555 . Dieser Wert wird dann im EA-Feld angezeigt.

Jetzt zu meinem Problem. Wenn ich einen REAL oder DINT Datentyp genau nach dem obigen Beispiel mache, steht in meinem EA-Feld nur eine Null, bei INT oder Word geht das. Und genau das verstehe ich nicht. Bitte um Rat
 
DB 3 DBW [UebungsDatenBau.Allgemein_Daten_Multiple] DB3.DBW36 = 555 . Dieser Wert wird dann im EA-Feld angezeigt.

Jetzt zu meinem Problem. Wenn ich einen REAL oder DINT Datentyp genau nach dem obigen Beispiel mache, steht in meinem EA-Feld nur eine Null, bei INT oder Word geht das.

Wenn du das mit einem DINT oder REAL machen willst dann must du deine Variable in WinCCflex zumindest auch als
DB 3 DBD [UebungsDatenBau.Allgemein_Daten_Multiple] deklarieren. Des weiteren musst du die Variable in WinCCflex auch als DINT
oder FLOAT deklarieren. WinCC muss ja wissen in welcher Form es die 4 Byte auswerten soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das heißt mein UebungsDatenBau.Allgemein_Daten_Multiple muss auch ein Real sein, wenn die Variable von meinem DB auch ein Real ist? So habe ich es gemacht, leider geht das auch nicht
 
Das heißt mein UebungsDatenBau.Allgemein_Daten_Multiple muss auch ein Real sein, wenn die Variable von meinem DB auch ein Real ist? So habe ich es gemacht, leider geht das auch nicht

Nein das was hinter DB1.DBX[xyz] steckt muss als REAL deklariert sein. Die Adressberechnung stimmt? Sonst irgendeinen Fehler bei der
Deklaration?

Bei mir funktioniert das problemlos.
Damit wir ein wenig schneller zum Ziel kommen hab ich das Beispiel mit dem ich's grad probiert habe in den Anhang gepackt.
Vergleich das mal mit deinen Versuchen.

Anhang anzeigen Indaddr_.zip
 
Also in meinem DB3 gibt es eine Real-Variable DB3.DBD8 . In Wincc flex steht da : DB 3 DBD [UebungsDatenBau.Allgemein_Daten_Multiple]. Und UebungsDatenBau.Allgemein_Daten_Multiple ist auch eine Real-Variable. Das funktioniert leider nicht. Habe diese Variable auch als DINT oder Float deklariert, auch als intern oder extern angelegt, leider vergebens :cry:

Ok, danke, werde mir das mal jetzt anschauen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Könnte wahnsinnig werden. Genau , so wie du es gemacht hast, habe ich es auch, aber es klappt einfach nicht. Habe alle Möglichkeiten ausprobiert, jedoch finde ich einfach keine Lösung
 
Lade doch mal dein Projekt hoch oder schick es mir als PN (falls möglich), dann kann ich vielleicht mehr sagen, bevor du dir noch die Haare ausraufst.
 
Die von Dir versuchte indirekte Adressierung nennt sich "Adress-Multiplexen".
Dafür brauchst Du 2 Variablen:
  1. REAL: die Variable die für den Ausgabewert aus der SPS steht und eine wechselnde Adresse hat
    Dies ist bei Dir die Variable, für deren Adresse Du "DB3 DBW[...]" festgelegt hast und am EA-Feld anzeigst.
    Dies muß wegen REAL DB3 DBD[...] heißen
  2. INT oder UINT: eine interne Variable, in die der Index = die Adresse für die erste Variable geschrieben wird. Dies ist bei Dir die Variable "UebungsDatenBau.Allgemein_Daten_Multiple".
    Diese Variable muß bei der ersten Variable als Index bei DBD [UebungsDatenBau.Allgemein_Daten_Multiple] angegeben werden.

Schau mal in die WinCC flexible Hilfe:
WinCC flexible Information System > Arbeiten mit WinCC flexible > Arbeiten mit Variablen > Arbeiten mit Variablen > Variablen konfigurieren > Variable für das Adress-Multiplexen projektieren

und hier: Wie funktioniert das Adress-Multiplexen?

Vorsicht:
Wo genau hast Du den Aufruf Dein Skriptes angebunden? Möglicherweise wird Dein Skript gar nicht aufgerufen.
Beachte, daß der Wert der gemultiplexten Variable erst irgendwann später nach Zuweisung der Adresse an die Index-Variable aus der SPS gelesen wird.

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
An genau diesem Beispiel von Siemens bin ich gerade dran. Dort werden unterschiedliche DBs gemultiplext. Ich wollte das ganze jetzt so, wie beschrieben machen. Also wenn meine SPS-Variable vom Typ Int oder Word ist, dann geht das problemlos, wenn jedoch diese vom Datentyp Real ist, geht gar nichts.
Mein Aufruf des Skriptes habe ich an einer Schalfläche angebunden. Wenn die SPS-Variable ein INT oder Word ist, funktioniert das, das heißt ich kriege den Wert ausgegeben, den ich zu Testzwecken in meiner Variablentabelle habe.
 
Ich sehe bei Dir nicht, daß Du ZWEI Variablen verwendest.
Wie heißt Deine SPS-Ausgabevariable (die mit dem DB 3 DBD [...])?

Beispiel zum anzeigen eines REAL von DB3.DBD36:
- Varable "SPS_Adresse" : UInt : <intern>
- Variable "SPS_Wert_gemultiplext" : Float : DB 3 DBD [SPS_Adresse]
- EA-Feld für "SPS_Wert_gemultiplext" : "999.9"
- im Skript: SmartTags("SPS_Adresse") = 36 ' Adresse der Index-Variable zuweisen

Harald
 
Zuletzt bearbeitet:
Ronin hat mir gerade das Projekt geschickt.
Seine Variable "SPS_Adresse" ist zwar ein INT, aber ansonsten hat er es auch genau so gemacht, wie bei die Harald.

@Ronin Ich habe das Bild_3 simuliert (mit Runtime). Ich kriege das heraus DB40.DBD 2. Jedoch steht links im EA-Feld für die Soll-Drehzahl eine Null, obwohl ich in meiner Variablentabelle eine Wert geschrieben habe. Warum funktioniert das bei dir und warum nicht bei mir? Habe doch das selbe Projekt?! Teste alles mit dem Runtime. Wirklich sehr komisch. Vielleicht liegt das an der Variablentabelle, dort stht das:

DB40.DBD 2 "MData".Motor[1].Soll_Drehzahl DEZ L#546
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Damit PN//DP und die anderen hier nicht unnötig ins Blaue raten:

Er hat mir sein Projekt schon zukommen lassen. Grundsätzlich scheint das was Fiski macht zu stimmen. An manchen Stellen hat er sich beim experimentieren zu Tode addressiert aber bei einem Grundsätzlichen Beispiel (nur ein Real) stimmts eigentlich und funktioniert bei mir mit PLCSim und PC-Runtime auch. Och hab sein Projekt ein wenig modifiziert und an ihn zurückgeschickt.

Bei mir hat es funktioiert. Wenn bei ihm dann immer noch nicht geht, sollten wir uns andere Ursachen überlegen. Womöglich haperts irgendwo mit dem alten MP370.

@Fiski: Lad das Projekt doch hier als Anhang hoch (ist ja eh nur ein übungsbeispiel).
Dann reden hier wenigstens alle vom selben.

via Mobile
 
DB40.DBD 2 "MData".Motor[1].Soll_Drehzahl DEZ L#546
HEUREKA! Jetzt lichten sich die Dinge endlich!!! ;)

Wenn du in der Variablentabelle eine Gleitpunktzahl eingeben willst dann solltest du anstatt "DEZ" auch "GLEITPUNKT" verwenden (Rechtsklick-Menü).
Und dann den Wert als 546.0 eingeben.

Der Wert L#546 hat nix mit 546.0 gemein (im binären Sinne).
Die Unterschiede sind dir schon klar, oder?
Anhang anzeigen Datentyp DINT.pdf
Anhang anzeigen Datentyp REAL.pdf
 
Zuletzt bearbeitet:
Ich will es nicht glauben. Habe ich jetzt Stunden hier verbracht nur wegen einer Kommastelle in der Variabelentabelle??:sb8::sb8:
 
Ja meist sind's die einfachen Dinge! :cool: PICNIC eben.
Die Unterschiede in der binären Darstellung der Datentypen kennst du oder?
 
Zurück
Oben