2017-12-08 1 views
0

Im Versuch, eine TwinCAT 3 Bibliothek zu erreichen, die Konstanten tut Dinge global im Hauptprojekt definiert, wie Arrays die Größe dieser Konstanten zu schaffen und Radfahren Trog sie. Aber ich war erfolglos und ich frage mich, ob das gemacht werden kann. Ich bekomme nur diesen Fehler "Fehler 4 Border 'cPassedConstant' des Arrays ist kein konstanter Wert", wenn ich versuche, das Hauptprojekt zu erstellen. Der Fehler kommt von dem Array, das in der Bibliothek definiert ist.auf Bezug einer konstanten aus der Bibliothek, TwinCAT 3

Ich habe versucht, eine GVL mit einer konstanten des gleichen Namens in die Bibliothek zu machen und dann die „externe Implementierung“ Eigenschaft true setzen, aber das hilft nicht.

hier Mein Ziel ist es, eine IO-Management-Bibliothek mit Filtern und so zu machen. Und dann könnte ich es einfach zum Hauptprojekt hinzufügen und einige Konstanten wie "cDigitalIputsCount", "cAnalogInputCount" und so weiter definieren.

+0

Ich verstehe das Problem nicht wirklich. Arrays, die Konstanten verwenden, sind auch dann möglich, wenn sich die Konstante in der Bibliothek befindet. Können Sie bitte einen Code mit klarer Trennung angeben, was in der Bibliothek ist und was in dem anderen Projekt ist? –

+0

Ich möchte speziell, dass die Konstante im Hauptprojekt definiert ist und von der Bibliothek verwendet wird. Sagen wir, ich möchte ein System mit zB 10 analogen IOs erstellen. –

+0

...Ich würde dann meine IO-Bibliothek zum Hauptprojekt hinzufügen, definieren Sie eine globale Konstante cAINs: UINT: = 10; und dann in MAIN würde ich PRG_IO POU aufrufen, das sich in der Bibliothek befindet. In PRG_IO wäre ein ARRAY [1..cAINs] von FB_AnalogIn, das in einer for-Schleife ausgeführt würde. Auch in der Bibliothek würde eine Funktion F_GetAnalogIn vorhanden sein, die den gefilterten/skalierten AI-Wert für den FB erhalten würde. Punkt ist, dass ich einfach ein IO-System mit einer variablen Anzahl von IOs erstellen konnte, indem ich einfach die Bibliothek einfügte, einige Konstanten definierte und PRG_IO aufruft. Verstehst du das jetzt? –

Antwort

1

Vielleicht können Sie mit dem neuen ARRAY auszukommen [*] statt verfügen, obwohl es immer noch sehr begrenzt ist. Es gibt keinen anderen Weg, als die Konstante in der Bibliothek zu definieren.

Das Bibliothekskonzept ist das gleiche wie in anderen Umgebungen. Eine Bibliothek bietet Ihnen wiederverwendbare Komponenten. Ihr Hauptprojekt hängt von der Bibliothek ab und nicht umgekehrt. Daher kann Ihre Bibliothek nichts über das Projekt wissen, in dem sie verwendet wird.

Eine verwirrende Sache in TwinCat3 ist, dass Sie Projekte erfolgreich mit Programmierfehler im Inneren zu bauen. Der TwinCat3-Compiler erlaubt den Abbruch von Code in einem Projekt, solange dieser nicht aufgerufen wird. Wenn Sie also Bibliotheken versenden, sollten Sie immer "Alle Objekte prüfen" verwenden.

0

Ich würde vorschlagen, eine variable Länge unter Verwendung von ARRAY [*], wie in den unten stehenden Link (und auch in der Beckhoff/Infosys, Abschnitt Datatypes/Array) erläutert.

Der Punkt ist, dass Sie das ARRAY [1..cAINs] von FB_AnalogIO in Ihrem Hauptprogramm deklarieren sollten (es kennt den FB_AnalogIO von Ihrer analogen Bibliothek und kann es mit einer konstanten Größe deklarieren).

Der PRG_IO sollte dann entweder zu einer Funktion oder einem Funktionsblock geändert werden, so dass er das ARRAY [*] als VAR_IN_OUT akzeptiert, ohne die genaue Größe zu kennen.

https://stefanhenneken.wordpress.com/2016/09/27/iec-61131-3-arrays-with-variable-length/

+0

Danke! Ich war mir dieser Eigenschaft nicht bewusst. Ich werde das untersuchen. –

0

Sie sollten Merkmal Parameter List genannt Beckhoff überprüfen. Durch Hinzufügen einer Parameterliste zum Bibliotheksprojekt können Sie Bibliothekskonstanten in dem Projekt, das die Bibliothek verwendet, neu definieren. Die Definition geschieht im Bibliotheksverwalter.

Bild von Beckhoff Website: enter image description here

denke ich, dass es tun sollten. Natürlich ist die andere Option, die ARRAY[*] Option zu verwenden, die auch fantastisch ist (für eine SPS-Programmierwelt). Das Problem mit Parameterlisten ist, dass es sich um eine projektweite Neudefinition handelt. Mit der ARRAY[*] kann die Größe dynamisch geändert werden.

Verwandte Themen