Cx8080 & el1512 schnelle zähler

Otto

Level-2
Beiträge
138
Reaktionspunkte
18
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich Versuch bei einem Neustart der CPU den gesicherten Zählerstand zurück zu schreiben aber leider ohne Erfolg. Ich habe mir ein Anlaufprogramm erstellt, welches beim Neustart nur 1mal durch laufen wird. Innerhalb dieses Programms möchte ich den Zählerstand zurück schreiben was aber nicht funktioniert. Hat einer meine Idee warum nicht?
 
Du bekommst die Antwort sobald meine Kristallkugel aus der Wartung zurück ist. Die ist leider schon etwas abgenutzt gewesen durch die Anrufe aus unserer Produktion: "Die Anlage läuft nicht richtig, mach mal was!".
Ich wünschte es gäbe irgend einen anderen, schnelleren Weg, der auch ohne Kristallkugel funktioniert, um heraus zu finden was in deinem Anlaufprogramm passiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oh Ja MasterOhh,

asche auf mein Haupt,

Anlaufprogramm()
IF NOT Anlauf THEN

setEL1512_Cnt_1:=SafeCounter_1; (*gesicherte Werte zurück kopieren*)
setEL1512_Cnt_2:=SafeCounter_2; (*gesicherte Werte zurück kopieren*)

A1:=TRUE; (*Ausgang für bereit setzen*)

Anlauf:=TRUE; (*System ist Angelaufen*)

