Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Bibliotheken nur für bestimmte Targets zulassen

2008-03-14
2008-03-17
  • ChristophMS - 2008-03-14

    Tagchen!

    Gibt es in CoDeSys eine einfache Möglichkeit, die Verwendung von Bibliotheken nur auf bestimmten Targets zuzulassen?

    Der Hintergrund ist folgender:

    Ich habe zwei Targets mit C16x-Laufzeitsystem und zwei Bibliotheken, in denen (dummerweise) Funktionen mit dem gleichen Namen vorhanden sind (z.B. SET_CAN_BAUDRATE oder so).

    Bei der einen Bibliothek bekommt die Funktion noch einen Parameter (z.B. die Schnittstellennummer) übergeben, bei der Funktion in der anderen Bibliothek gibt es das nicht.

    Damit sind die Bibliotheken also nicht auf beiden Targets lauffähig, aber gelinkt würden sie trotzdem. Das könnte u.U. zu seltsamen Effekten führen bzw. die Funktion würde nicht das machen, was erwartet wird.

    Ich habe schon überlegt, das über die Lizensierung der Bibliotheken zu machen (da kann man ja Target-ID angeben), aber eine wirkliche Lizensierung per Telefon oder Mail kommt nicht in Frage.

     
  • Erik Böhm - 2008-03-17

    Moin

    Dafür gibts die targetspezifischen Library Verzeichnisse.

    Unter ...\CAA-Targets...

    Gruss Erik

     
  • ChristophMS - 2008-03-17

    Hallo Erik!

    Danke für die Antwort.

    Ich glaube, ich habe das Problem doch etwas zu einfach dargestellt.

    In Wirklichkeit habe ich nicht nur zwei sondern fünf Targets.

    Bei vier dieser Targets funktioniert LibraryA, bei Target 5 LibraryB.

    Bislang habe ich es so gehandhabt, daß ich für jedes Target die passenden Bibliotheken im targetspezifischen Pfad untergebracht habe.

    Das führt dann aber dazu, daß ich LibraryA vier Mal habe, was ich gerne vermeiden möchte.

    Ich hatte mir das eher so vorgestellt: LibraryA bekommt den Status einer Standardbibliothek und darf in einem meiner Standardbibliothekspfade landen, während LibraryB weiterhin targetspezifisch bleibt.

    Nun möchte ich verhindern, daß Anwender vom Target 5 LibraryA zu benutzen versuchen, da das dann zu komischen Effekten führt.

    Daher die Idee mit der Verknüpfung von Target-ID und Bibliotheken.

    Gibt es vielleicht eine andere elegante Lösung?

    Gruß ChristophMS

     
  • Erik Böhm - 2008-03-17

    Mahlzeit

    Prinzipiell kannst du jede beliebeige Library in jedes Target einbinden.

    Ein Fehler wird frühestens beim compilieren angezeigt.

    Ich kennen keinen Mechanismus, der das bereits während der Bearbeitung merken könnte.

    Wie wärs mit verschiedenen Namen für die Libs ?

    Und / oder zur Laufzeit eine Kontrolle über eine Versionsvariable in der Lib. Wenn die Variable falsch ist -> Fehlermeldung im Bedienfeld (oder was auch immer für einer Anzeige).

    Wir nehmen da eine REAL Variable als Versionsnummer und fragen dann auf rVersionNumber >= x.xx ab.

    Wenn sich z.B. die In-Output Variablen der Funktion nicht geändert haben, aber der Inhalt.

    Oder du musst versuchen die Libs kompatibel zu kriegen. z.B. über ein TargetTyp Flag oder so. Flag = FALSE (default) ~ Target 1..4;

    Flag gesetzt ~ Target 5.

    Gruss

    Erik

     
  • ChristophMS - 2008-03-17

    Hi Erik!

    Es gibt bei CoDeSys die Möglichkeit der Lizensierung von Bibliotheken. Da kann man auch einzelne Targets angeben (findest Du unter Speichern unter->interne Bibliothek->Lizenzinfo bearbeiten).

    Damit könnte es gehen, nur will ich nicht, daß ich eine Bibliothek erst freischalten lassen muß, bevor man damit was anfangen kann.

    Unterschiedliche Namen haben die Bibliotheken ja schon - dummerweise sind aber gleiche Funktionsnamen verwendet worden (man lernt halt nie aus). Funktionen umbenennen geht auch nicht so einfach, da ich mit alten Systemen kompatibel bleiben möchte.

    Vielleicht ist es wirklich das einfachste (und beste?), bei der Lösung mit dem Libs-Verzeichnis für jedes Target zu bleiben. Dann ist auf jeden Fall erst einmal alles eindeutig ...

     
  • Erik Böhm - 2008-03-17

    Moin

    Wenn du den Haken bei 'Lizenzfreier Modus' entfernst, ist das dann nicht was du brauchst ?

    Gruss

    Erik

     
  • ChristophMS - 2008-03-17

    Hi Erik!

    Hab ich gerade mal ausprobiert und das funktioniert auch.

    Wenn ich nun ein unpassendes Target gewählt habe, bekomme ich direkt beim Übersetzen eine Fehlermeldung.

    Nachteil: Wenn ich jetzt im Bibliotheksverwalter unter Eigenschaften die Lizenzinfo anschaue, kann ich dann allerdings eine Lizenz anfragen (die es natürlich dann für das unpassende Target nicht geben dürfte)

    Ich überlege mal, ob ich das so nutzen möchte oder ob ich vielleicht doch lieber bei der "alten" Methode bleibe

    Danke für Deine Mitüberlegungen ...

    Gruß ChristophMS

     

Log in to post a comment.