ANY Variablen

rsu76

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen
Ich habe wohl einige typische Anfängerfragen.
Seit kurzem arbeite ich mit STEP7 (KOP und FUP)

Nun habe ich das Problem, dass ich bei den IEC Bausteinen Mühe mit dem ANY Datentypen habe:

1. Wie kann ich zB beim Baustein FC22 LIMIT direkt an den Eingang eine feste Zahl eingeben. Bei einer Funktion mit Int Eingang kann ich ja einfach in die Eingansvariable eine Zahl reintippen.

2. Was muss ich tun wenn ich ein MW mit Datentyp Word an den Eingang anschliessen will. Bei mir hats zwar keinen Syntaxfehler erzeugt, aber funktionert hats auch nicht

3. Noch eine allgemeine Frage. Wie kann ich einem Symbol einen Initialwert zuordnen?

Ich hoffe die simplen Fragen nerven euch Cracks nicht allzustark. Da ich aber in den Handbüchern und auch hier im Forum keine Antworten auf meine Probleme fand bitte ich euch mir weiterzuhelfen,

Danke vielmals schon jetzt.:?
 
Hallo,
zunächst einmal ich kenne den FC nicht ... aber :

1.) wenn der Baustein den Datentyp WORD erwartet, dann kannst du da nicht z.B. 16 (INT-Format) dranschreiben sondern du müßtest es im WORD-Format tun - also w#16#10 (hier hast du dann die Hex-Darstellung)

2.) ein MW ist normalerweise von sich aus ein WORD. Definiert wird es in der Symbolik. Hast du es natürlich hier als INT deklariert, so würde dein baustein sich daran stören.

3.) ein Symbol kann keinen Initialwert haben - nur eine Variable. Ist deine Variable ein MW, so müßtest du das Per "Lade - Transferiere" (z.B. im OB100) beschreiben. Ist deine Variable ein Datenword (als eine Variable aus einem Datenbaustein), so kannst du dem DB beim Erstellen für die Variable einen Initialwert geben.

Gruß
Larry
 
OK ... was ist mit 1 und 2 ?
Wie ist die Schnittstelle des genannten Baustein definiert - also Datentyp der Variablen und Richtung (IN, OUT, IN_OUT) ?
 
1. Wie kann ich zB beim Baustein FC22 LIMIT direkt an den Eingang eine feste Zahl eingeben. Bei einer Funktion mit Int Eingang kann ich ja einfach in die Eingansvariable eine Zahl reintippen.
Die Grenzwert-Parameter des LIMIT-Bausteins kannst du nicht mit einer Konstante beschalten, da die Parameter vom Typ ANY sind.

Das hat Siemens sich zwar schön überlegt, damit es für die verschiedenen Datentypen (Int, Real) nur einen Baustein gibt, in der Praxis benötige ich an dieser Stelle aber auch meistens Konstanten.
Du kannst aber auch Temp-Variablen vorher mit den Grenzwerten beschreiben, und diese Variablen dann an den LIMIT-Baustein parametrieren (oder erstellst dir zwei eigene Bausteine LIMIT_INT und LIMIT_REAL)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Alle Ein und Ausgangsparameter sind vom Typ ANY.
Wenn ich ein MW das ich als Symbol mit Datentyp Word definiert habe anschliesse wird zwar kein Fehler angezeigt bei der Ausführung funktioniert das ganze aber nicht.
Im Beobachten-Modus (Brille) werden für die Symbole auch keine Zahlen angezeigt.
 
Alle Ein und Ausgangsparameter sind vom Typ ANY.
Wenn ich ein MW das ich als Symbol mit Datentyp Word definiert habe anschliesse wird zwar kein Fehler angezeigt bei der Ausführung funktioniert das ganze aber nicht.
Im Beobachten-Modus (Brille) werden für die Symbole auch keine Zahlen angezeigt.
Bei Parametern vom Typ ANY werden beim Beobachten keine Aktualwerte angezeigt.
Was funktioniert denn nicht? Ist das BIE-Bit nach der Beabeitung gesetzt oder nicht? Denn hierdurch wird ein Fehler (z.B. unterschiedliche Datentypen an den Parametern) angezeigt.
 