IF Anlauf THEN
bSet_Cnt_1:=TRUE; (*############Variable zum Setzen des Zählers ###############*)

END_IF;

END_IF;


Ich habe auch schon einiges an Doku gelesen aber leider nicht gefunden soetwas mit den Bordwerkzeugen des CX8080 zu erlediegen.
Ich habe sonst immer mehr mit Siemens zu tun gehabt, aber bei uns ist jetzt Beckhoff groß im kommen.
Für meine "kleinst Projekte" finde ich die CX80xx Serie wirklich klasse, doch ich muß hallt viel umlernen.

Gruß Otto
 
1.
Hast Du im Systemmanager die entsprechenden Verbindungen erzeugt?

2. Dein Analufprogramm versteh ich irgendwie nicht
Wo wird denn bSet_Cnt wieder zurückgesetzt? So wie ich das sehe, bleibt es für den weiteren Ablauf True.
 
1.
Hast Du im Systemmanager die entsprechenden Verbindungen erzeugt?



2. Dein Analufprogramm versteh ich irgendwie nicht
Wo wird denn bSet_Cnt wieder zurückgesetzt? So wie ich das sehe, bleibt es für den weiteren Ablauf True.

Zu 1 Ja, habe ich.

Zu 2
Im Main Programm, gleich nach dem Aufruf des Anlaufprogramma

Wichtig ist halt das beim Anlaufen die Zähler Stände wieder gesetzt werden. Gibt es denn sonst noch System Mittel?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zu 2: Geht denn setcounter dann überhaupt in's Prozesabbild?
Nach Deiner Darstellung bisher wird also setcounter im Anlaufprogramm gesetzt und in Main gleich wieder zurückgesetzt....

Es gibt noch andere Möglichkeiten: FSoE
Ist aber deutlich aufwändiger vom Programmcode. Die von Dir gewählte Variante ist definitiv die simpelste.
 
Zuletzt bearbeitet:
Jop, SetCounter darfst du nicht im selben Zyklus zurück setzen. Der Wert wird ja erst am Ende des Zyklus in die Hardware geschrieben.
 
Hallo,
so wie du das Beschreibst wird "bSet_Cnt_1" wohl nie auf True gehen. Da es im Main gleich wieder zurückgesetzt wird.

Versuch's mal so:
Code:
IF NOT Anlauf THEN
    setEL1512_Cnt_1:=SafeCounter_1; (*gesicherte Werte zurück kopieren*)    
    setEL1512_Cnt_2:=SafeCounter_2; (*gesicherte Werte zurück kopieren*)

    A1:=TRUE; (*Ausgang für bereit setzen*)
    Anlauf:=TRUE; (*System ist Angelaufen*)
    bSet_Cnt_1:= TRUE; (*############Variable zum Setzen des Zählers ###############*)
else
    bSet_Cnt_1:=FALSE; (*############Variable zum Setzen des Zählers ###############*)
END_IF;

Das Rücksetzten im Main kannst du dann löschen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zu 2: Geht denn setcounter dann überhaupt in's Prozesabbild?
Nach Deiner Darstellung bisher wird also setcounter im Anlaufprogramm gesetzt und in Main gleich wieder zurückgesetzt....

Es gibt noch andere Möglichkeiten: FSoE
Ist aber deutlich aufwändiger vom Programmcode. Die von Dir gewählte Variante ist definitiv die simpelste.

Die Einsicht mit dem Rücksetzen ist mir auch gekommen als ich Deine Nachricht gelesen habe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zeig doch mal den ganzen relevanten Code plus die Verschaltung im Systemmanager.
Ich habe die 1512 eigentlich als gutmütig im Sinne von "reagiert wie erwartet" im Gedächtnis.
 
So ich habe mir jetzt mal was erarbeitet was funktioniert! Leider weiß ich nicht genau warum es vorher nicht richtig funktioniert hat.
Es scheint als würde das Programm schon durchlaufen obwohl die Klemmen noch nicht bereit sind.

Siehe Bild:
Anlauf.JPG


Wenn ich die Zeit von TP_Uebernahme reduziere, klappt das ganze nicht mehr. Ist so ein Verhalten normal?
Wenn ich den Wert manuell mit einem Taster im Main setze klappt das alles tedellos, nur eben beim Anlauf nicht.

Gibt es da noch eine andere Ansätze um etwas nur beim Anlauf auszuführen? :?:

Gruß Otto
 
Die Variable "Anlauf" hast du in der Deklaration für den Start auf False Initialisiert?
Code:
Anlauf : Bool := false;
Nicht das die beim Starten schon auf True steht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Otto,

wie und wo sicherst du die Variablen SafeCounter_1 und SafeCounter_2?
Wann wird beim ausschalten der Zähler zuletzt ausgelesen?

Elegant wäre, wenn die Karte mit dem schnellen Zähler ihre Werte behalten würde. :-?
Macht sie das wirklich nicht?

Gruß
Chräshe
 
Hallo Chräshe,

die Karte behält die werte in der Standarteinstellung leider nicht.
Zum sichern der Zählerstände, werte ich ich das "bPowerFailDetect" der 1S USV aus.

Gruß Otto
 
Hallo Ghosty,

explizit nicht, ich habe mir aber einen Zähler gebaut der mir die Anläufe in einer Sicheren Variable hoch gezählt hat.
Mit der +Fl. von bAngelaufen ohne Probleme.

Gruß Otto
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Otto,

Du hast auch plausible Werte in deinen 2 Zählern?

Prima, dann ist es nicht schon wieder ein Problem mit dem umständlichen Datenhandling bei persistenten Variablen, in Verbindung mit der „1-Sekunden-USV“! :rolleyes:

Vielleicht solltest du die Variable bSet_Cnt_1 und _2 nicht als Puls ansteuern, sondern stehen lassen bis was passiert. Sollte nach 2 Sekunden kein DONE zurückkommen, wäre eine Störmeldung angebracht.

Gruß
Chräshe
 
Hallo Chräshe,

bin jetzt @Home, werde morgen noch mal ein wenig testen. Auf jeden Fall sind Zählerwerte beim Sichern und beim Zurückladen gleich.
Zum testen der Zähler habe ich mir einen Pulse generator mit 'na Vipa Cpu daneben gehängt und als Kontrolle einen schnelle Hengstler Zähler
und das ist soweit alles IO.

Gruß

Otto
 
Bei den kleinen ARM-CXen kann ich mir tatsächlich vorstellen, das Twincat schneller bootet, als der Ethercat-Bus in OP kommt. Von daher müßtest Du mit dem Anlaufprogramm tatsächlich auf den Busstatus warten.
Im einfachsten Fal geht das durch die Auswertung der Eingänge "DevState" des Ethercatkopplers und "State" der EL1512.

Code:
Status einer EL-Klemme

0x___1 = Slave in 'INIT' state
0x___2 = Slave in 'PREOP' state
0x___3 = Slave in 'BOOT' state
0x___4 = Slave in 'SAFEOP' state
0x___8 = Slave in 'OP' state
0x001_ = Slave signals error
0x002_ = Invalid vendorId, productCode... read
0x004_ = Initialization error occurred
0x008_ = Slave disabled
0x010_ = Slave not present
0x020_ = Slave signals link error
0x040_ = Slave signals missing link
0x080_ = Slave signals unexpected link
0x100_ = Communication port A
0x200_ = Communication port B
0x400_ = Communication port C
0x800_ = Communication port D
 
Zuletzt bearbeitet:
Zurück
Oben