Dynamische Texte / mehrere Konfigurationen

Deutsch
Chris.O
2019-11-04
2019-11-28
  • Chris.O

    Chris.O - 2019-11-04

    Hallo,

    ich hätte mal eine Frage zu dynamischen Texten. Und zwar möchte ich folgendes Realisieren:
    Ich möchte eine einfache Sprachumschaltung Deutsch - Englisch - Russisch haben. Hierzu habe ich ein Dropdown-Menü erstellt, dass mir die 3 Sprachen zur Auswahl bietet. Wähle ich nun eine Sprache aus, soll umgeschaltet werden. Die Umschaltung selbst realisiere ich dann über

    VisuElems.CmpDynamicText.DynamicTextChangeLanguage(stLanguage:=sLanguage);
    

    Die sprachen habe ich in einer separaten Textliste angegeben.

    Das funktioniert soweit auch super.

    Jetzt möchte ich aber zusätzlich für den Kunden die Möglichkeit haben, für meine Messwerte zwischen einem "Long Name", "short Name" oder der "KKS"-nummer umzuschalten. Auch dies habe ich wie oben realisiert. (Auch mit separater Textliste)
    Alles für sich selbst funktioniert auch wunderbar. Das Problem ist nur, dass nun wenn ich z.B: auf KKS umschalte, auch meine Sprachumschaltung sich verändert, obwohl es den Eintrag "KKS" in der Textliste für die Sprachumschaltung gar nicht gibt. Es wird auf den Standard-Text umgeschaltet bzw. dann gar nichts rein geschrieben.
    Umgekehrt genauso (also wenn ich Sprache umschalte, werden meine Namen verändert)

    Wie bekomme ich es hin, dass beide Umschaltungen parallel funktionieren?

    Des weiteren würde mich interessieren, ob ich die Sprachumschaltung für jeden Client separat machen kann? Kann ja sein, dass ich zwei Clients gleichzeitig habe, die verschiedene Sprachen anzeigen sollen.

    Ich verwende aktuell CoDeSys V3.5 SP15 Patch 1 mit einer Wago PFC200 8204 mit FW13

    Danke,

    Gruß Chris

     
  • m.prestel

    m.prestel - 2019-11-07

    Hallo Chris,

    leider willst du hier zwei Sprachen gleichzeitig kombinieren und das geht nicht.
    Zum einen hast du Deutsch/Englisch, zum anderen Long/Short...

    Du änderst mit DynamicTextChangeLanguage die aktive Sprache der Applikation, entweder Deutsch/Englisch oder eben auf Long/Short.

    Und die jeweils andere Textliste hat dafür keine Einträge und zeigt deshalb den Default Wert an.

    Je nachdem, welche Messwerte du hast, könntest du dir das Feature UnitConversion anschauen (z.B. zur Konvertierung von km zu Miles). https://help.codesys.com/webapp/_cds_un ... n=3.5.15.0

    Und aktuell ist es leider nicht möglich, dass man die Sprachumschaltung für jeden Client separat machen kann. Dafür gibt es schon einen Punkt und der ist aktuell auch im Backlog, aber ich weiß nicht, ob er es in SP16 schafft.

    LG
    Marcel

     
  • Chris.O

    Chris.O - 2019-11-11

    Hi,

    hmh ok... dann werd ich mir da wohl was anderes überlegen müssen... trotzdem Danke für die Antwort.

    Gruß Chris

     
  • Chris.O

    Chris.O - 2019-11-21

    Hallo,

    ich hätte nochmal eine Frage bezüglich der Sprachumschaltung.
    Ich hab mir jetzt über ein "Dropdown" eine Sprachauswahl gemacht.
    Anschließend wird über eine Funktion die Sprache umgeschaltet:

    FUNCTION SwitchLanguage_31 :BOOL
    VAR_INPUT
       iLanguageOption: INT;
    END_VAR
    VAR
       iLanguageOption_old:INT:=99;
       sLanguage:STRING;
    END_VAR
    
    SwitchLanguage_31:=FALSE;
    CASE iLanguageOption OF
       0: sLanguage:='de'; //Deutsch
       1: sLanguage:='en'; //Englisch
       2: sLanguage:='fr'; //Französisch
       3: sLanguage:='ru'; //Russisch
       4: sLanguage:='ro'; //Romänisch
       5: sLanguage:='zh'; //Chinesisch
       6: sLanguage:='sv'; //Schwedisch
    END_CASE
    IF (iLanguageOption <> iLanguageOption_old) THEN
       VisuElems.CmpDynamicText.DynamicTextChangeLanguage(stLanguage:=sLanguage);
       iLanguageOption_old:=iLanguageOption;
       SwitchLanguage_31:=TRUE;
    END_IF
    

    Funktioniert soweit auch... Aber wenn ich die Sprache umschalte gehen meine Taskzeiten ENORM nach oben! Auch wenn die Funktion in einer nieder Prioren Task läuft, geht meine Main-Task nach oben.
    Ebenso wird dann mein K-Bus der PFC200 abgewürgt.

    Ich hab mir auch die neueste Version mal geladen:
    CoDeSys V3.5.15 Patch 2, hier auch die Runtime für den PFC200 8204

    Jemand ne Idee, was das sein könnte bzw. wie ich das beheben kann?

    Gruß Chris

     
  • m.prestel

    m.prestel - 2019-11-22

    Hallo Chris,

    beim Sprachwechsel werden die verwendeten Textlisten neu geladen.
    Kann es sein, dass du riesige Textlisten hast?

    BTW, was passiert eigentlich, wenn ich SwitchLanguage_31(iLanguageOption:=7) aufruf?

    LG
    Marcel

     
  • Chris.O

    Chris.O - 2019-11-22

    Hallo Marcel,

    danke für dein Antwort.
    Aktuell habe ich noch keine riesigen Textlisten. Das würde aber in Zukunft noch kommen. Wenn ich alle Textlisten zusammen nehme, habe ich aktuell in diesem Testprojekt 319 Einträge in den Textlisten (10 verschiedene Textlisten).

    Auch wenn ich riesige Textlisten habe, sollte es meiner Meinung nach nicht zu einer Verlängerung der Zykluszeit (oder gar einem Absturz) in z.B. der Main-Task kommen, wenn ich die Sprache wechsle. Das sollte allenfalls die VisuTask beeinflussen....meiner Meinung nach... ich hoffe das kann technisch umgesetzt werden?

    Das mit dem "SwitchLanguage_31(iLanguageOption:=7) " habe ich bisher außerhalb meiner Funktion abgefangen, aber wäre anders natürlich schöner . Danke für den Hinweis.

    Gruß Christian

     
  • m.prestel

    m.prestel - 2019-11-25

    Hallo Chris,

    das Neuladen der Textlisten passiert direkt bei dem Aufruf, d.h. in dieser Task.

    Komisch ist, dass dein Betriebssystem die Priorisierung der Tasks nicht beachtet (Annahme K-Bus ist in einer höher prioren Task).

    Könntest du bitte dem Support dein Projekt mit Steps to Repeat zukommen lassen?
    Vllt können wir es ja Inhouse nachstellen.
    Danke!

    LG
    Marcel

     
  • Chris.O

    Chris.O - 2019-11-26

    Hallo Marcel,

    hab das Projekt bereits geschickt. Herr Schwellinger hat sich dem Problem scheinbar angenommen.
    Aber ich denke wegen der SPS-Messe werde ich wohl ein wenig warten müssen .

    Als kleiner Nachtrag... ich verwende auch eine "eigene" Lib. Hier sind auch einige Textlisten vorhanden... ich vermute die werden auch mit umgeschaltet (auch wenn nicht alle verwendet werden)?

    Das mit der Prio finde ich durchaus auch komisch...die Main-Task sollte nämlich nicht durch Textlisten beeinflusst werden...

    Was genau meinst du mit "Das Neuladen der Textlisten passiert direkt bei dem Aufruf, d.h. in dieser Task"
    Wenn ich meine Sprachumschaltung in der Main-Task ausführe (mach ich ja über Programmcode), werden auch in dieser Task die Textlisten geladen?
    Ich dachte eigentlich, da die Anzeige etc. in der Visu läuft, wird das alles über die Visu-Task gemacht...

    Danke,

    Gruß Christian

     
  • m.prestel

    m.prestel - 2019-11-26

    Hallo Christian,

    genau bestimmen können wir nicht, welche Textlisten verwendet werden, weil es immer möglich ist, dass man unter "Dynamic Texts" über eine Variable jede beliebige Textliste verwenden kann.

    VisuElems.CmpDynamicText.DynamicTextChangeLanguage ist eine veröffentlichte Runtime-Schnittstelle (kein IEC-Code).

    Die Anzeige (also z.B. das Ersetzen von %s mit dem Wert aus der Textliste) passiert in der Visu-Task, das Neuladen aller Textlisten passiert im Aufruf von DynamicTextChangeLanguage.
    Man kann auch außerhalb der Visu-Task (und der Visu insgesamt) auf die Inhalte der Textliste zugreifen.

    LG
    Marcel

     
  • Chris.O

    Chris.O - 2019-11-28

    Hallo Marcel,

    ok, soweit verstanden.
    Dann müsste aber doch normalerweise meine Main-Task von einem Zykluszeitanstieg verschont bleiben, wenn diese nichts mit der Umschaltung zu tun hat.

    Wenn ich also mein "VisuElems.CmpDynamicText.DynamicTextChangeLanguage" in einer separaten, niederprioren Task ausführe, dürfte meine Main-Task nicht davon berührt sein... und erst recht nicht mein KBus.

    Was komisch ist,.. Wenn ich meinen KBus in ne separate Task packe und die mit höchster Prio laufen lasse, wird die von der Umschaltung nicht mit beeinflusst...alle anderen Tasks schon...

    Naja.. ich warte jetzt mal ab, was euer Support dazu sagt

    Gruß Christian

     

Log in to post a comment.