Bei Parametern vom Typ ANY werden beim Beobachten keine Aktualwerte angezeigt.
Was funktioniert denn nicht? Ist das BIE-Bit nach der Beabeitung gesetzt oder nicht? Denn hierdurch wird ein Fehler (z.B. unterschiedliche Datentypen an den Parametern) angezeigt.


Ich habe am MN Eingang eine lokale Stat Variable mit Wert 0 und am Mx Eingang eine mit 10000 angehängt. (beide Typ Word)
Am IN sit ein MW (ist nicht als Symbol definiert) mit einem schwankenden Wert angehängt.
Gleiches gilt für das MW am Ausgang.

Beim Betrieb steht im Ausgangs MW immer Null, auch wenn der Einganswert innerhalb 0 und 1000 liegt.

Danke für die Hilfe!!!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe am MN Eingang eine lokale Stat Variable mit Wert 0 und am Mx Eingang eine mit 10000 angehängt. (beide Typ Word)
Am IN sit ein MW (ist nicht als Symbol definiert) mit einem schwankenden Wert angehängt.

F1 drücken:

Baustein online-Hilfe schrieb:
Die Funktion FC 22 begrenzt den Zahlenwert einer Variablen auf parametrierbare Grenzwerte. Als Eingangswerte sind Variable vom Datentyp INT, DINT und REAL zugelassen. Alle parametrierten Variablen müssen vom gleichen Datentyp sein. Die Art der Variable wird über den ANY-Pointer erkannt. Der untere Grenzwert (Parameter MN) darf nicht größer sein als der obere Grenzwert (Parameter MX).
 
Hast du deinem Merkerwort denn auch ein Symbol mit den entsprechenden Datentyp (INT) gegeben? Ansonsten funktioniert die Auswertung des Datentyps im LIMIT-Baustein und eben auch in den anderen Bausteinen mit Parametern variablen Datentyps nicht.

Darum schrieb ich oben schon dass du dir mal das BIE-Bit ansehen solltest. Ist dieses false dann ist etwas an den Parametertypen des Bausteins falsch (Datentypen nicht INT, DINT oder REAL, oder unterschiedlich).
 
Zuletzt bearbeitet:
So wie ich nun gelesen habe ist wird das BIE Bit an den ENO Ausgang geschrieben. Ist das korrekt??

Der ENO Ausgang jedenfalls ist TRUE

Ja, in FUP ist das der ENO-Ausgang. Zeig doch mal deinen Code und deine Symbolik, sonst kommt man hier nicht weiter.

Hier mal ein Beispiel von mir:

Code:
Symboltabelle:
LIMIT_IN	MW    600	INT
LIMIT_OUT	MW    602	INT


VAR_TEMP
  MX : INT ;	
  MN : INT ;		
END_VAR

BEGIN
NETWORK
TITLE =

// Temp-Variablen mit Grenzwerten beschalten
      L     10; 
      T     #MN; 

      L     1000; 
      T     #MX; 

      CALL "LIMIT" (
           MN                       := #MN,
           IN                       := "LIMIT_IN",
           MX                       := #MX,
           RET_VAL                  := "LIMIT_OUT");

// BIE-Bit auswerten
// Wenn ein Fehler bei der Bearbeitung auftrat, ist das Bit false
      U     BIE; 
      =     M    650.0;
 
So ich habe mein FUP mal in ein AWL gewandelt und vom ganzen eine PDF Dok erstellt:
Hier raus habe ich alles relevante als Text unten eingefügt


Symbol Adresse Datentyp Kommentar
Input MW 100 INT
LIMIT FC 22 FC 22 Limit
Output MW 102 INT
Input MW 100 INT



Name Datentyp Adresse Anfangswert Kommentar

TEMP 0.0
MIN Int 0.0 0
Test Int 2.0 9000
MAX Int 4.0 10000


Baustein: FB1
Netzwerk: 1
CALL "LIMIT" FC22 -- Limit
MN :=#MIN
IN :=#Test
MX :=#MAX
RET_VAL:="Output" MW102
NOP 0


Dankeschön für die Mühe!!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also bei mir würde das auch so funktionieren.
Wie siehst du dir das Ergebnis denn an? Denn wie ich oben schon schrieb, kannst du die Parameter aufgrund des Datentyps ANY im Online-Status nicht beobachten.
Du kannst aber einfach mal unter den Limit-Aufruf die Zeile

L MW 102

schreiben, dann kannst du den Wert an der Stelle beobachten. Oder du nimmst eine Variablentabelle...
 
Name Datentyp Adresse Anfangswert Kommentar

TEMP 0.0
MIN Int 0.0 0
Test Int 2.0 9000
MAX Int 4.0 10000
Hallo rsu76,

die von Dir angegebene Deklaration Deiner TEMP-Variablen kann nicht stimmen.
Man kann bei TEMP-Variablen keinen Anfangswert vorgeben.
Wenn man TEMP-Variablen benutzt, dann muß man denen VOR lesender Benutzung einen Wert zuweisen.

Hast Du eigentlich das Programmbeispiel von Thomas_v2.1 gelesen?
Das Anpassen auf Deine Variablenadressen ist doch nicht schwer.
OK, ich mixe mal Dein Programm mit dem funktionierenden Programm von Thomas.
Code:
// Netzwerk 1: Grenzwerte initialisieren
      L     0
      T     #MIN

      L     10000
      T     #MAX

// Netzwerk 2: FC aufrufen
      CALL  "LIMIT"        // FC22
       MN     :=#MIN
       IN     :="Input"    // MW100
       MX     :=#MAX
       RET_VAL:="Output"   // MW102
      NOP   0

// Netzwerk 3: Fehler beobachten
      U     BIE
      =     #temp_BIE
Tu uns den Gefallen und tippe die ersten beiden Netzwerke GENAU so ab. ;)
Dann funktioniert's auch bei Dir.

Gruß
Harald
 
Ich schue die Werte immer mit den Var Tabelle an.

Ja dann wende ich mich wohl mall an die lieben Leute von Siemens.

Danke trotzdem für deine Hilfe

Liebe Grüsse
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich schue die Werte immer mit den Var Tabelle an.

Ja dann wende ich mich wohl mall an die lieben Leute von Siemens.

Danke trotzdem für deine Hilfe

Liebe Grüsse

... die werden dir dann den Simatic Grundkurs empfehlen.

Die o.g. Lösung funktioniert doch.
Warum gehst du da drauf überhaupt nicht ein?
 
Hallo rsu76,

die von Dir angegebene Deklaration Deiner TEMP-Variablen kann nicht stimmen.
Man kann bei TEMP-Variablen keinen Anfangswert vorgeben.
Wenn man TEMP-Variablen benutzt, dann muß man denen VOR lesender Benutzung einen Wert zuweisen.

Ich dachte auch erst er hat Temp-Variablen genommen, aber wie man aus den Resten der Spaltenüberschriften sehen kann, scheinen es wohl doch statische Variablen zu sein (sonst gäbe es auch keine Startwerte).

@rsu76
Hänge doch mal dein Step7-Projekt an, würde mich auch interessieren warum es bei dir immer noch nicht funktioniert.
 
@rsu76
Hänge doch mal dein Step7-Projekt an, würde mich auch interessieren warum es bei dir immer noch nicht funktioniert.

Das kann doch nur folgendes sein:

1. Der Aufruf des FB1 ist nicht korrekt
oder
2. Die Startwerte wurden nachträglich geändert, und der IDB wurde nicht initialisiert
oder
3. Die verschalteten Variablen werden irgendwo anders überschrieben

@rsu
schreib doch einfach mal vor dem Aufruf der FC22

Code:
l min
l max
l input

dann kannst du sehen welche Werte wirklich an die FC übergeben werden...
 
Zurück
Oben