Strukturprobleme Multiinstanz ...

Das Programm baue ich ja neu auf - Logik bleibt (da ja getestet); Struktur wird neu...

Den geposteten Code musst du mal genauer erklären.

Ich gehe davon aus daß er sich im FB befindet.

Wo ist Testarray bzw. TestUDT definiert ?

Ich mache das gerade so dass im FB eine DWORD Variable existiert die ich mit 0 überschreibe (bei Bedarf). Die Verbindung zwischen der DWORD Var und den tatsächlich betroffen 32 Bits (die ich mit der Aktion clearen möchte) stellt der Aufruf im OB her --> Siehe Beitrag mit Auszug vom Aufruf...

Die DWORD Variable ist dann zwar zusätzlich (und unnötig) im Instanzdatenbaustein vorhanden (verbraucht Speicherplatz) ist aber dafür ohne was umbiegen zu müssen für jede Instanz des FB verwendbar (da der Bezug ja beim Aufruf hergestellt wird).

Wenn du [@Onkel D bzw. alle anderen natürlich auch] mir jetzt erklären kannst wie ich in meinem Global DB ein Array bzw. einen UDT definieren kann den ich von aussen als 32-bit Variable ansprechen kann und gleichzeitig die selbe Startadresse hat wie die 32 Bits die ich damit bei Bedarf löschen will dann habe ich ganau das gefunden was ich suche.
 
Das mit den UDT ist schon gut, aber dann kann er trotzdem nicht Bits und Word eines Adressbereiches symbolisch nutzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ug

Klar kann er das, aber ich hatte das so verstanden, daß er auf einzelne Bits zugreifen will und dann alle Bits mit einem Mal löschen, indem er das Word mit 0 beschreibt. Da hilft ihm auch die schick anparametrierte UDT nicht weiter.
 
Ok, ich hab grad gesehen dass ich dann auch den Komfort verlieren würde mir den GlobalDB aus Excel heraus erstellen zu können da hier keine UDTs möglich sind...

Des weiteren würde es die Sache (nach dem ich den Siemens Beitrag gelesen habe) noch mehr verkomplizieren -> dann lieber im OB die direkte Adresse hinschreiben (kommt pro Aufruf 8 mal vor - geht schon...)

Ich bin aber gerade auf ein ganz anderes Problem gestossen.

Ich habe im FB diverse Timer als IN-Parameter definiert wovon ein paar an Unterprogramme weitergegeben werden müssen.

Ich würde ja nicht so dumm fragen aber mit der "alten" Struktur ging das dass der Timer als z.B. T 37 im Haupt- sowie im Unterprogramm angegeben wurde.

Nun habe ich im ersten Unterprogramm ebenfalls einen IN-Parameter definiert an den dann der ehemalige T 37 weitergereicht werden soll --> geht nicht !

"Unzulässige Parameterversorgung" sagt mir Step7.

Und jetzt ? Direkt geht indirekt nicht :confused:

Auf SFB-Timer "umbauen" kommt jedenfalls nicht gleich in Frage
(schwierig zum Testen in dem Zustand - dann lieber das wo schon funktioniert hat)

Edit:
In der Hilfe zur Meldung steht:
-------------------------------------------------------------------------------------------------
Beschreibung:
Obwohl kein Typkonflikt zwischen Aktualparameter (rechte Seite) und Formalparameter (linke Seite) vorliegt, kann diese Parameterzuweisung nicht zugelassen werden. Folgende Gründe können vorliegen:

· Die Zuweisung ist aus technischen Gründen nicht möglich, z.B. kann keine STRING- oder DATE_AND_TIME-Konstante als Aktualparameter verwendet werden (zu viele Einzelbefehle).

· Das Maschinenmodell STEP 7 erlaubt die Zuweisung nicht, z.B. kann ein STRUCT/ARRAY/ANY/UDT/STRING - INPUT/OUTPUT/IN_OUT - Parameter eines FCs nicht an einen darin aufgerufenen Baustein weitergereicht werden.

· Ihr Formalparameter trägt ein S7_server Attribut und läßt daher die entsprechende Versorgung nicht zu, da z.B. der Aktual Parameter vom Server selbst vergeben werden muß oder lokal versorgt werden soll.

Behebung:

Bitte passen Sie Ihren Bausteinaufruf entsprechend diesen Regeln an.

--------------------------------------------------------------------------------------------
Anmerkung: Das "Durchreichen" hat aber mit allem anderen einschließlich #S5Time bis jetzt geklappt...
 
Zuletzt bearbeitet:
Man könnte das so machen:

Code:
      L     10  //die Timernummer kann man natürlich per INPUT übergeben
      T     MW     2

      U     E      0.0  //nur zum Testen
      L     S5T#20MS
      SE    T [MW 2]
Du könntest dann evtl. darauf verzichten Timer anzuparametrieren, sonder nur die Timernummer übergeben.
Leider nimmt er nur MW/DBW keine FC/FB-Parameter, vielleicht weiß jemand dafür auch noch etwas?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es funktioniert !

habe es sogar noch relativ elegant hinbekommen...

Ich versorge am Eingang des FB den Timer (da muss ich die Nummer sowieso hinschreiben) und zusätzlich die Nummer noch mal extra (eine Zeile weiter unten = übersichtlich).

Dann übergebe ich dem Unterprogramm nur die Nummervariable.

Im Unterprogramm (FC) selbst sieht das dann so aus daß die Eingangsvariable in den Temp-Bereich zwischengespeichert wird da ja, wie Ralle schon erkannt hat, keine direkte zuordnung möglich ist.

Code:
// Timer Nummern versorgen
      L     #tNr_GasvDichthPruef_In  // IN
      T     #tNr_Intervall                // Temp
      L     #tNr_GasvDichthPruef_Pr
      T     #tNr_Pruefung
...
 
      SE    T [#tNr_Pruefung]           // #tNr_GasvDichthPruef_Pr
...

sieht doch gut aus oder ?

Jetzt kann ich diese Vorgehnsweise für die restlichen Unterprogramme ebenfalls übernehmen und habe ein Problem weniger...

Danke euch !
 
Die Temp-Var kann man also ohne Probleme in die eckigen Klammen des Timers eintragen? Warum das wohl nicht mit in Input-Var geht, weiß wohl nur Siemens.
 
Zurück
Oben