2017-12-08 10 views
0

私は、メインプロジェクトで定義されているグローバル定数を使用して、それらの定数のサイズの配列を作成し、それらを循環するようなものを実行するtwincat 3ライブラリーを達成しようとしています。しかし、私はうまくいっていないし、これができるかどうか疑問に思います。私はちょうどこのエラーを取得 "私はメインプロジェクトを構築しようとすると、配列のエラー4ボーダー 'cPassedConstant'は定数値ではありません"。エラーは、ライブラリで定義された配列から発生します。ライブラリーから定数を参照すると、twincat 3

ライブラリーと同じ名前の定数を使用してGVLを作成し、「外部実装」プロパティーをtrueに設定しようとしましたが、それは役に立ちません。

ここでの目標は、フィルタリングなどでIO管理ライブラリを作成することです。そして、私はそれをメインプロジェクトに追加し、 "cDigitalIputsCount"、 "cAnalogInputCount"などの定数を定義することができます。

+0

私は本当に問題を理解していません。定数がライブラリ内にあっても、定数を使用する配列は可能です。ライブラリにあるものと、他のプロジェクトに含まれているものとを明確に区別してコードを提供してください。 –

+0

私は特に、定数がメインプロジェクトで定義され、ライブラリによって使用されるようにしたいと思います。たとえば、10個のアナログI/Oなどのシステムを作成したいとします。 –

+0

...次に、私のIOライブラリをメインプロジェクトに含め、グローバル定数を定義します。CAIN:UINT:= 10; MAINでは、ライブラリにあるPRG_IO POUを呼び出します。 PRG_IOにはforループで実行されるFB_AnalogInのARRAY [1..cainss]があります。また、ライブラリにはFBのフィルタリングされた/スケーリングされたAI値を取得する関数F_GetAnalogInがあります。いくつかの定数を定義してPRG_IOを呼び出すだけで、ライブラリをインクルードするだけで、IOの可変数のIOシステムを簡単に作成できるということです。あなたは今理解していますか? –

答えて

1

代わりに新しいARRAY [*]機能を使用することもできますが、まだ非常に限られています。ライブラリに定数を定義する以外の方法はありません。

ライブラリの概念は他の環境と同じです。ライブラリは再利用可能なコンポーネントを提供します。主なプロジェクトは図書館に依存し、それ以外の方法ではありません。したがって、あなたの図書館は、それが使用されているプロジェクトに関するものを知ることができません。

TwinCat3の混乱は、プログラミングエラーで成功したプロジェクトを内部で構築できるということです。 TwinCat3コンパイラは、呼び出されない限り、プロジェクト内で壊れたコードを許可します。したがって、ライブラリを発送する場合は、常に「すべてのオブジェクトをチェック」を使用する必要があります。

0

以下のリンク(およびBeckhoff/Infosys、DataTypes/Arrayのセクション)で説明されているように、可変長ARRAY [*]を使用することをお勧めします。

主なプログラム(アナログライブラリからFB_AnalogIOを知っており、一定のサイズで宣言できます)にFB_AnalogIOのARRAY [1..cains]を宣言する必要があります。

PRG_IOは、正確なサイズを知らずにARRAY [*]をVAR_IN_OUTとして受け入れるように、ファンクションブロックまたはファンクションブロックに変更する必要があります。

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

+0

ありがとうございます!私はそのような特徴を知らなかった。それを悪く見てください。 –

0

あなたはParameter Listと呼ばれるのBeckhoffの機能を確認する必要があります。パラメータリストをライブラリプロジェクトに追加することにより、ライブラリを使用するプロジェクトでライブラリ定数を再定義することができます。定義はライブラリマネージャで行われます。 Beckhoff社のサイトから

画像: enter image description here

私はそれを行うべきだと思います。もちろん、もう1つのオプションはARRAY[*]オプションを使用することです(これはPLCプログラミングの世界にとってもすばらしいことです)。パラメータリストの問題は、それがプロジェクト全体の再定義であることです。 ARRAY[*]を使用すると、サイズを動的に変更できます。

関連する問題