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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 33

Thema: Hilfe für ANY-Neuling

  1. #11
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Gebs Beitrag anzeigen
    leider geht das, was Du vorhast so nicht, weil Variablen höheren Typs (Dazu gehört der ANY)
    nicht mit L bzw. T angesprochen werden können.
    soweit, so richtig, aber im any steht doch drin, wo sich der wert befindet, hab das hier mal nur fürs lesen vorbereitet:

    Code:
    *
    FUNCTION FC 1 : VOID
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      anyIn : ANY ;    
    END_VAR
    VAR_OUTPUT
      outReal : REAL ;    
      outWord : WORD ;    
    END_VAR
    VAR_TEMP
      Datentyp : BYTE ;    
      istReal : BOOL ;    
      istWord : BOOL ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          L     P##anyIn; 
          LAR1  ; 
    
          L     B [AR1,P#1.0]; //Datentyp laden
          T     #Datentyp; 
          L     W#16#8; //ist REAL
          ==I   ; 
          SPBN  nore; 
          =     #istReal; 
          SPA   ver1; 
    nore: L     #Datentyp; 
          L     W#16#4; //ist WORD
          ==I   ; 
          SPBN  err; 
          =     #istWord; 
    ver1: L     D [AR1,P#6.0]; //Speicherbereich aus ANY
          LAR1  ; //in AR1
          U     #istReal; 
          SPBN  ver2; 
          L     D [AR1,P#0.0]; //auf IN-wert zugreifen
          T     #outReal; 
          SPA   err; 
    
    ver2: U     #istWord; 
          SPBN  err; 
          L     W [AR1,P#0.0]; 
          T     #outWord; 
    
    err:  NOP   0; 
    END_FUNCTION
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  2. #12
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    @VL:

    Ich habe ja auch geschrieben, dass es möglich ist mit ANY-POINTERN zu arbeiten:

    Zitat Zitat von Gebs Beitrag anzeigen
    Natürlich gibt es eine Lösung um den entsprechenden Wert auszulesen und zu übergeben.
    Aber ich halte das nicht für die beste Lösung, da er ja auch folgendes geschrieben hat:

    Zitat Zitat von Mecki Beitrag anzeigen
    Zeiger sind bei vielen der Kunden nicht erwünscht, also möchte ich gerne, die Anzahl der Zeiger(-Operationen) auf ein Minimum reduzieren.
    Ich gehe mal davon aus, dass Du den Code nur mal schnell runtergeschrieben hast.
    Denn wenn er Daten aus einem DB holt, muss er noch den entsprechenden DB öffnen:

    Code:
    L     W [AR1,P#4.0]
    T     #DBNO
    AUF   DB [#DBNO]

  3. #13
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Gebs Beitrag anzeigen
    Ich gehe mal davon aus, dass Du den Code nur mal schnell runtergeschrieben hast.
    jopp, bin von E und M bereich ausgegangen

    also damit die zeiger zu reduzieren ist wirklich nicht möglich!
    wenn man den OUT auch noch als ANY machen will, wirds noch verwirrender ... aber was solls, er wollte ja nur wissen, wie es geht...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #14
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    niemals, aber auch wirklich niemals will ich sowas in irgendeiner anlage vorfinden geschweigedenn einbauen:

    Code:
    *
    FUNCTION "UN-&SCALE_ANY" : VOID
    TITLE =
    AUTHOR : '4lagig'
    VERSION : 0.1
    
    
    VAR_INPUT
      anyIn : ANY ;    
      bParameter : BYTE ;    
    END_VAR
    VAR_OUTPUT
      anyOut : ANY ;    
    END_VAR
    VAR_TEMP
      bTypIn : BYTE ;    
      bTypOut : BYTE ;    
      xScale : BOOL ;    
      xUnscale : BOOL ;    
      dTempAR1 : DWORD ;    
      dTempAR2 : DWORD ;    
      wDB1 : WORD ;    
      wDB2 : WORD ;    
      wInValue : WORD ;    
      rInValue : REAL ;    
      wOutValue : WORD ;    
      rOutValue : REAL ;    
      rScaleMax : REAL ;    
      rScaleMin : REAL ;    
      rDelta : REAL ;    
      xDB1 : BOOL ;    
      xDB2 : BOOL ;   
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    // --- Register retten
          TAR1  ; 
          T     #dTempAR1; 
          TAR2  ; 
          T     #dTempAR2; 
    NETWORK
    TITLE =
    // --- Typprüfung
          L     P##anyIn; 
          LAR1  ; 
          L     P##anyOut; 
          LAR2  ; 
          L     B [AR1,P#1.0]; //Datentyp laden
          T     #bTypIn; 
          L     B [AR2,P#1.0]; 
          T     #bTypOut; 
    
          U(    ; 
          L     #bTypIn; 
          L     W#16#4; //ist WORD
          ==I   ; 
          )     ; 
          U(    ; 
          L     #bTypOut; 
          L     W#16#8; //ist REAL
          ==I   ; 
          )     ; 
          SPBN  nore; 
          =     #xScale; 
          R     #xUnscale; 
          SPA   db; 
    nore: U(    ; 
          L     #bTypIn; 
          L     W#16#8; //ist REAL
          ==I   ; 
          )     ; 
          U(    ; 
          L     #bTypOut; 
          L     W#16#4; //ist WORD
          ==I   ; 
          )     ; 
          SPBN  err; 
          =     #xUnscale; 
          R     #xScale; 
    NETWORK
    TITLE =
    // --- Datenbaustein?
    db:   L     W [AR1,P#4.0]; 
          L     0; 
          <>I   ; 
          SPBN  db2; 
          TAK   ; 
          T     #wDB1; 
          SET   ; 
          =     #xDB1; 
          SPA   db3; 
    db2:  CLR   ; 
          =     #xDB1; 
    db3:  L     W [AR2,P#4.0]; 
          L     0; 
          <>I   ; 
          SPBN  db4; 
          TAK   ; 
          T     #wDB2; 
          SET   ; 
          =     #xDB2; 
          SPA   ver; 
    db4:  CLR   ; 
          =     #xDB2; 
    NETWORK
    TITLE =
    // --- Skalierung festlegen
    ver:  L     #bParameter; 
          SPL   err1; 
          SPA   err1; 
          SPA   V0_1; 
          SPA   V1_1; 
          SPA   A0_2; 
          SPA   A4_2; 
    
    err1: SPA   err; 
    V0_1: L     0.000000e+000; //0..10V
          T     #rScaleMin; 
          L     1.000000e+001; 
          T     #rScaleMax; 
          SPA   ver1; 
    V1_1: L     -1.000000e+001; //-10..10V
          T     #rScaleMin; 
          L     1.000000e+001; 
          T     #rScaleMax; 
          SPA   ver1; //0..20mA
    A0_2: L     0.000000e+000; 
          T     #rScaleMin; 
          L     2.000000e+001; 
          T     #rScaleMax; 
          SPA   ver1; 
    A4_2: L     4.000000e+000; //4..20mA
          T     #rScaleMin; 
          L     2.000000e+001; 
          T     #rScaleMax; 
          SPA   ver1; 
    NETWORK
    TITLE =
    // --- Bearbeiten
    ver1: L     D [AR1,P#6.0]; //Speicherbereich aus ANY
          LAR1  ; //in AR1
          L     D [AR2,P#6.0]; //Speicherbereich aus ANY
          LAR2  ; //in AR2
    NETWORK
    TITLE =
    // --- SCALE
          U     #xScale; 
          SPBN  ver5; 
    
          U     #xDB1; 
          SPB   ver2; 
          L     W [AR1,P#0.0]; //auf IN-wert zugreifen
          T     #wInValue; 
          SPA   ver3; 
    ver2: AUF   DB [#wDB1]; 
          L     DBW [AR1,P#0.0]; //auf IN-wert zugreifen
          T     #wInValue; 
    ver3: L     L#32767; 
          <I    ; 
          SPBN  err; 
          L     #wInValue; 
          L     -1728; 
          >I    ; 
          SPBN  err; 
    
          L     #wInValue; 
          ITD   ; 
          DTR   ; 
          T     #rInValue; 
          L     #rScaleMax; 
          L     #rScaleMin; 
          -R    ; 
          L     #rInValue; 
          *R    ; 
          L     2.764800e+004; 
          /R    ; 
          L     #rScaleMin; 
          +R    ; 
          T     #rOutValue; 
    
          U     #xDB2; 
          SPB   ver4; 
          L     #rOutValue; 
          T     D [AR2,P#0.0]; 
          SPA   nerr; 
    ver4: AUF   DB [#wDB2]; 
          L     #rOutValue; 
          T     DBD [AR2,P#0.0]; 
          SPA   nerr; 
    NETWORK
    TITLE =
    // --- UNSCALE
    ver5: U     #xUnscale; 
          SPBN  err; 
          U     #xDB1; 
          SPB   ver6; 
          L     D [AR1,P#0.0]; //auf IN-wert zugreifen
          T     #rInValue; 
          SPA   ver7; 
    ver6: AUF   DB [#wDB1]; 
          L     DBD [AR1,P#0.0]; //auf IN-wert zugreifen
          T     #rInValue; 
    
    ver7: L     #rScaleMax; 
          L     #rScaleMin; 
          -R    ; 
          T     #rDelta; 
          L     #rInValue; //der auszugebende Wert
          L     #rScaleMin; 
          -R    ; 
          L     #rDelta; 
          /R    ; 
          L     2.764800e+004; //Skalierungsfaktor
          *R    ; 
          RND   ; 
          T     #wOutValue; 
    
          U     #xDB2; 
          SPB   ver8; 
          L     #wOutValue; 
          T     W [AR2,P#0.0]; 
          SPA   nerr; 
    ver8: AUF   DB [#wDB2]; 
          L     #wOutValue; 
          T     DBW [AR2,P#0.0]; 
          SPA   nerr; 
    NETWORK
    TITLE =
    // --- Fehlerbehandlung
    nerr: SET   ; 
          SAVE  ; 
          SPA   add; 
    err:  CLR   ; 
          SAVE  ; 
    add:  L     #dTempAR1; 
          LAR1  ; 
          L     #dTempAR2; 
          LAR2  ; 
    END_FUNCTION
    außer der kunde ist böse und hat es nicht anders verdient
    Geändert von vierlagig (03.11.2008 um 14:27 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #15
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    das "schöne" ist, dass man jegliche querverweise vergessen kann... is das nicht toll?!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #16
    Mecki ist offline Benutzer
    Themenstarter
    Registriert seit
    31.05.2007
    Ort
    Hagen
    Beiträge
    66
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von Gebs Beitrag anzeigen
    Besser wäre m.E. wenn Du die Adresse des PEW bzw. Realwertes in Parameter zerlegst,
    und diese in Deinem FC zu einem Pointer zusammensetzt. Damit kannst Du dann deine
    Werte lesen und schreiben.
    Ok, das wäre auch ein Ansatz. Ich dachte, wenn ich ANY übergebe, dann darauf einen Pointer in meinem FC erzeuge, dann kann ich dort genau so werte auslesen und schreiben. Ich wollte mit dem FC es möglichst einfach machen, Analogwerte von einer Baugruppe einzulesen, bzw. auszugeben.
    Trick sollte es einfach sein, dass ich nur einen FC benötige, an den der Nutzer entweder sein PEW oder seinen REAL-Wert dranschreibt und den Rest quasi der FC erledigt.

    Nochmal kurz zu den POINTERN....der Kunde wird ja später nur sehen, dass ich einen Analogwert einlese und er die Realzahl dazu bekommt oder aus einer Realzahl einen Wert für die analoge Ausgabekarte mache. Das ganze drum herum ist ja übersichtlich. Wozu sollte der Kunde später in den FC hineinschauen müssen?
    Geändert von Mecki (03.11.2008 um 14:19 Uhr)

  7. #17
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    niemals, aber auch wirklich niemals will ich sowas in irgendeiner anlage vorfinden geschweigedenn einbauen:
    ...
    außer der kunde ist böse und hat es nicht anders verdient


    Du hast Dir ja richtig viel Mühe gegeben
    RESPEKT!

  8. #18
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Mecki Beitrag anzeigen
    Wozu sollte der Kunde später in den FC hineinschauen müssen?
    aller erste grundregel: der kunde guckt immer rein! ...irgendwann, wenn mal was wieder nicht geht wird er den fehlersuchen und ihn natürlich auch in deinem baustein vermuten und wenn er dann son hammer vorfindet, wie ich ihn da oben gepostet habe, wird er das ding ganz schnell wieder zu machen, markieren und ENTF drücken ... so würd ich es machen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Mecki (03.11.2008)

  10. #19
    Registriert seit
    08.11.2006
    Ort
    Uckermark
    Beiträge
    903
    Danke
    201
    Erhielt 256 Danke für 208 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    aller erste grundregel: der kunde guckt immer rein! ...irgendwann, wenn mal was wieder nicht geht wird er den fehlersuchen und ihn natürlich auch in deinem baustein vermuten und wenn er dann son hammer vorfindet, wie ich ihn da oben gepostet habe, wird er das ding ganz schnell wieder zu machen, markieren und ENTF drücken ... so würd ich es machen
    Wetten, dass die Meisten genau das nicht machen?
    Neue Ideen begeistern jene am meisten, die auch mit den alten nichts anzufangen wussten.
    Karl Heinrich Waggerl (1897-1973)

  11. #20
    Mecki ist offline Benutzer
    Themenstarter
    Registriert seit
    31.05.2007
    Ort
    Hagen
    Beiträge
    66
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @vierlagig,

    da hast du natürlich recht. Jedoch benutzt man ja auch z.b. die MAX Funktion von Siemens, welche auch nur ANY-Arithmetik benutzt. Und ich denke auch mal, dass der Kunde auch sehen kann, dass der FC später den richtigen wert herauswirft. Die Berechnungsformel ist ja bekannt, bzw. steht im Kommentarbereich des Netzwerks der den FC aufruft.

Ähnliche Themen

  1. Neuling braucht Hilfe bei RS 232 zu Mpi
    Von BlenderNRW im Forum Stammtisch
    Antworten: 6
    Letzter Beitrag: 16.10.2011, 21:55
  2. Hilfe für ein Neuling
    Von DemoniacAries im Forum PC- und Netzwerktechnik
    Antworten: 0
    Letzter Beitrag: 02.06.2010, 00:17
  3. SPS-Neuling braucht Hilfe
    Von SPS-Neuling1 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 19.02.2010, 16:18
  4. hilfe für vbs neuling
    Von el_bob im Forum HMI
    Antworten: 9
    Letzter Beitrag: 28.08.2009, 12:33
  5. Hilfe für SPS Neuling
    Von mustermann im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.05.2008, 22:04

Lesezeichen

Berechtigungen

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