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

Page 1 of 3 123 LastLast
Results 1 to 10 of 28

Thread: Frage bezüglich OB1

  1. #1
    Join Date
    12.11.2008
    Posts
    65
    Danke
    43
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Der OB1 birgt noch immer einige Rätsel für mich. Soweit ich jetzt weiss kann man ja von ihm aus die Haupstbausteine aufrufen. Ist es möglich dann folgendes in den OB1 zu schreiben:

    Code:
    UN E 0.0 //Notaus nicht gedrückt
    CC FB3 //Aufruf des Bausteins "Testbereit"
    //Letzte Anweisung von FB3 ist die Zahl 4 in MD100 zu transferieren
     
    UN E 0.0 //Notaus nicht gedrückt
    U(
    L MD100
    L 4
    ==I) //und Zahl in MD100 lautet 4
    CC FB4
    //Letzte Anweisung von FB4 ist die Zahl 5 in MD100 zu transferieren
     
    UN E 0.0 //Notaus nicht gedrückt
    U(
    L MD100
    L 5
    ==I) //und Zahl in MD100 lautet 5
    CC FB5
    Würde das so klappen, oder sollte ich doch besser mit einer Sprungleiste hier arbeiten oder bin ich total auf dem Holzweg?

    Die aufgerufenen Bausteine selbst haben an sich keine Eingangsparameter, nur Bedingungen, und höchsten zwei Ausgaben in Form von MDs
    Reply With Quote Reply With Quote Frage bezüglich OB1  

  2. #2
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    Quote Originally Posted by DerPraktikant View Post
    und höchsten zwei Ausgaben in Form von MDs
    ist der satz den ich nicht so ganz verstehe ...
    wenn du die bausteine mit CC aufrufst kannst du keine parameter übergeben, auch STAT-variablen werden mangels zugewiesenen IDB nicht funktionieren, wenn deine mit CC aufgerufenen FBs allerdings nur mit globaldaten arbeiten, funktioniert das gut.

    also: hast du eine schnittstelle definiert - dann geht das nicht. (mal die möglichkeit der IDB-übergabe über AR2 ausgeschlossen)

    ansonsten ist es so möglich, wie du es gepostet hast. der ablauf des OB1 ist sequentiel (und zyklisch) d.h. der mit 4 beschriebene wert aus FB3 ist nach abarbeitung dessen, global verfügbar.

    [edit] warum benutzt du zum speichern einer INT-zahl ein doppelwort? die passt doch bequem in ein MW ... <- ich hatte dich bereits darauf hingewiesen, dass es sauberer ist zahlenformate eindeutig zu benutzen. d.h. wenn du mit dem MD100 arbeiten möchtest solltest du auch mit ==D auf L#4 bzw. L#5 vergleichen bzw. diese zahlen dann auch im MD100 ablegen. [/edit]
    Last edited by vierlagig; 11.12.2008 at 07:42.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    Join Date
    12.11.2008
    Posts
    65
    Danke
    43
    Erhielt 0 Danke für 0 Beiträge

    Default

    Ja also zunächst einmal hätten zwei Bausteine die Aufgabe Kräfte zu messen und diese sollten dann irgendwo abgespeichert sein, damit man sie am Ende des Tests auf einem TP anzeigen lassen kann.

    Vielleicht sollte der Bausteinaufruf dann eher so erfolgen, z.B.:

    Code:
     
    UN E 0.0
    U(
    L MW100
    L 3
    ==I)
    CALL FB3
      IN     := PEW 6 //hatte vergessen dass ich doch einen analogen Input habe
      OUT1 := MD0
      OUT2 := MD4
    Die folgende Frage ist vermutlich zwar selbstverstädnlich, aber ich wil sichergehen: Die IN und OUT Angaben muss ich ja dann im entsprechenden Baustein auch in der Umgebung/Schnittstelle Leiste eintragen nehme ich an? Und als was?

    IN über PEW 6 ist ein analoges Eingangssignal eines Kraftsensors, mit Spannung zwischen 0...10V.
    Die beiden OUT wären dann die von einem FC105 umgewandelten Werte von dem analogen Eingangssignal welche dann in den MD0 und MD4 abgespeichert bleiben sollten bis zur Anzeige am TP.

    Gerade fällt mit auch ein dass ich anstelle von MDs für diese Werte an sich auch MWs nehmen könnte da beide Werte ganze Zahlen zwischen 0...20.000 darstellen sollen, oder?

    So das waren wieder mal viele nette Anfängerfragen um euch den Morgen zu versüssen

  4. #4
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    1. wenn du einen CALL bedingen willst, mußt du ihn umspringen.
    2. der IN ist als WORD zu deklarieren
    3. die beiden OUT als INT oder DINT oder REAL (ich bin mir immer noch nicht so ganz im klaren, welche werte du an deinem kraftmessbock als gleitkomma und welche als ganzzahl verarbeitet werden sollen

    4. die ausbildungsunterlage liegt dir vor?

    [edit]
    5. wenn du einen FB mit CALL aufrufst ist eine IDB zu übergeben (ausnahmen bilden hier multiinstanzen)
    [/edit]
    Last edited by vierlagig; 11.12.2008 at 09:00.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    Join Date
    12.11.2008
    Posts
    65
    Danke
    43
    Erhielt 0 Danke für 0 Beiträge

    Default

    Ich nehme mir mal die Freiheit Deinen Text auseinander zu pflücken und Punkt für Punkt zu antworten

    1. Verstehe, dann müsste es in etwa so aussehen:
    Code:
    UN E 0.0
    U(
    L MW100
    L 3
    ==I)
    SPBN ENDE
    CALL FB3
      IN     := PEW 6 
      OUT1 := MD0
      OUT2 := MD4
    SPA ENDE
     
    ENDE: NOP 0
    2. Danke

    3. Also rein (IN) kommt wie gesagt ein analoger Wert in Form einer Spannung zwischen 0 und 10V, welche am Ende (OUT) als eine ganze Zahl zwischen 0 und 20000 dargestellt werden soll.

    In einem anderen Thread wurde mir ans Herz gelegt den IN, der ja auch der IN für den FC105 ist, zwischen LO_LIM:=0.000000e+000 und HI_LIM:=2.000000e+004 zu begrenzen, so dass ich davon ausgehe dass ich ihn als Realwert eingeben sollte? Oder dienen diese Werte nur dazu der CPU mitzuteilen dass 0V=0.000000e+000 entsprechen und 10V=2.000000e+004, und die Deklaration des Eingangs kann eine andere sein?

    Was die OUTs betrifft, sollten diese nur als ganze Zahlen zwischen 0 und 20000 dargestellt werden auf dem TP, da die Anwendung recht grob ist und ein Komma die Arbeiter nur unnötig verwirren würde. Eine Toleranz von +/- 200 ist dabei kein Problem.

    Wenn ich das ganze Konzept mit dem Dualzahlensystem richtig verstanden habe, brauche ich mindestens 14 Bit um bis 20000 zu kommen. Das sind also dann mindestens 4 Byte, mit anderen Worten, es muss dann ein MD sein um die OUT-Werte abzuspeichern, oder?

    4. Ja, hab ich

  6. #6
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    zu 1.
    edit-punkt 5 nicht übersehen
    zu 3.
    der FC105 gibt dir einen REALwert aus, diesen müßtest du ggf. mit RND in eine ganzzahl wandeln um sie dann als INT augeben zu können
    der wertebereich von INT umfasst -32768 .. +32767
    dafür sind 16bit notwendig. 1 byte hat 8bit, also sind 16bit zwei byte, zusammengefasst ein WORD
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #7
    Join Date
    12.11.2008
    Posts
    65
    Danke
    43
    Erhielt 0 Danke für 0 Beiträge

    Default

    So langsam gehts glaub ich

    Code:
    UN E 0.0
    U(
    L MW100
    L 3
    ==I)
    SPBN ENDE
    CALL FB3
      IN     := PEW 6 
      OUT1 := MD4
      OUT2 := MD8
    L DB3.MD4
    RND+
    T MD12
    L DB3.MD8
    RND+
    T MD16
    SPA ENDE
     
    ENDE: NOP 0
    So, ich bin mir jetzt nur noch nicht ganz sicher was die Adressierung des DB3 betrifft. Und ist die Bezeichnung MD4 resp MD8 global oder bezieht sie sich nur auf den FB, resp DB. So dass man die Bezeichnungen MD4 resp MD8 noch im Rest des Programms verwenden kann. Z.B. so:

    Code:
    UN E 0.0
    U(
    L MW100
    L 3
    ==I)
    SPBN ENDE
    CALL FB3
      IN     := PEW 6 
      OUT1 := MD4
      OUT2 := MD8
    L DB3.MD4
    RND+
    T MD4
    L DB3.MD8
    RND+
    T MD8
    SPA ENDE
     
    UN E 0.0
    U(
    L MW100
    L 4
    ==I)
    SPBN ENDE
    CALL FB3
      IN     := PEW 6 
      OUT1 := MD4
      OUT2 := MD8
    L DB3.MD4
    RND+
    T MD12
    L DB3.MD8
    RND+
    T MD16
    SPA ENDE
     
     
    ENDE: NOP 0
    Oder muss man noch etwas extra berücksichtigen wenn man einen FB ein zweites Mal adressiert?

  8. #8
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    Quote Originally Posted by DerPraktikant View Post
    So langsam gehts glaub ich
    "ich glaube nicht, tim!"

    wo fangen wir jetzt an ... ich kopier einfach mal deinen code und versuch ihn in ordnung zu bringen

    Code:
    *
    UN E 0.0
    U(
    L MW100
    L 3
    ==I)
    SPBN ENDE
    CALL FB3, DB3    //instanz-DB zum FB3 angeben
      IN     := PEW 6 
      OUT1 := MD4
      OUT2 := MD8
    // FLASCH: L DB3.MD4
    L MD4
    RND+
    T MD12
    // FALSCH: L DB3.MD8
    L MD8
    RND+
    T MD16
    SPA ENDE
     
    ENDE: NOP 0
    1. ein element eines globalen-datenbausteins wird wie folgt adressiert

    Code:
    *
          U     DB1.DBX    0.0              //bit
          L     DB1.DBB    0                //byte
          L     DB1.DBW    0                //word
          L     DB1.DBD    0                //dword
    2. elemente eines instanz-datenbausteins (und ich möchte anmahnen solche zugriffe wenn nur irgend möglich zu vermeiden werden wie folgt adressiert:

    Code:
    *
          AUF   DI     1                    //IDB öffnen, da ein qualifizierter zugriff auf IDBs nicht möglich ist
          U     DIX    0.0                  //bit
          L     DIB    0                    //byte
          L     DIW    0                    //word
          L     DID    0                    //dword
    3. ich weiß nicht so recht, was du vorhattest, aber wenn du ohne globalen DB auskommst, kannst du sehr wohl mit dem merkerbereich (wie in meiner korrektur) arbeiten. wenn du einen globalen DB nutzen möchtest, so solltest du die entsprechenden elemente da auch ablegen:

    Code:
    *
    CALL FB3, DB3
      IN     := PEW 6 
      OUT1 := DBxy.DBDu
      OUT2 := DBxy.DBDv
    diese kannst du dann im folgenden so verwenden.

    man sollte halt nur wissen, was man will! alles klar? alles klar!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. #9
    Join Date
    18.01.2008
    Posts
    40
    Danke
    7
    Erhielt 6 Danke für 6 Beiträge

    Default

    Du hast immer noch keine IDB übergeben! Außderem brauchst du das PEW 6 nicht mehr, wenn du es einmal mit dem FC 105 aus der aus Bauteinbibliothek bearbeitet hast.

    CALL FC 105
    IN :=PEW6
    HI_LIM :=2.000000e+004
    LO_LIM :=0.000000e+000
    BIPOLAR:=FALSE
    RET_VAL:=MW1
    OUT :=MD12

    Jetzt hast du im MD 12 deinen normierten Wert, der zwischen 0.0 und 20000.0 liegt.

    Als nächstes deine FB Aufrufe:

    UN E 0.0
    U(
    L MW100
    L 3
    ==I)
    SPBN ENDE
    CALL FB3 ,DB 3
    IN := MD 12 ->Hier kannst du also mit dem MD 12 weiter arbeiten!
    OUT1 := Mw4
    OUT2 := Mw8

    ENDE: nop 0

    Die Wandlung deiner Outs in eine Ganzzahl würde ich direkt im FB machen, und nicht erst ausserhalb.

    Mist, da war ich zu langsam!
    Last edited by schoeneberg; 11.12.2008 at 10:19. Reason: Zu langsam

  10. #10
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by schoeneberg View Post
    Mist, da war ich zu langsam!
    nich schlimm, deine hinweise haben ja erweiternden und struktur bezogenen charakter. ich finde sie wichtig und richtig. auch wenn es mir zu müßig ist, dass programm in seiner struktur anzuzweifeln - was, wenn ich alle code-schnipsel die DerPraktikant in den letzten tagen so brachte zusammennehme, aber auf jeden fall notwendig wäre. aber auf meine frage hier, nach der struktur, bekam ich keine antwort und ich renne keinem hinter her
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Similar Threads

  1. Replies: 1
    Last Post: 17.06.2019, 10:15
  2. TIA Frage bezüglich HMI System-Diagnoseanzeige
    By RamserElektrotechnik in forum Simatic
    Replies: 5
    Last Post: 16.05.2018, 13:12
  3. Posmo A: 2 Fragen bezüglich MDI
    By volu in forum Antriebstechnik
    Replies: 4
    Last Post: 08.08.2011, 17:00
  4. S5 OB1 Frage?
    By Bitte_ein_Bit in forum Programmierstrategien
    Replies: 2
    Last Post: 31.08.2007, 08:10
  5. Allgemeine fragen bezüglich S7
    By Kraft in forum Simatic
    Replies: 24
    Last Post: 15.07.2007, 17:02

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •