Step 7 SCL Array in FB Ausgang Schreiben

unVASSbar

Level-2
Beiträge
22
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey Forum,
Ich habe folgendes Problem, und zwar habe ich einen FB Programmiert (in SCL) der eine Array of Char beschrieben soll. Das tut er auch ohne Probleme. Das einzige Problem ist das ich noch andere Bausteine habe die auf dieses Array zugreifen (und auch u.a schreibend aus der VISU). Da das Array aber durchgehend von meinem FB „beschrieben“ wird. Also auch wenn ich den Teil des Codes nicht aufrufe der eigentlich das Array beschreibt. Einfach weil der Ausgang ja speichernd ist, kann man eben nicht mehr aus der Visu darauf schrieben da mein Baustein den Wert quasi direkt wieder überschriebt.
Gibt es dafür eine Lösung ? Klar ich könnte den Baustein einfach nicht aufrufen oder in einem TempVariable schrieben und diese dann nur Moven wenn ich die Werte auch im Array stehen haben will. Aber das muss doch besser gehen oder ?
 
Irgendwie verstehe ich dein Anliegen nicht.

Du möchtest ein Array das permanent geschrieben wird noch aus dem HMI heraus beschreiben?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du legst Dein Array in einen extra Datenbaustein, nicht den IDB, und beschaltest ihn im FB nun als INOUT statt OUT. Dadurch würde ein anderer Baustein Daten ändern die nur dann überschrieben werden sollen wenn Dein FB das auch will und ein weiterer ebenso.

Aufpassen muss man hierbei dann aber das keine Daten geschrieben werden die an anderer Stelle Probleme bereiten.
 
Moin unVASSbar,


Stichwort: Zykluskontrollpunkt.
Allerdings kann man dazu erst eine brauchbare Antwort geben, wenn man weiß, ob es sich um S7-classic oder TIA handelt.

Also gib bitte einmal an, mit welcher Software (inkl. Version) und Steuerung Du arbeitest.


Ganz verstanden habe ich Dein Anliegen auch noch nicht. Natürlich ändern sich die Daten, wenn sie in der SPS beschrieben werden (egal ob per IN/OUT an einen Baustein übergeben oder in einem globalen DB abgelegt). Da hilft es nur, das Beschreiben zu unterbinden.
Denn entweder WIRD das Array vom FB beschrieben oder nicht. Der FB beschreibt das Array nicht einfach, weil das Array an der Schnittstelle parametriert ist (meine Glaskugel sagt mir, dass es tatsächlich als IN/OUT übergeben wird???).

Wo ist denn jetzt Dein Array deklariert?


VG
MFreiberger
 
Neben den Fragen und Antworten der Vorredner möglicher weiterer Ansatzpunkt, ohne Deine Anwendung zu kennen:
Variable im HMI aus Deiner Variable nur anzeigen. Wenn sie geändert wird, die Änderung in eine andere Variable schreiben. Dann kannst Du im Programm vergleichen, ob Du den String aus dem FB oder aus dem HMI weiter verwenden möchtest und dann entsprechend in Dein Variable schreiben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
oder als Ergänzung zu dem Vorschlag von @JSEngineering :
du setzt in der Visu mittels eines Buttons ein Bit, welches von dem FB abgefragt wird und ihn veranlasst, den Inhalt der Hilfsvariablen auf die FB-Variable zu schreiben ... hat der FB das gemacht dann löscht er dieses Bit wieder ...
 
Moin, ich nutze S7-classic. Ja ich bin ein idiot, einfach die Variable als In_Out deklarieren Problem gelöst 😅
Danke @MFreiberger an die Kristallkugel

(Mein Problem um es evtl. nochmal zu erklären war das ein anderer Baustein auf die Visu Daten zugreift die man in einem EA Feld eingeben kann, mein Baustein ist quasi nur dafür da diese Felder automatisch zu befüllen. Und da ich es als Ausgang deklariert habe konnte man aus der Visu nichts mehr schrieben da mein Baustein diese variable quasi dauerhaft beschrieben hat.)
 
Also ich bin jetzt immer noch nicht schlauer ...
Falls es noch anderen so geht wäre es hilfreich wenn du mal ganz von vorne anfängst und das Thema genau beschreibst - was macht der Baustein und was die Visu ?
Denk immer daran : wir sitzen nicht vor deinem Rechner und können nicht sehen was du siehst ... und deine Gedanken kennen wir schon gar nicht ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich bin jetzt immer noch nicht schlauer ...
Falls es noch anderen so geht wäre es hilfreich wenn du mal ganz von vorne anfängst und das Thema genau beschreibst - was macht der Baustein und was die Visu ?
Denk immer daran : wir sitzen nicht vor deinem Rechner und können nicht sehen was du siehst ... und deine Gedanken kennen wir schon gar nicht ...
Sorry war tatsächlich etwas unverständlich formuliert. Also:
Das ganze in der Anlage gibt es einen Lesestellebsustein (dieser ist Standartisiet an diesem kann ich also nichts ändern). Zu diesem Baustein gibt es auch ein Passendes Visu Bild. Welches eben anzeigt welche Daten gelesen wurden. Außerdem kann man eben (falls mal keine Daten gelesen wurden aus irgendwelchen Gründen) an der Visu auch die Daten von Hand eingeben und auf den Datenträger schrieben lassen. So, nun gab es eben öfters ein Problem das keine Daten gelesen wurden, diese also von Hand eingehen werden mussten. Anhand von anderen Parametern in der Anlage konnte man aber diese Daten erschließen.
Also dachte ich mir, ich programmiere einen Baustein, welcher auf den den Instaz-DB des Lese stellen Bausteins zugreift und dort in die Visu Daten meine Daten, also aus meinem Baustein einträgt. Mein Problem war allerdings, dass ich dieses Array aus dem Instanz dB des Lesestellenbaustens welches die VISU Daten beinhaltet an meinem Baustein als Output deklariert hatte. Somit hat mein Baustein durchgehend diese Daten geschrieben und man konnte in der VISU nichts mehr von Hand eingeben, sobald mein Baustein aufgerufen wurde.

Ich hoffe jetzt ist es halbwegs verständlich 😅 schwierig das zu erklären. Ich kann auch gerne meinen Stümperhaft geschrieben Code posten wenn das evtl. weiter hilft (bin kein Programmierer also seht mir das nach)
 
was ist denn eine Lesestelle und von wo werden den eigentlich die Daten gelesen ?

Ob der Code deines Bausteins hilfreich ist kann ich so nicht beurteilen - du könntest ihn aber auf alle Fälle mal posten ...
 
was ist denn eine Lesestelle und von wo werden den eigentlich die Daten gelesen ?

Ob der Code deines Bausteins hilfreich ist kann ich so nicht beurteilen - du könntest ihn aber auf alle Fälle mal posten ...
Die Daten werden im Format Array of Char von einem RFID Chip gelesen. Das tut aber eigentlich nichts zur Sache. Ich wollte nur das Visu Feld was eben auch als Array of Char beschalten wird beschreiben. (Also so als würde man es von Hand beschreiben in der VISU nur eben Automatisiert durch meinen Baustein). Das klappt jetzt tatsächlich auch nachdem ich die Variable in die der andere Baustein diese Daten eben speichert und die ich dann an meinen Baustein angebunden habe als In_Out definiert habe.

Ist nicht so einfach zu erklären das ganze ich Merks selber 😅
Aber das ganze klappt jetzt auf jeden Fall das ist schon mal gut
 
Zurück
Oben