Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: SCL -- Datentyp Any -- Rechnen

  1. #1
    Registriert seit
    09.01.2006
    Beiträge
    27
    Danke
    4
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich will mir einen FB schreiben mit dem ich mit verschiedene Datentypen skalieren kann. Dazu verwende ich den Datentyp Any. Leider lässt er sich nicht so verwenden, wie ich gerne hätte. Habt ihr einen Tipp für mich???

    In der Hilfe steht was von ANY_NUM. Wo benutze ich das???

    Danke im Vorraus!!!

    Hier der Programmauszug

    FUNCTION_BLOCK FB80

    VAR_INPUT
    I1_I_MIN : ANY;
    I1_I_MAX : ANY;
    I2_I_MIN : ANY;
    I2_I_MAX : ANY;
    I1_ACTUAL : ANY;
    I_MODE : INT;
    END_VAR
    VAR_OUTPUT
    O_ACT_REAL : REAL;
    O_ACT_INT : INT;
    END_VAR
    VAR_TEMP
    TEMP_I_VALUE : ANY;
    TEMP1_I_VALUE : ANY;
    TEMP2_I_VALUE : ANY;
    TEMP3_I_VALUE : ANY;
    END_VAR
    BEGIN

    // I_MODE = 0 ist die Umwandlung von INT nach INT
    CASE I_MODE OF
    0: TEMP_I_VALUE := INT_TO_REAL (I1_I_MAX - I1_I_MIN);
    TEMP1_I_VALUE :=INT_TO_REAL (I2_I_MAX - I2_I_MIN);
    TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
    O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
    O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;

    // I_MODE = 1 ist die Umwandlung von INT nach REAL
    1: TEMP_I_VALUE := INT_TO_REAL I1_I_MAX - I1_I_MIN;
    TEMP1_I_VALUE :=I2_I_MAX - I2_I_MIN;
    TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
    O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
    O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;

    // I_MODE = 1 ist die Umwandlung von REAL nach REAL
    2: TEMP_I_VALUE := I1_I_MAX - I1_I_MIN;
    TEMP1_I_VALUE :=I2_I_MAX - I2_I_MIN;
    TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
    O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
    O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;

    // I_MODE = 1 ist die Umwandlung von REAL nach INT
    3: TEMP_I_VALUE := I1_I_MAX - I1_I_MIN;
    TEMP1_I_VALUE :=INT_TO_REAL (I2_I_MAX - I2_I_MIN);
    TEMP2_I_VALUE := TEMP1_I_VALUE / TEMP_I_VALUE;
    O_ACT_INT := REAL_TO_INT (TEMP2_I_VALUE * I1_ACTUAL);
    O_ACT_REAL := TEMP2_I_VALUE * I1_ACTUAL;
    END_CASE;


    END_FUNCTION_BLOCK
    Zitieren Zitieren SCL -- Datentyp Any -- Rechnen  

  2. #2
    Registriert seit
    11.10.2006
    Ort
    Verden (Aller)
    Beiträge
    530
    Danke
    31
    Erhielt 58 Danke für 49 Beiträge

    Standard

    Moin!

    Anbei, wie man mit Any-Pointern in SCL umgeht, wenn man sich mal einen selbst bauen muß, oder einen verändern muß.

    Der Deklaration eines Any-Pointers, folgt die Deklaration einer Datensicht:

    Quelle : ANY;
    QuellPointer AT Quelle : STRUCT
    SyntaxID : BYTE;
    Datentyp : BYTE;
    Laenge : INT;
    db_Nummer : INT;
    BytePointer : DWORD;
    END_STRUCT;

    Den AnyPointer auf ein Datenelement zeigen lassen:

    Quelle := "TP-Daten".Stoerspeicher_1;

    Den AnyPointer "von Hand" zusammenbauen:

    QuellPointer.SyntaxID := b#16#10;
    QuellPointer.Datentyp := b#16#4; //Datentyp WORD
    QuellPointer.Laenge := 10; //Zum Beispiel 10 Worte
    QuellPointer.db_nummer := 100; //zum Bleistift DB100
    QuellPointer.BytePointer := dw#16#84000000 OR
    SHL(IN: DINT_TO_DWORD(i),N:=3);

    So ist also jede Manipulation des AnyPointers möglich. Manchmal wird's halt krampfig wegen der nötigen Formatwandlungen, aber was soll's.
    "Ein lahmer Drecksplanet ist das, ich habe nicht das geringste Mitleid" (Prostetnik Vogon Jeltz)
    Zitieren Zitieren Any-Pointer in SCL  

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    vielleicht auch mal diesen Beitrag lesen : http://www.sps-forum.de/showthread.php?t=12923

    Dort hat Volker das nach meiner Meinung sehr schön erklärt ...

  4. #4
    Registriert seit
    25.06.2007
    Ort
    Dresden
    Beiträge
    3.930
    Danke
    465
    Erhielt 878 Danke für 634 Beiträge

    Standard

    Frage vom
    09.01.2006, 13:15

    Anwort am:
    24.10.2007, 10:17


    Klasse, besser spät als nie!!!

    ...
    Zitieren Zitieren High speed answer :-)  

  5. #5
    Registriert seit
    24.10.2007
    Ort
    USA
    Beiträge
    815
    Danke
    3
    Erhielt 73 Danke für 57 Beiträge

    Standard

    XXX: ANY;
    YYY AT XXX : STRUCT
    a : BYTE;
    b : INT;
    c: DWORD;
    END_STRUCT;

    Begin
    XXX:= DB2.Bit0; // XXX zeigt auf Bit0 in DB2

    YYY.a:=B#16#3;
    YYY.b:=B#16#0;

    .
    .
    .
    Fragen:
    1: ist AT eine Art der Zuweisung?
    2: Muss man den Pointer immer initialisieren (XXX:= DB2.Bit0 wie ich von anderen Progr.Sprachen (Java,C++...) kenne??
    3: Jedem Any Pointer soll in der CPU einen Spiecherplatz von 10 Byte reserviert. Kann man jemand sagen laut der Darstellung von
    http://www.sps-forum.de/showthread.php?t=12923 und laut dem Beispiel oben wie die Byte von 2 bis 9 belegt werden sollen (laut meinem Beispiel)??

    Danke im Voraus
    johnij

    Danke euch lerne ich täglich was mehr
    .

  6. #6
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hallo,

    "AT" ist nur eine sicht auf die Variable.

    Wie von derwestermann bereits geschrieben ist der Aufbau folgender:
    Quelle : ANY;
    QuellPointer AT Quelle : STRUCT
    SyntaxID : BYTE;
    Datentyp : BYTE;
    Laenge : INT;
    db_Nummer : INT;
    BytePointer : DWORD;
    END_STRUCT;
    Der Zugriff auf die Einzelnen Variablen erfolgt durch QuellPointer.Datentyp usw.

    Anbei der Auszug aus der S7 Hilfe zum Datentyp ANY.
    Angehängte Dateien Angehängte Dateien
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  7. #7
    Registriert seit
    24.10.2007
    Ort
    USA
    Beiträge
    815
    Danke
    3
    Erhielt 73 Danke für 57 Beiträge

    Standard

    und was ist mit der Initialisierung vom ANY Zeiger?? (s. Frage 2)

  8. #8
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Ach ja,

    was soll denn angehängt werden?

    Bsp.:

    XXX: DB2.DBX0.0, DB2.DBW0, DB2.DBD0 o. Mehrere Variablen
    z.B. P#DB2.DBX0.0 BYTE 10

    MfG
    Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  9. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Was heißt initialisieren, du legst die Variable vom Typ Any an und bevor du sie verwendest, mußt du die Variable natürlich mit sinnvollen Daten füttern. Insofern, ja, du mußt sie initialisieren.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  10. #10
    Registriert seit
    24.10.2007
    Ort
    USA
    Beiträge
    815
    Danke
    3
    Erhielt 73 Danke für 57 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    [quote=D. Albinus;104149]Hallo,

    "AT" ist nur eine sicht auf die Variable.

    Was meinst du damit?????
    Im Beisp. kann ich trotzdem ohne AT auf die Variablen der Struktur YYY mit YYY.a, YYY.b... zugreifen.

    Wozu brauche ich denn einen Any-Pointer in dem Beispiel???


    Merci
    Geändert von johnij (01.11.2007 um 13:37 Uhr)

Ähnliche Themen

  1. Rechnen mit SCL
    Von hulla66 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 11.05.2016, 15:27
  2. rechnen
    Von waldy im Forum Stammtisch
    Antworten: 12
    Letzter Beitrag: 12.06.2011, 10:17
  3. Rechnen mit LOG in SCL
    Von Waelder im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 23.07.2009, 16:12
  4. Mit SPS rechnen
    Von Moboso im Forum Simatic
    Antworten: 31
    Letzter Beitrag: 09.04.2008, 21:40
  5. Rechnen
    Von Mr. Smoth im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 22.04.2007, 09:19

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •