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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25

Thema: S7: Keine Benutzer definierte Datentypen bei InOut-Variablen möglich?

  1. #1
    Registriert seit
    11.09.2014
    Beiträge
    101
    Danke
    13
    Erhielt 1 Danke für 1 Beitrag

    Ausrufezeichen


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen

    Kann mir einer erklären wieso ich keine Benutzer definierte Datentypen (UDT) bei FB-I/O Variablen verwenden kann?

    Ich kann eine IO-Variable im FB als UDT deklarieren und einsehen (aufklappen), und sie wird nicht rot hinterlegt, auch beim Kompilieren reklamiert er nicht (0 Fehler, 0 Warnungen).
    Wenn ich nun aber im Instanz-DB (hat kompiliert auch 0 Fehler, 0 Warnungen) die Variable aufklappen will, funktioniert das nicht (kein Dropdown-Pfeil).
    Wenn ich nun die Variable in einem externen Bereich abfragen oder beschreiben will, sagt der Kompiler "Der Zugriff ist ungültig" (Hilfe-Text: "Sie haben versucht, einen Bausteinparameter außerhalb des Bausteinaufrufs zu schreiben.
    Der Zugriff auf diesen Bausteinparameter ist nur am Bausteinaufruf möglich. Zugriffe auf Multiinstanzen oder Instanz-DBs sind nicht möglich.")

    Wenn es kein Fehler ist, was ist der Grund für das nicht erlauben von UDT's in FB-IO's?

    Meine SW-Version: V13.1.6

    Vielen Dank schon im Vorraus!
    Geändert von Automatinator (26.02.2016 um 13:04 Uhr)
    Du hast schlecht angefangen doch gegen Ende stark nachgelassen,
    aber auch ein blindes Huhn kann die Zeit nicht zurück drehen,
    denn Schweizerische Wissenschaftler haben herausgefunden
    nachdem man ihnen den Ausgang zeigte.
    Zitieren Zitieren S7: Keine Benutzer definierte Datentypen bei InOut-Variablen möglich?  

  2. #2
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.339
    Danke
    387
    Erhielt 219 Danke für 173 Beiträge

    Standard

    Du musst, oder kannst nur der externe Variable die du auf der INOUT anbindest verschalten.
    Geht auch mit UDT.

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  3. #3
    Automatinator ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.09.2014
    Beiträge
    101
    Danke
    13
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von de vliegende hollander Beitrag anzeigen
    Du musst, oder kannst nur der externe Variable die du auf der INOUT anbindest verschalten.
    Geht auch mit UDT.
    Tut mir leid, aber ich versteh den Satz nicht ganz. Welche externe Variable meinst du? und als was deklariere ich die INOUT Variable in FB-Dekleration?

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Du deklarierst eine INOUT mit der UDT, "außen" an den FC/FB legt du eine DB-Variable, die ebenfalls mit dieser UDT deklariert ist.
    Zugriffe erfolgen nur von "außen" über diese DB-Variablen und somit über die Schnittstellen des FC/FB.
    Zugriffe auf den IDB sind unsauber und sorgen in Step7 V5.5 oft für Probleme und Verwirrung bei Programmierern.
    Ich hab es noch gar nicht probiert, weil ich das gundsätzlich nicht mache, aber wenn das in TIA wirklich nicht mehr geht (von außen in IDB greifen), finde ich mal etwas wirklich gut an TIA
    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

  5. #5
    Automatinator ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.09.2014
    Beiträge
    101
    Danke
    13
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Zugriffe auf den IDB sind unsauber und sorgen in Step7 V5.5 oft für Probleme und Verwirrung bei Programmierern.
    Wie meinst du das? Zugriffe auf den IDB sind unsauber? Inwiefern? Ich schreibe ja nicht auf die lokalen FB-Variablen sonder möchte eine Schnittstellenvariablen manipulieren... für das sind die doch da...
    Wenn ich die IO-Var nicht als UDT deklariere (also sonst ein Norm-Datentyp), dann reklamiert er nicht mehr. Was hat der Datentyp mir sauber/unsauber zu tun? o_O

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich habe dich so verstanden, dass du ein INOUT am FB deklarierst, und dann aber keine Variable anlegen willst, sonden direkt auf den IDB schreiben und lesen willst.
    Das halte ich für unsauber. Ich hab einfach schon zu viel Mist gesehen, der damit angestellt wurde. Ob das gehen würde hab ich halt noch nicht in TIA ausprobioert, ich halte das für ein NoGo, mach es also nicht.
    Du kannst natürlich machen was du willst, aber Programme, in denen wild in IDB rumgepokt wird sind schlecht wartbar und vom Manipulieren der INOUT bis zum Manipulieren anderer IDB-Variablen ist es nur einen Mausklick weit.

    Vielleicht habe ich dich ja falsch verstanden, dann erklär doch bitte noch einmal dein Problem.
    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

  7. Folgende 2 Benutzer sagen Danke zu Ralle für den nützlichen Beitrag:

    ducati (25.02.2016),Slaine (26.02.2016)

  8. #7
    Automatinator ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.09.2014
    Beiträge
    101
    Danke
    13
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Ich habe dich so verstanden, dass du ein INOUT am FB deklarierst, und dann aber keine Variable anlegen willst, sonden direkt auf den IDB schreiben und lesen willst.
    Das halte ich für unsauber. Ich hab einfach schon zu viel Mist gesehen, der damit angestellt wurde. Ob das gehen würde hab ich halt noch nicht in TIA ausprobioert, ich halte das für ein NoGo, mach es also nicht.
    Du kannst natürlich machen was du willst, aber Programme, in denen wild in IDB rumgepokt wird sind schlecht wartbar und vom Manipulieren der INOUT bis zum Manipulieren anderer IDB-Variablen ist es nur einen Mausklick weit.

    Vielleicht habe ich dich ja falsch verstanden, dann erklär doch bitte noch einmal dein Problem.
    Ich habe ja bei einer FB-Dekleration folgende Variablentypen: Input, InOutput, Output, Statische, Temporäre und Konstanten.
    Jetzt deklariere ich dort (z.B. FB1) eine InOut-Variable: Name: "InOut" vom Typ "udtInOut", wobei "udtInOut" die Variablen "bVar1" und "bVar2" deklariert sind.
    Dann habe ich einen IDB (DB1) vom Typ FB1.
    Und jetzt reklamiert er, wenn ich ausserhalb schreibe (SCL): DB1.InOut.bVar1 := TRUE; oder IF DB1.InOut.bVar1 THEN ...
    Aber eben halt nur bei UDT-IO-Vars...
    Vorallem die Abfrage sollte doch zulässig sein oder nicht?
    Und ich frag mich hier auch wieso er Norm-Datentypen-IDB-Var-Manipulation zulässt :O
    Geändert von Automatinator (25.02.2016 um 10:58 Uhr)

  9. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich bin nicht ganz sicher, aber ich glaube, zusammengesetzte Datentypen, also auch UDT an INOUT werden per Referenz übergeben und sind somit gar nicht im IDB repräsentiert, sprich vorhanden.
    Auch sonst sag ich noch einmal, übergib die Daten nicht direkt an den IDB, sondern häng außen an den FB eine Datenstruktur und manipuiere die (Findet man wenigstens ein wenig besser im Querverweis). Ich habs noch nie probiert, geht ein Aufruf alá FB1. ...
    Schau noch mal nach, ob InOut vielleicht ein geschütztes Keyword in TIA ist.

    PS: Ehrlich, ein SCL-Programm in dem du so auf den IDB zugreifst, würde ich dir niemals abnehmen.
    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. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    BlackKnight2000 (27.02.2016)

  11. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    So wie Ralle schon schreibt, das hat damit zu tun, daß der UDT bei INOUT als Referenz übergeben wird - ein Zugriff "DB1.InOut.bVar1" kann nicht funktionieren. In C müßtest Du schreiben "DB1.InOut->bVar1" oder "DB1.(*InOut).bVar1" - so eine Dereferenzierung gibt es aber nicht in SCL. Der SCL-Compiler macht das aber automatisch/versteckt.

    Der FB selber kann problemlos auf seine INOUT-UDTs zugreifen: #InOut.bVar1
    Von außerhalb des FB kann man nur den zu übergebenden UDT selber manipulieren (z.B. DB2.UDT1.bVar1), aber nicht den INOUT-Bausteinparameter.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  12. #10
    Automatinator ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.09.2014
    Beiträge
    101
    Danke
    13
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Ralle Beitrag anzeigen
    PS: Ehrlich, ein SCL-Programm in dem du so auf den IDB zugreifst, würde ich dir niemals abnehmen.
    Wieso nicht? nur wegen der Einschränkung bei der Querverweis-Darstellung? s.n.b. welche Querverweis-Einschränkung hat man den mit IDB-Interface-Variablen?
    Geändert von Automatinator (26.02.2016 um 13:03 Uhr)
    Du hast schlecht angefangen doch gegen Ende stark nachgelassen,
    aber auch ein blindes Huhn kann die Zeit nicht zurück drehen,
    denn Schweizerische Wissenschaftler haben herausgefunden
    nachdem man ihnen den Ausgang zeigte.

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 22.04.2015, 09:40
  2. TIA TIA absturz bei syb von Datentypen
    Von emilio20 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.12.2014, 17:30
  3. Codesy Speicherbelegung bei INOUT
    Von SY50 im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 10.03.2013, 15:59
  4. Datentypen bei Profibusslaves
    Von Howie im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 12.01.2010, 17:09
  5. Keine Bitmeldung möglich
    Von Bensen83 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 16.09.2009, 09:31

Stichworte

Lesezeichen

Berechtigungen

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