Parametrischer Zugriff auf S120 ohne SINA_FB ?

Draco Malfoy

Level-1
Beiträge
1.168
Reaktionspunkte
82
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen.

Weiß einer, ob man parametrischen Zugriff auch ohne den SINA_FB realisieren kann ?

Hintergrund der Anfrage ist der, daß wir hier in der Firma ein Paar Standardbausteine erstellen wollen, und die Achsdaten bzw. alle übrigen Daten sollten am Liebsten in der Schnittstelle des FB liegen.
Jetzt kann ich den FB283 zwar multiinstanzmäßig einbinden, aber er will dann wieder die Nummer vom Achs-DB, und von dem wollte ich mich ja gerade lösen.

Im Allgemeinen empfiehlt die Fa. Siemens ja selber multiinstanzierte Zugriffe und Verschachtelung von Bausteinen, befolgt aber an dieser Stelle selber ihr eigenes Konzept nicht.
Hatte schon mal jemand so ein Problem gehabt ? Habe ich möglicherweise noch irgendwelche andere Bausteine verpasst die, es dazu gibt ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

für die S7 kannst du WR_REC und RD_REC verwenden , diese werden auch vom Sina_FB verwendet.

Gruß
Christoph

Mir ist schon klar, mit welchen System-Befehlen eine azyklische Kommunikation in einem DPV1 Busnetz stattfindet ;-)
Bloß von den WR_REC / RD_REC SFBs bis zu einem FB283, welcher 8125 Byte groß ist und ungefähr 5 laufende Meter AWL Code enthält, ist noch ein weiter weg.

Und JA, ich weiß wie man zue Bausteine öffnet, und NEIN, ich möchte jetzt nicht den FB283 umschreiben, weil diesen AWL Salat werde ich geschätzte 3,5 Monate auseinandernehmen müssen.
 
@ Christoph: was soll das ??

Ich habe nur freundlich gefragt, ob jemand von den Kollegen ähnliche Schwierigkeiten wie ich mal hatte, und vielleicht gibt es inzwischen noch andere Bausteine von Siemens die ich übersehen habe oder noch etwas, was ich nicht weiß.
Dazu schreibst Du dann etwas, was keinen inhaltlichen Bezug zu meiner Frage aufweist, und entsprechend habe ich auchh reagiert.

Daraufhin wirfst mir mir jetzt also Arroganz vor ?? Haste irgendwas geschnüffelt heute morgen ??
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Draco, ich finde Christoph hat Recht und empfinde deinen Post #3 genauso. Der Ton macht die Musik!

Wenn Du die Siemens-Bausteine nicht magst, dann lies die Hilfe zum WR_REC / RD_REC und das SINAMICS Funktionshandbuch Feldbussysteme und mach es doch einfach selber!

Die Siemens Baustein sind in der Regel so aufgebaut, dass sie die meisten denkbaren Situationen abdecken.
Wenn Du Bausteine für eine bestimmte Aufgabe/Situation macht, kannst Du vieles weglassen und deine Bausteine sind dann natürlich kleiner.

Und der FB283 wurde vermutlich in SCL geschrieben. Was Du siehst ist nur der vom SCL Compiler erzeugte AWL Code und der ist praktisch unlesbar.

So und jetzt darfst Du auch über mich meckern. :D
 
Der Zugriff geht über Datensatz 47. Das Ganze ist im Funktionshandbuch 1 unter Kommunikation / azyklische Kommunikation erklärt. Ohne Handshake ist das in ein paar Netzwerken erledigt.
 
Wenn Du die Siemens-Bausteine nicht magst, dann lies die Hilfe zum WR_REC / RD_REC und das SINAMICS Funktionshandbuch Feldbussysteme und mach es doch einfach selber!
WO steht es daß ich die nicht mag ? Vielleicht kenne ich die ja noch lange nicht alle, odes es gibt noch irgendwelche alternative Lösungen ? Hat doch nichts zu tun mit meiner Fragestellung, ob ich die mag oder nicht ?
Die Siemens Baustein sind in der Regel so aufgebaut, dass sie die meisten denkbaren Situationen abdecken.
Tun sie offensichtlich nicht. Mehr noch die wiedersprechen der eigenen Programmierdoktrin von Siemens.
Und der FB283 wurde vermutlich in SCL geschrieben. Was Du siehst ist nur der vom SCL Compiler erzeugte AWL Code und der ist praktisch unlesbar.
Offensichtlich hast Du den Baustein noch nicht besonders genau angeguckt.
und der ist praktisch unlesbar.
Der ist praktisch lesbar. Es gibt sogar Leute, die daraus wieder SCL machen. Hat aber nichts mit dem FB283 zu tun.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Draco,
schau mal in folgenden Applikationsbeispiel an, da ist zumindest ein FB, der der Standardfunktionbausteine nutzt (die Applikation habe ich jetzt selbst aber noch nicht ausprobiert):
https://support.industry.siemens.com/cs/ww/de/view/68624711

Für den G120 gibt es hierzu auch einige Beispielapplikationen (auch im Funktionshandbuch steht was).

Grüße
Zako

PS.: Ich selbst nehme gerne auch mal DCC um Parameter zu schreiben oder nutzte den HMI Direktzugriff (vom HMI direkt auf Antriebsparameter schreiben / lesen).
 
Sachen gibts :shock:
Eigentlich habe ich genau so was gesucht...

Vielen Dank für deinen Hinweis !!

Edit: doch nicht. Weil er will wieder irgendwelche Global-DBs haben, und ich wollte ja daß er mir Daten in die Schnittstelle schreibt.
Wieso machen die das immer mit den Global-DBs, hat das irgendeinen bestimmten Grund ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube, der Knackpunkt bei der ganzen Geschichte ist die Versorgung von SFBs mit dem Zeiger auf einen Ablage-DB.

Mir ist derzeit nicht klar, wie ich einen ANY-Zeiger auf die lokale Instanz aufbauen soll. Und was passiert bei multiinstanzierten Zugriffen, wenn beispielsweise mehrere Achsen-Instanzen in einem gemeinsamen FB aufgerufen werden und dieser FB auch keine eigene Instanz hat sondern noch in einem FB-xy aufgerufen wird. Wie tief dürfen solche Verschachtelungsebenen überhaupt werden ?

Taugt der Code hier irgendetwas ?

