0

私はオブジェクトの配列を持っています。オブジェクトとしましょうMyArray[1..x]

プログラミングするとき、各オブジェクトをより「読みやすい」方法でアドレス指定したいと考えています。と言う代わりにMyArray[1] := ...etc。言いたいMyReadableName :=...

私は参照を調べましたが、ポインター全体について少し心配しています。どうすれば良い方法でこれを行い、オンライン変更をサポートできますか? また、参照の宣言と割り当てをどこに配置すればよいでしょうか。それは何百もの可能性があり、オンライン モードのときにメイン VAR ウィンドウを乱雑にしたくないですか?

私が見たもう1つのことは、読み取り可能な名前を持つ列挙型を持ち、これを配列へのインデックスとして使用することです。ルックアップは次のとおりですMyArray[Enum.MyReadableName] :=..。しかし、それが良い解決策かどうかはわかりません。

解決策やヒントは大歓迎です!ありがとう!

4

1 に答える 1

0

これについては、考えられるすべての方法について既に説明しました。

ポインター

それらを心配する必要はありません。ポインターは IEC-61131 の一部ではないため、その実装はメーカーによって異なります。使用している IDE と配列要素の構造について言及しておくとよいでしょう。

このようなタスクを処理する最善の方法は、ACTION を作成し、そこですべての変数を配列にマップするか、配列からマップすることです。このタスクを PLC ロード時に 1 回だけ実行し、このアクションをマッピングと呼びます。

VAR
    aA: ARRAY [1..2] OF StructureName;
    stMyName1: POINTER TO StructureName;
    stMyName2: POINTER TO StructureName;
    xInit: BOOL;
END_VAR

ACTION actMap
    stMyName1 := ADR(aA[1]);
    stMyName2 := ADR(aA[2]);
END_ACTION

IF NOT xInit THEN
    actMap();
    xInit := TRUE;
END_IF

しかし通常、IDE アクションはACTIONキーワードではなく別の方法で作成されます。Codesys では、POU を右クリックします。

それは最も論理的な方法であるため、ポインターを使用します。アプリケーションのセットアップにはもう少し必要ですが、後でコーディングする時間を節約できます。

列挙

これはあなたが説明したとおりです。Codesys では、#likeを使用する必要がありますColor#red。ただし、名前を一意にすると、列挙の名前なしで使用できます。さらに、配列の名前を短くすると、 のように有益に見えますa[MyArrayName]

于 2018-04-18T05:50:44.513 に答える