String anzeigen lassen in der VISU

isaridum

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

ich habe in eine schaltfläche verschiede If anweisungen integriert. In dieser Schaltfläche soll der Status des Motor angezeigt werden. Nur funktioniert das nicht denn die fläche bleibt einfach leer.
Hier der Code:
IF POU_drive.GroupDisabled THEN
POU_drive.Tripod_betrieb_status :='GroupDisabled';
END_IF

IF POU_drive.GroupMoving THEN
POU_drive.Tripod_betrieb_status :='GroupMoving';
END_IF

IF POU_drive.GroupErrorStop THEN
POU_drive.Tripod_betrieb_status :='GroupErrorStop';
END_IF

IF POU_drive.GroupStandby THEN
POU_drive.Tripod_betrieb_status :='GroupStandby';
END_IF

IF POU_drive.GroupStopping THEN
POU_drive.Tripod_betrieb_status :='GroupStopping';
END_IF

IF POU_drive.GroupHoming THEN
POU_drive.Tripod_betrieb_status :='GroupHoming';
END_IF

Tripod_betrieb_status ist als String deklariert.



1625046070514.png
 
Trifft denn einer der Fälle zu? Ist die Simulation in RUN?
Wird der Baustein aufgerufen ( TASK )?

Was steht in der Variable, wenn du in dem Baustein mal die Variable beobachtest?

PS:
Das könnte man auch etwas anders / kürzer programmieren:
Code:
IF POU_drive.GroupDisabled THEN
    POU_drive.Tripod_betrieb_status :='GroupDisabled';
ELSIF POU_drive.GroupMoving THEN
    POU_drive.Tripod_betrieb_status :='GroupMoving';
ELSIF POU_drive.GroupErrorStop THEN
    POU_drive.Tripod_betrieb_status :='GroupErrorStop';
ELSIF POU_drive.GroupStandby THEN
    POU_drive.Tripod_betrieb_status :='GroupStandby';
ELSIF POU_drive.GroupStopping THEN
    POU_drive.Tripod_betrieb_status :='GroupStopping';
ELSIF POU_drive.GroupHoming THEN
    POU_drive.Tripod_betrieb_status :='GroupHoming';
ELSE
    POU_drive.Tripod_betrieb_status :='nichts zutreffend';
END_IF;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab den String zu keinem Baustein zugewiesen, sondern ihn nur in der Schaltfläche benutzt.
Verstehe ich nicht. Du hast doch in #1 Codeschnipsel geliefert, welchen den String beschreiben:
Code:
IF POU_drive.GroupDisabled THEN
    POU_drive.Tripod_betrieb_status :='GroupDisabled';
END_IF
.....
 
Ok, jetzt habe ich verstanden. Anscheinend kann man in dieser Visu ProgrammCode an einem Button projektieren

Da kann ich dir nicht weiter helfen. Evtl. werden die BOOL Variablen in der Visu nicht aktualisiert ( Erfassungsart.. )

Vielleicht kann dir @oliver.tonn besser helfen.
 
genau hab das so gemacht ohne baustein, hab ich vielleicht falsch initalisert oder muss ich einen dynamischen speicher machen wie etwa in C, denn es wird ja nur ' angezeigt 1625048426878.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie schon geschrieben, ich würde mal folgenden Code probieren und dann schauen ob "nichtsZutreffend"
angezeigt wird:
Code:
IF POU_drive.GroupDisabled THEN
    POU_drive.Tripod_betrieb_status :='GroupDisabled';
ELSIF POU_drive.GroupMoving THEN
    POU_drive.Tripod_betrieb_status :='GroupMoving';
ELSIF POU_drive.GroupErrorStop THEN
    POU_drive.Tripod_betrieb_status :='GroupErrorStop';
ELSIF POU_drive.GroupStandby THEN
    POU_drive.Tripod_betrieb_status :='GroupStandby';
ELSIF POU_drive.GroupStopping THEN
    POU_drive.Tripod_betrieb_status :='GroupStopping';
ELSIF POU_drive.GroupHoming THEN
    POU_drive.Tripod_betrieb_status :='GroupHoming';
ELSE
    POU_drive.Tripod_betrieb_status :='nichtsZutreffend';
END_IF;
 
Wie gesagt, ich bin kein CoDeSys Profi. Folgendes ist mir in einem CoDeSys Beispiel aufgefallen:

Code:
PROGRAM MAIN
VAR
  wsTest        : WSTRING(10) := "abcdefäüöß";
  sTest         : STRING(10) := 'abcdefäüöß';
END_VAR

Und zwar das der Text nicht mit ' ' markiert ist sondern mit " "
Und evtl. musst du noch eine Länge angeben, (10) oder mehr.
Ich weiß nicht wie CoDeSys das interpretiert, wenn man keine Länge angibt ( 1 Zeichen, oder 255 Zeichen oder oder... )
 
habe es jetzt in beiden varianten probiert sowohl String als auch Wstring und es funktionier leider immer noch nicht
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das könnte man auch etwas anders / kürzer programmieren:
Code:
IF POU_drive.GroupDisabled THEN
    POU_drive.Tripod_betrieb_status :='GroupDisabled';
ELSIF POU_drive.GroupMoving THEN
    POU_drive.Tripod_betrieb_status :='GroupMoving';
ELSIF POU_drive.GroupErrorStop THEN
    POU_drive.Tripod_betrieb_status :='GroupErrorStop';
ELSIF POU_drive.GroupStandby THEN
    POU_drive.Tripod_betrieb_status :='GroupStandby';
ELSIF POU_drive.GroupStopping THEN
    POU_drive.Tripod_betrieb_status :='GroupStopping';
ELSIF POU_drive.GroupHoming THEN
    POU_drive.Tripod_betrieb_status :='GroupHoming';
ELSE
    POU_drive.Tripod_betrieb_status :='nichts zutreffend';
END_IF;

Mal kurz zu Deinem "Verkürzen"... ja, kann man machen, wenn man weiß, daß die Zustände diskret sind.
Sollte es aber Fälle geben, in denen mehr als ein Zustand aktiv ist, bekommst Du ein anderes Ergebnis, als voll ausprogrammiert vom TE.

Das nur OT...

Deine ELSE-Anweisung würde ich - falls der TE seine Programmierung beibehalten möchte - einmal als Anweisung ganz oben drüber schreiben, um den String einmal zu initialisieren.

Das wäre der erste Test: Funktioniert das Zuweisen eines Strings an den Button überhaupt, so wie Du Dir das denkst? Wenn das klappt, kann man den Text dynamisieren.
Was mir auch auffällt: Du schreibst das in einen Event-Handler "OnDialogClosed": Es wird also maximal ein Mal ausgeführt, wenn dieser Dialog schließt. Da es sich aber offensichtlich um eine Taste handelt: Wann soll das denn ausgeführt werden?

Also ich würde: Erstmal testen, ob das Event überhaupt ausgeführt wird. Danach dann, ob Du einen String zuweisen kannst.
 
Mal kurz zu Deinem "Verkürzen"... ja, kann man machen, wenn man weiß, daß die Zustände diskret sind.
Sollte es aber Fälle geben, in denen mehr als ein Zustand aktiv ist, bekommst Du ein anderes Ergebnis, als voll ausprogrammiert vom TE.
Das stimmt natürlich. Bei der ursprünglichen Variante wäre es der Text der letzten TRUE Bit, bei meiner Variante der des ersten TRUE Bit.
 
Mal kurz zu Deinem "Verkürzen"... ja, kann man machen, wenn man weiß, daß die Zustände diskret sind.
Sollte es aber Fälle geben, in denen mehr als ein Zustand aktiv ist, bekommst Du ein anderes Ergebnis, als voll ausprogrammiert vom TE.

Das nur OT...

Deine ELSE-Anweisung würde ich - falls der TE seine Programmierung beibehalten möchte - einmal als Anweisung ganz oben drüber schreiben, um den String einmal zu initialisieren.

Das wäre der erste Test: Funktioniert das Zuweisen eines Strings an den Button überhaupt, so wie Du Dir das denkst? Wenn das klappt, kann man den Text dynamisieren.
Was mir auch auffällt: Du schreibst das in einen Event-Handler "OnDialogClosed": Es wird also maximal ein Mal ausgeführt, wenn dieser Dialog schließt. Da es sich aber offensichtlich um eine Taste handelt: Wann soll das denn ausgeführt werden?

Also ich würde: Erstmal testen, ob das Event überhaupt ausgeführt wird. Danach dann, ob Du einen String zuweisen kannst.
Beim testen ergab sich das sich der String nicht ändert. Hab das gefühl man kann den String nicht allein in der Visualisierung ändern
 
Zurück
Oben