Code:
//generate the any pointer to "Drive_Parameter_p3101"

      LAR1  P##ANY_Pointer              // Startadress of ANY Pointer
      L     B#16#10                          // SyntaxID
      T     LB [AR1,P#0.0]
      L     B#16#2                           // Type = Byte
      T     LB [AR1,P#1.0]
      L     28                                  // Length
      T     LW [AR1,P#2.0]
      [COLOR=#ff0000][FONT=arial black]L     DINO  [/FONT][/COLOR]                            // IDB Number
      T     LW [AR1,P#4.0]
      L     P#DBX 0.0                      // Unit Pointer
      L     64                                 // Number of first DataByte of "Drive_Parameter_p3101" 
      SLD   3                                 // Converting in Pointer Format 
      +D    
      T     LD [AR1,P#6.0]

      CALL  #SFB_53
       REQ   :=TRUE
       ID    :=#in_Addr_CU_dword
       INDEX :=47
       LEN   :=28
       DONE  :=
       BUSY  :=
       ERROR :=
       STATUS:=
       RECORD:=#ANY_Pointer
 
Mit "L DINO" lädst Du die Nummer des Instanz-DBs, das kann nur der sein, der auch im SIMATIC Manager aufgelistet wird.

Ich denke Du müsstest eher "L P#DIX 0.0" verwenden, weil Du ja den Instanz-DB und nicht einen normalen DB als Speicherbereich verwenden willst.
Mit "L 64" legst Du dich aber absolut fest. Das müsste ja für jede Instanz anders sein. :confused:


Ich habe das mit der variablen Anfangsadresse mal so gemacht (war für IO-Link):
Code:
      TAR2  #temp_AR2                   // save AR2 (pointer to instance DB)

      LAR2  P##IOL_Data                 // load pointer to IOL_Data [0] into AR2
      LAR1  P##temp_ANY_Pointer_1       // Load start adress of ANY-pointer into AR1
      L     B#16#10                     // SyntaxID
      T     LB [AR1,P#0.0]
      L     B#16#2                      // Type = Byte
      T     LB [AR1,P#1.0]
      L     #DS_length                  // Length = length of data set 
      T     LW [AR1,P#2.0]
      L     DINO                        // IDB number
      T     LW [AR1,P#4.0]
      TAR2                              // load pointer to IOL_Data from AR2
      T     LD [AR1,P#6.0]              // store in ANY-pointer 

      LAR2  #temp_AR2                   // restore AR2 (pointer to instance DB)

dabei ist #IOL-Data ein Array aus Byte und größer als die Anzahl der zu bearbeitenden Daten, die in #DS_Length steht, beides sind statische Variablen.
temp_Any_Pointer_1 ist vom Type ANY und temp_AR2 vom Type DWORD, beides sind temporäre Variablen.

Damit ist es egal, wo im Instanz-DB die Daten stehen, sie werden immer gefunden, auch wenn man weitere Variablen definiert. Ob das aber auch Multiinstanz-fest ist, habe ich aber nicht getestet!
 
Hallo miami,

vielen Dank für deine Rückmeldung. Ich muss sagen, daß mich diese Zeigerei in AWL an die Grenzen meines Sachverstandes in dem Thema bringt. Ich programmiere sowieso grundsätzlich ungerne in AWL sondern viel lieber in SCL (wenns denn sein muss) und hier kommt gleich so ein Brocken. Ich frage mich, warum in aller Welt das alles so kompliziert sein muss ? Warum kann ich nicht einfach die Struktur auf den RECORD Bereich durchverdrahten und gut ist. Bei SFC20 "BLKMOVE" und anderen SFCs funktioniert es doch auch.

Letztenendes sehe ich das so daß diese Aufgabe überhaupt nicht trivial ist und überdies selbst Siemens sich da schwer tut dafür fertige Lösungen anzubieten. Aber wie soll das bitte gehen, wenn ich in einer Anlage an die 27-30 Achsen habe und die jetzt also jede auch noch einen eigenen Global-DB alleine für azyklischen Zugriff bekommen soll ?? Das ist doch völliger Humbug. Ich weiß gerade irgendwie nicht weiter...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Letztenendes sehe ich das so daß diese Aufgabe überhaupt nicht trivial ist und überdies selbst Siemens sich da schwer tut dafür fertige Lösungen anzubieten. Aber wie soll das bitte gehen, wenn ich in einer Anlage an die 27-30 Achsen habe und die jetzt also jede auch noch einen eigenen Global-DB alleine für azyklischen Zugriff bekommen soll ?? Das ist doch völliger Humbug. Ich weiß gerade irgendwie nicht weiter...

Hast Du das schon mal mit Multinstanzen probiert (ich denke, dass das geht,dann hast Du doch nur noch einen DB).
In TIA- Portal fällt auf, dass man den SINA_FB "aufgepröselt" hat. D.h. man hat z.B. einen einfachen Baustein zur azyklischen Kommunikation (FB287), oder wenn man ganze Verfahrsätze etc. kopieren will, (der FB286). Zyklisch kann man dann mit DPWR_DAT / DPRD_DAT machen - für alle Standardtelegramm gibt es schon vorgefertigte UDT´s. Oder beim Einsatz von reinen Drehzahlachsen oder Positionierachsen gibt es dann komplette Ansteuerbausteine (d.h. Ablaufsteuerung ist im Antrieb gemacht und man muss weniger Gedanken über Einschalten, Betriebsartenwechsel etc.). Nichtdestotrotz würde ich heute beim Einsatz einer S7-1500 mal mit den Technologieobjekten ausprobieren und die Ansteuerung über die PLC Open Bausteine machen (zumindest hat das mir ganz gut gefallen, obwohl ich ein langjähriger "EPos-" Anwender bin).
 
ANY auf eine Variable in der lokalen Instanz

Man kann ANY auf Variablen in der lokalen FB-Instanz erstellen. Man muß dabei den Multiinstanz Offset aus AR2 addieren. (siehe mal die Forumshilfe nach: "multiinstanz offset AR2")
Für den ANY ist egal, ob als Bereichskennung DI oder DB angegeben wird - für den SFC ist das sowieso ein Global DB.
Code:
//generate the any pointer to "Drive_Parameter_p3101"

      LAR1  P##ANY_Pointer
      L     B#16#10                    // SyntaxID
      T     B [AR1,P#0.0]
      L     B#16#2                     // Type = Byte
      T     B [AR1,P#1.0]
      L     28                         // Length
      T     W [AR1,P#2.0]
      L     DINO                       // IDB Number
      T     W [AR1,P#4.0]
      L     P##Drive_Parameter_p3101
      UD    DW#16#FFFFFF               //Bereichskennung (DI) ausblenden
      TAR2                             //Multiinstanz-Offset aus AR2 (mit Bereichskennung DB)
      +D                               //dazu
      T     D [AR1,P#6.0]

Harald
 
Zuletzt bearbeitet:
... folgendes Beispiel habe ich mal ausgegraben - geht für Schreiben von p2507

Variablentabelle:
attachment.php


FC1:

attachment.php

DB1:
attachment.php


DB2:
attachment.php
 

Anhänge

  • FC1.jpg
    FC1.jpg
    79 KB · Aufrufe: 55
  • DB1.jpg
    DB1.jpg
    136 KB · Aufrufe: 54
  • DB2.jpg
    DB2.jpg
    132 KB · Aufrufe: 53
  • VAT.jpg
    VAT.jpg
    262,3 KB · Aufrufe: 56
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die Rückmeldungen und Beispiele, insbesondere zu dem Zeiger.
Blöde Frage: in dem Request Header der Wert Achse - kommt da die Antriebsobjekt-Nummer aus der Sinamics Konfiguration rein ?
 
Rückmeldungen

Also, nach 2 Tagen im Versuchsraum live vorm Antrieb kann ich folgende Feststellungen machen:


  • 1. Mein Baustein funktioniert :)
  • 2. Sämtliche Zeigeraufbauten und Beispiele, die hier oben aufgeführt wurden, funktionieren leider nicht. Ich weiß nicht woran das liegt, aber im Falle einer Multiinstanz, kommt da immer nur Mist raus.
  • 3. Die am Meisten durchschlagende Entdeckung für mich war, dass man diese Zeiger so auch gar nicht braucht. Man mag es kaum glauben, aber man kann sich einfach eine vernünftige Struktur im Static Bereich aufbauen, diese auf den RECORD Eingang vom SFB durchverdrahten und – oh Wunder ! – es funktioniert.

Ich versteh es im Übrigen nicht ganz, warum man das nicht einem sofort sagen kann. Oder habe ich irgendwie den Dreh in dieser Diskussion nicht mitbekommen. Ich programmiere mir hier halt nen Ast ab, begebe mich in die Tiefen von ANY-Pointer und anderweitiger Low-Level Schwarzmagie, und siehe da – für die Katz ;-) Stattdessen einfach Struktur anlegen, dranschreiben - läuft! Keine mistigen AWL-Pointer mehr, keine Kopfschmerzen, keine Komplikationen mit Multiinstanzen. Überdies kann ich soviel Achsen draufbauen, wie ich lustig bin, es bleibt im Wunschfalle nur ein einziger FB übrig. Und den FB283 braucht man jetzt auch nit mehr...

Alles in einem: gut ist, was gut ausgeht.
 
Zuletzt bearbeitet:
Zurück
Oben