B&R Globale Variable lässt sich nicht steuern - ST

AndiM99

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich fange gerade erst an mit B&R zu programmieren. So im ganzen haut das auch sehr gut hin nur ich habe ein Problem das ich nicht verstehe. Ich habe so gut wie alle Variablen in den Globalen drin, da ich diese von verschiedenen Programmen abfrage oder zuweise. Ist jetzt nichts besonderes , aber ich kann zum Teil Variablen dann nicht zuweisen. Das bedeutet das die Variable auf TRUE steht aber ich kann diese dann nicht auf FALSE setzen , auch wenn die Anweisung auf TRUE nicht gesetzt ist. Ich konnte auch wenn ich das nicht ganz verstehe einmal ändern mit dem das ich über eine lokale Variable dann die Globale Variable zuwies.

Als Beispiel :

IF Störung THEN G_Störung:=TRUE;END_IF;
IF G_Löschen THEN G_Störung:=FALSE;END_IF;

Natürlich nur ein Beispiel, aber die G_Störung ist dann die Globale Variable und die Störung eine lokale, G_Löschen ist auch global. Wenn dann Srörung=FALSE und G_Löschen=TRUE ist müsste G_Störung dann FALSE werden. Genau das passiert dann nicht. Ich hatte auch schon das eine globale Variable, die schon beim Start der Steuerung auf TRUE gesetzt wird, die wurde im gesamten Projekt nur mit FALSE beschrieben.

Ich benutze eine PP45 (ohne weitere Hardware) sowie AS 4.1.16. Alle Programme laufen im 8ms Task sowie zum Teil (keine wichtigen Programme) 20ms Task.

Muss man bei B&R etwas beachten ? Da ich nur mit Beckhoff / Siemens programmieren hatte ich das Problem noch nie.

Danke für jeden Tipp
Andi
 
Hallo,

wir der Code im Cyclic Programmteil ausgeführt ?
Nicht das dieser im Init eingefügt wurde ?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Eventuell doch doppelt verwendet und wird woanders beschrieben? :confused:
Hast du mal über Strg+Umschalt+F nach exakt der Variable gesucht, (*.* --> alle Files).

Wenn du die Variable nach den Anfangsbuchstaben mit (Strg+Leertaste) automatisch vervollständigen kannst, wird die Variable erkannt und das Problem liegt nicht in der Deklaration (lokal/global);)
 
Hallo,

Eventuell doch doppelt verwendet und wird woanders beschrieben? :confused:
Hast du mal über Strg+Umschalt+F nach exakt der Variable gesucht, (*.* --> alle Files).

Wenn du die Variable nach den Anfangsbuchstaben mit (Strg+Leertaste) automatisch vervollständigen kannst, wird die Variable erkannt und das Problem liegt nicht in der Deklaration (lokal/global);)

Mit Querverweis nach der Variable gesucht und die Verwendung , die Variablen die den Fehler machen sind nur einmal beschrieben. Ich habe sogar mal nur die Variablen mit FALSE beschrieben , das hat die Steuerung wenig interessiert, blieb bei TRUE. Das hat mich doch etwas gewundert, wenn eine Variable auf FALSE dauerhaft steht und trotzdem auf TRUE bleibt. Die Variablen sind nicht in INT abgelegt, wie gesagt sind die Variablen fast ausschließlich in den Globalen untergebracht. Ich denke mal das die Anzahl der Variablen egal sein dürfte und der Task von 8ms kein Problem darstellt. Ich habe auch sicherheitshalber die Variable in jedem Programm unter VAR gesucht, nicht das sie versehentlich doch eingetragen ist. Die Steuerung hatte früher als Boot E3.08 und jetzt E3.10.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mach doch mal ein Screenshot von deinem Program und der Variablendeklaration.

Hallo,

ein Tipp von B&R Support , auf das ich auch selber hätte kommen können. Erst mal die Task einzeln wegschalten (deaktivieren) dann sieht man welches Programm unerlaubt schreibt. Nun, unerlaubt geschrieben hat keines nur ein Fehler in einer ARRAY war bei einem Baustein. Meine Variable war von [1..6] und ich habe auf 7 geschrieben. Warum mir die Steuerung dann nicht sagt das eine Variable außerhalb des Index beschrieben wird ? Denke mal das wird die Steuerung nicht merken, den der Bereich ist bei mit im Programm als Zahl festgelegt. Bei mir schaut das dann so aus Variable[x] (x=die Zahl für ARRAY).
 
Hallo,

ein Tipp von B&R Support , auf das ich auch selber hätte kommen können. Erst mal die Task einzeln wegschalten (deaktivieren) dann sieht man welches Programm unerlaubt schreibt. Nun, unerlaubt geschrieben hat keines nur ein Fehler in einer ARRAY war bei einem Baustein. Meine Variable war von [1..6] und ich habe auf 7 geschrieben. Warum mir die Steuerung dann nicht sagt das eine Variable außerhalb des Index beschrieben wird ? Denke mal das wird die Steuerung nicht merken, den der Bereich ist bei mit im Programm als Zahl festgelegt. Bei mir schaut das dann so aus Variable[x] (x=die Zahl für ARRAY).

Hallo AndiM99,
genau fuer solche Zufaelle ;-) gibt es eine Library die checkt wenn Du ueber grenzen von Arrays hinaus gehst. Nennt sich 'Checklib'. Du kannst diese unter LIbrary hinzufuegen in Dein Projekt aufnehmen, also ganz einfach. Diese Library wird sogar in der Hilfe beschrieben.

Ich wuerde diese Library aber nicht im letztendlichen Projekt belassen weil Sie dich Performance kostet und je nachdem welche CPU du benutzt kann sich das Deutlich bemerkbar machen. Einfach die Library im Project Fenster und unter Libaries im linken Fenster entfernen. Dann via Online -> Compare -> Software die CPU stoppen !!! Dann im rechten Teil des Software Fensters die Library entfernen. Aber pass auf es kann sein das da noch andere Librariies dran haengen. Sogenannte Dependencies. Musst halt gut lesen. Oder Du machst eine neue Compact Flash (alte CPU's) oder du uebertreagst alles noch einmal. Aber vergiss NIEMALS ein Build All zu machen wenn du an Strukturen, Arrays oder Globalen Dingen gearbeitet hast. Kannst Dir ne Menge suchen und aergern ersparen.

Eventuelle Rechtschreibfehler Bitte ich zu uebersehen weil ich seit etwas mehr dann 20 Jahren nicht mehr in Deutschland lebe und die Landessprache hier will ich erst gar nicht in's Forum bringen ;-).

Noch ein Ding: der B&R Support ist eigentlich ein sehr guter, habe selbst 4 Jahre darin verbringen muessen, aber Sie sagen auch nicht alles um den Kunden nicht zu ueberlasten. ;-)

Nur zur info: Welche AS version beutzt du? 4.2, 4.3...4.6? Oder Aelter?
 
Zuletzt bearbeitet:
Hallo,

ich benutze die AS4.1.x die letzte freie Version. So geübt bin ich noch nicht mit B&R, da ich ja eigentlich nur Beckhoff programmiere. Aber einen Grundkurs werde ich noch machen, wenn den Zeit dafür da ist. Aber erst muss ich das fertig machen und dann ..... eigentlich macht man zuerst den Kurs dann das Programm :).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich benutze die AS4.1.x die letzte freie Version. So geübt bin ich noch nicht mit B&R, da ich ja eigentlich nur Beckhoff programmiere. Aber einen Grundkurs werde ich noch machen, wenn den Zeit dafür da ist. Aber erst muss ich das fertig machen und dann ..... eigentlich macht man zuerst den Kurs dann das Programm :).

Aha, die 4.1.x. Alle Updates die zu bekommen waren?
Grundkurse gebe ich auch privat aber nicht nur wie man AS benutzt. Ich gebe B&R Kurse seit rund 20 Jahren und versuche auch 'Wie programmire ich Object Orientiert in Strukured Text" mit zu geben. Auch in Ansi-C. Ich komme halt aus der Praxis und habe im Core Bereich, als Projetkt Leiter und Programmierer gearbeitet, was ich immer noch gerne mache. Auch fuer meine eigene Haus Automatisierung benutze ich das B&R X20 System ;-).

Was aber viele einfach vergessen ist wie man(n)/frau performance orientiert programmiert. Kann einem hunderte an Euros sparen bei der Anschaffung von CPU's. Und das auf das Jahr gerechnet ist ein haufen Geld den ich gerne haette, haha. Laesst sich auch ganz einfach nachweisen mit den Tools von AS (nicht das Geld..die Performance).

Tja, lernen, lernen und nocheinmal lernen ist der eine Weg, aber nicht der einzigste. Kreatief programmieren muss man beherschen, vergessen auch viele, vorallem die Arbeitgeber. Sie mussen uns Programmierer eigentlich jeden morgen einmal Streicheln, Mittags Pizza und Cola und abends bevor wir nach hause gehen noch eine Massage ober drauf geben. haha

Auf jedenfall viel Erfolg. Bei Fragen weisst Du mich zu finden obwohl das heute hier mein erster Tag ist.
 
Anschaffung der CPU's ist so eine Sache. Die Lagerhaltung ist ein wichtiger Punkt und daher werden denke ich immer Leistungsstärkere CPU's in Maschinen verbaut, die eigentlich mit einer kleineren CPU zurecht kommen. Daher sind die Kosten für unterschiedliche Hardware höher als der Standard. Nichts geht über "mehr Power" :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
MichaelUray
In ST kann man wenn man weiss wie object orientiert programmieren. Naja es ist kein C++ oder Java.
Du kennst die Action Funktion? Man nimmt einfach einen Task (all in) und bindet dann so vieel wie benoetigt Actions ein.
Im Task selbst werden diese einfach aufegrufen. Z.B.

Zyklischer Bereich:
if (recipe_ok) then
ActionName1;
ActionName2;
...
...
end_if

Im Task selbst erledigt man nur die Haupaufgaben.
Die Actions haben einfache lokale Variablen (besser Strukturen ;-) ) koennen aber auch auf Globale zugreifen und schreiben.
Ich wuerde den Globalen Teil lieber im Haupttask ausfuehren und den objecten die Arbeit ueberlassen.
Es ist nicht das C++ objekt getue ;-) aber es funktioniert.
Pointerhandling und variables memory handling ist alles moeglich.
Du kannst im DRAM eine virtulle HDD erstellen und diese nach belieben nutzen.
Alle Objecte (actions) koennen darauf zugreifen.

Aber es gibt Ausnahmen was bestimmte Libraries angeht. Die lassen sich nicht
in der Action (Object ansprechen). Ich habe vor rund 15 Jahren eine Fifo
gebaut um global oder local sehr schnelles handling fuer Daten zu ermoeglichen.
heute heisst diese AsFifo.
Diese nutze ich heute noch. Diese laesst sich nur nicht im Object anwenden.
Ich meine das Schreib Komando, FiFoWrite();
geht dann nur ueber eine lokale variable im Haupttask. Macht aber nichts weil
die Objecte (Actions) ja im Task gerufen werden. Fast wie das Library handling
nur eben mehr der Gedanke eines Objectes. ST ist eine der meist benutzten Sprachen bei B&R.
Obwohl Ansi-C und C++ zue Verfuegung stehen. Diese Sprachen kann aber nicht
jeder programmieren. 80% der IA Ingeneure im Maschienebau koenne das nicht.
nach rund 33 Jahren bekommt man das mit.

St ist eine stabile Sprache und laesst wie gesagt extremes Pointerhandling zu. Sofern man
das kann und nicht im loop auf andere Bereiche schreibt. Mann sollte die loops eben
Dynamisch ausschreiben. Geht alles.

Ich habe das bei ASML Niederlande (lithografische maschinen um Chips herzustellen) benutzt.
Auch das grosse Port von Rotterdam laeuft mittleweile damit. Diese grosse zweiteilige Hafenschleuse.
Auch die Schleusensysteme am Eisselmeer arbeiten damit. Sehr schnell sequenzielle Daten
einem Task zufuehren der die Daten wegschreibt. Local auf die CF oder internes Memory oder
FTP, NAS oder andere Serversysteme. Je nach bedarf. Laeuft sicher und schnell.

Ich hoffe man kann es trotz der Gross und Kleinschreib Fehler lesen.
Bin einfach zu lange weg von der alten Heimat.
 

Du kennst die Action Funktion? Man nimmt einfach einen Task (all in) und bindet dann so vieel wie benoetigt Actions ein.
Die Funktion kenne ich leider nicht, aber das könnte auch daran liegen, dass ich alles in C programmiere (also einer der wenigen :D) und in ST nicht so fit bin.
In der Hilfe habe ich dazu jetzt auf die Schnelle auch nichts gefunden. Gibt es dazu denn eine Beschreibung?



Ich habe das bei ASML Niederlande (lithografische maschinen um Chips herzustellen) benutzt.
Auch das grosse Port von Rotterdam laeuft mittleweile damit. Diese grosse zweiteilige Hafenschleuse.
Auch die Schleusensysteme am Eisselmeer arbeiten damit. Sehr schnell sequenzielle Daten
einem Task zufuehren der die Daten wegschreibt. Local auf die CF oder internes Memory oder
FTP, NAS oder andere Serversysteme. Je nach bedarf. Laeuft sicher und schnell.
Interessant und gut zu wissen falls ich das einmal brauchen solle.
Es gibt ja heute schon viele Libraries, dass man gar nicht mehr alle kennen kann.
 
MichaelUray:
-> Es gibt ja heute schon viele Libraries, dass man gar nicht mehr alle kennen kann.
Wenn man bei B&R arbeitet oder gearbeitet hat als Projectleiter und Programmierer kennt man sie alle, haha.
Du glaubst nicht was es fuer Kunden gibt, oder besser die Fragen ;-).

-> Interessant und gut zu wissen falls ich das einmal brauchen solle.
Information ist in der Hilfe zu finden. Ich habe dir mal das herraus gesucht was wichtig ist.

Erstelle dir einen File
: DeinNameFuerDieHilfeFavoriten.XML

und kopiere den folgenden Inhalt hinein. Speichern und in der Hilfe unter
: File->Open den help favorites file importieren.

Dann findest du das gaaanz schnell. Die Info kommt aus der AS_4.2 Hilfe. Muesste aber auch in 4.1 werkeln.
Wenn nicht dann eben die Titel in dem XML File suchen.

<?xml version="1.0" encoding="utf-8"?>
<HelpFavorites>
<Item Name="Actions" HelpId="6d4d9980-6139-411b-9dc8-d27987578371" />
<Item Name="Action blocks and qualifiers" HelpId="3af3a1b7-bcf4-4e16-92f3-0b73e29cd0fb" />
<Item Name="Using actions in the various programming languages" HelpId="ae802e67-c342-48c6-9f8b-b3972e2de43d" />
</HelpFavorites>

Anders einfach noch einmal fragen. Schaue nicht jeden Tag hier in das Forum. Aber einmal die Woche schon.
 
Zurück
Oben