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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: Positions / Koordinatenabfrage-abfrage in SCL oder auch AWL

  1. #11
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Klasse Thomas,
    das habe ich jetzt auch nicht gesehen.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  2. #12
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Die Datentypen passen nicht zusammen. Ich kann mir auch nicht vorstellen dass es nur die eine Fehlermeldung gibt.
    Die Variable IP ist ein INT, und Pos_DB.DD[x] ist ein Doppelwort. Verschiedene Datentypen kann man in SCL nur mit einer entsprechenden Konvertierungsfunktion vergleichen.

    Probier mal:
    Code:
    IF IP < DWORD_TO_INT(Pos_DB.DD[x]) THEN
    Dacht da auch schon dran, meinte aber woher soll ich aus der Symbolik erkennen welche Wortbreite?
    Aber am Schleifenzähler wars dann klar

    Hmm, merk grad wieder, dass ich öfter mit SCL arbeiten muss
    Wenn ich einen meiner Finger in eines deiner Nasenlöcher stecke, haben wir beide nen Finger in der Nase

  3. #13
    Avatar von Bonsai-San
    Bonsai-San ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.10.2009
    Ort
    Teltow
    Beiträge
    23
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Die Datentypen passen nicht zusammen. Ich kann mir auch nicht vorstellen dass es nur die eine Fehlermeldung gibt.
    Die Variable IP ist ein INT, und Pos_DB.DD[x] ist ein Doppelwort. Verschiedene Datentypen kann man in SCL nur mit einer entsprechenden Konvertierungsfunktion vergleichen.

    Probier mal:
    Code:
    IF IP < DWORD_TO_INT(Pos_DB.DD[x]) THEN
    Hallo Thomas

    Habe auch schon beide auf DINT gesetzt, hat nichts geändert.
    An gleicher Stelle bringt er noch die fehlermeldung Unzulässige Operantentypen
    MfG
    Sascha

  4. #14
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Zitat Zitat von Bonsai-San Beitrag anzeigen
    Hallo Thomas

    Habe auch schon beide auf DINT gesetzt, hat nichts geändert.
    An gleicher Stelle bringt er noch die fehlermeldung Unzulässige Operantentypen
    Wo hast du beide auf DINT gesetzt ? In der Abfrage mit einem Typecast oder in dem Datenbaustein die Zelle ?
    Wenn du absolut auf einen externen DB zugreifst so bekommst du die Inhalte immer im Rohformat (also je nach Breite in BOOL, BYTE, WORD oder DWORD) auch wenn die Werte im DB eigentlich anders formatiert sind. Du mußt also bei so etwas IMMER den Typecast (DWORD_to_DINT z.B.) einsetzen ...

    Gruß
    Larry

  5. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Bonsai-San (04.03.2011)

  6. #15
    Avatar von Bonsai-San
    Bonsai-San ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.10.2009
    Ort
    Teltow
    Beiträge
    23
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    aha, danke, nun bin ich dann glaub ich schlauer, das probiere ich gleich mal aus.

    mmh, nur mal so nebenbei.. gibts da ein gescheites Buch zu dem Thema ??
    MfG
    Sascha

  7. #16
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Bonsai-San Beitrag anzeigen
    Code:
    FUNCTION FC100 : void
    VAR_INPUT
        IP: INT;  
        Pos_DB : BLOCK_DB;
        erste_adr: INT;
        letzte_adr: INT;
    END_VAR
    VAR_TEMP
        Pos_dif: DINT ;
        x_1: INT ;
        x: INT ;
        IP_DB: INT ;
        Pos_X: DINT ;
        Pos_Y: DINT ;
    END_VAR
    VAR_OUTPUT
            Koordinate: DINT ;
    END_VAR
    [...]
    BEGIN
    //Schleife hochzählen 
    FOR x :=erste_adr TO letzte_adr BY 4 DO
        IF IP < Pos_DB.Dd[x] THEN IP_DB := 1 ;
    Mal eine Frage:
    Woher kennt der SCL-Compiler die Struktur des übergebenen Datenbausteins? Woher weiß er, daß da ein Array ist?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #17
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Mal eine Frage:
    Woher kennt der SCL-Compiler die Struktur des übergebenen Datenbausteins? Woher weiß er, daß da ein Array ist?
    Das weiß er eben garnicht, der Zugriff .DD[x] heißt Datendoppelwort Adresse x.
    Mal angenommen er hat einen Datenbaustein mit Namen "Daten" in dem ein Array mit Namen DD liegt, müsste er mit "Daten".DD[x] zugreifen, also man kann es nur an den Anführungszeichen sehen.

    Meines Erachtens ist es absolut nicht notwendig SCL noch mit absoluten Adressen zu arbeiten, und ganz schlechter Stil. Man muss seine Daten so strukturieren dass ich sowas nicht mehr brauche. Wenn ich um sowas nicht herumkomme sind die Daten falsch strukturiert.

  9. Folgende 2 Benutzer sagen Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Larry Laffer (05.03.2011),PN/DP (05.03.2011)

  10. #18
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Das weiß er eben garnicht, der Zugriff .DD[x] heißt Datendoppelwort Adresse x.
    Mal angenommen er hat einen Datenbaustein mit Namen "Daten" in dem ein Array mit Namen DD liegt, müsste er mit "Daten".DD[x] zugreifen, also man kann es nur an den Anführungszeichen sehen.
    Es kommt sogar noch anders:
    Habe ich ein Array mit Namen DD in einem Datenbaustein, so wird mit "Daten".DD[x] auf die Absolutadresse anstatt des Array-Elementes zugegriffen.
    Könnte verfänglich werden, eine Compilerwarnung wäre hier imho angebracht.

  11. #19
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Warum machst du das mit absoluter Adressierung? Mach das doch einfach mit einem Int-Array:

    DB:
    Code:
    Data_Block "MyPos"
        nPos    :Array[1..10] of int;
    End_Data_Block
    FB:
    Code:
    ...
    IF IP < "MyPos".nPos[x] THEN

  12. #20
    Avatar von Bonsai-San
    Bonsai-San ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.10.2009
    Ort
    Teltow
    Beiträge
    23
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Jungs, ihr macht mir das Leben schwer

    ich bin doch völlig neu auf dem Gebiet.. hab nur (Outing) FUP Erfahrung...
    aber ich bin willig und für alle tipps dankbar.

    Deswegen nochmals meine Frage, was gibt es schriftliches was einem der Sache SCL etwas näher bringt ??

    MfG
    Sascha
    MfG
    Sascha
    Zitieren Zitieren mmh  

Ähnliche Themen

  1. Ansteuerung von positions lampen in fup
    Von Manfred_89 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 03.03.2011, 11:19
  2. Antworten: 10
    Letzter Beitrag: 22.06.2010, 15:10
  3. Antworten: 4
    Letzter Beitrag: 14.10.2009, 13:01
  4. Antworten: 9
    Letzter Beitrag: 16.10.2007, 13:48
  5. Antworten: 10
    Letzter Beitrag: 27.06.2004, 17:17

Lesezeichen

Berechtigungen

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