Recipes機能を使用することにより 、コントローラー上の特定の変数の一連の値(Recipes定義)を同時に変更または読み出すことができます。
Recipesの基本設定(保存場所やフォーマットなど)は、Recipe Managerで定義されます。このオブジェクトの下に、複数のレシピ定義ができます。さらに、Recipes定義には、それに含まれる変数の1つ以上のRecipesが含まれます。Recipesは、特定の変数の値から構成されます。Recipesはファイルに保存したり、ファイルから直接コントローラーに書き込んだりすることができます。
Recipesは、TwinCATプログラミングインターフェース、可視化要素、またはアプリケーションプログラムを介してロードすることができますが、TwinCATのHPによると、
アプリケーションプログラムでRecipesを使用する場合は、低い優先度を持つ独自のタスクを介してこのプログラムセクションを呼び出すことを勧めます。
Implementation
Add Recipe Manager
TwinCATプロジェクトからRecipe Manager を追加します。プロジェクト右クリック>Add>Recipe ManagerでRecipe Managerをクリックします。
Openで進みます。
Done!Recipe Managerが追加されました。
Configure The Recipe Manager
次はRecipe Managerを設定します。
Storage Type
Recipe はどんな形で保存するかを設定します。
- text-based: TwinCATは、設定されたFormatを使用して、人間が読みやすい形式でレシピを保存します。
- binary: TwinCATは、読み取り不可能なバイナリ形式でレシピを保存します。この形式では、メモリ容量が少なくて済みます。
File Path
こちらはRuntime system上の相対パスを設定します。
このパスは、ターゲットシステム上のランタイムファイルのディレクトリに作成されます。TwinCATは、コントローラへのダウンロード時に、このディレクトリに各レシピのファイルを作成します。ファイルは、PLCプロジェクトが再起動するたびに、レシピマネージャにロードされます。
File Pathを設定するためにFile Pathの隣りにある…ボタンをクリックしましょう。
保存先を設定してください。
Done!今回はDesktopのMyData というFolderに設定しました。
File Extension
レシピファイルのファイル拡張子になります。
下記の設定では、レシピファイルの標準的な名前は <Recipe>.<Recipe definition>.<File extension>のようなFormatです。
次はRecipe内に必要な項目を設定していきましょう。
>、<のボタンから必要なColumnsを移動できます。
今回はVariables・Current Value・Type・Nameその4つのColumnsをRecipeの中に格納するようにしましょう。
General
次はGeneralのTabを開いてみましょう。
ここでレシピの自動保存や書き込むの与えがレシピのRangeより越えたときの操作などを設定できます。
Save
最後はSave as defaultで設定を保存しましょう。
Add Recipe Definition
Recipe Managerを追加したら次はRecipe Definitionを挿入します。そのRecipe Definitionはあなたのレシビにどんな要素があるかを定義するんです。
例えば、ビールでは水・麦・ホップ3つの原材料ですが、ビールAなら水・麦・ホップこの量で、期間限定のビールはまた別の量などだとイメージしやすいと思います。
Recipe Manager右クリック>Recipe Definitionを作成します。
レシピ名を設定しましょう。
Done!これはあなたの初めてのRecipe です。
Define GVL
TwinCATプロジェクトにレシピ用の変数を追加します。
Add Variables
次はRecipe に変数を追加するため…のボタンをクリックします。
先程GVLで定義した変数を選びましょう。
Done!
同じの操作でGVL内の変数を全部追加していきましょう。
Add Some Complex
TwinCATのRecipe Managerに追加できるRecipe 変数は標準のデータタイプだけですか?違います!構造体と配列も可能です。
まずプロジェクト内に構造体を追加してみます。
GVL内に構造体の配列を定義します。
先程のRecipe DefinitionからmySTDataの変数だけを選び、Okで確定しましょう。
Done!すべての変数も自動的に追加されました。
Library
実際は手動でライブラリをImportする必要がありませんが、Recipe Definitionをプロジェクトに追加するときにReferencesから自動的RecipeManagementライブラリが追加されます。今回の記事ではプログラムに実際使用した3つmethodを紹介します。
中にレシピ操作に必要なFunction Blockが含まれています。
Method CreateRecipe
このメソッドは指定されたレシピ定義で新しいレシピを作成します。その後、現在の PLC 値を新しいレシピに読み込み、標準的な名前のレシピファイルとして保存します。標準名は <Recipe>.<Recipe definition>.<Recipe extension>。
VAR_INPUT
Name | Data type | Description |
RecipeDefinitionName | STRING | レシピ定義の名前 |
RecipeName | STRING | レシピ名 |
Return value
Name | Data type | Description |
CreateRecipe | DWORD | ERR_RECIPE_DEFINITION_NOT_FOUNDERR_RECIPE_ALREADY_EXISTERR_RECIPE_NOMEMORYERR_NO_RECIPE_MANAGER_SETERR_OK |
Method ReadAndSaveRecipe
このメソッドは現在の PLC 値をレシピに読み込み、レシピを標準的な名前のレシピファイルに保存します。標準名は<Recipe>.<Recipe definition>.<Recipe extension> です。注意するのは既存のファイルの内容は上書きされます。
VAR_INPUT
Name | Data type | Description |
RecipeDefinitionName | STRING | レシピ定義の名前 |
RecipeName | STRING | レシピ名 |
Return value
Name | Data type | Description |
ReadAndSaveRecipe | DWORD | ERR_RECIPE_DEFINITION_NOT_FOUNDERR_RECIPE_NOT_FOUNDERR_RECIPE_SAVE_ERRERR_NO_RECIPE_MANAGER_SETERR_OK |
Program
PROGRAM MAIN VAR RecipeManCommands:RecipeManCommands; MyRecipeName :STRING:=’MyRecipes’; MyRecipeFile :STRING:=’MyRecipesFile’; R_TRIG_CreateReciple :R_TRIG; bCreateReciple :BOOL; w32CreateRciple :DWORD; R_TRIG_SaveReciple :R_TRIG; bSaveReciple :BOOL; w32SaveRciple :DWORD; R_TRIG_ReadReciple :R_TRIG; bReadReciple :BOOL; w32ReadRciple :DWORD; END_VAR R_TRIG_CreateReciple(CLK:=bCreateReciple); R_TRIG_SaveReciple(CLK:=bSaveReciple); R_TRIG_ReadReciple(CLK:=bReadReciple); IF R_TRIG_CreateReciple.Q THEN RecipeManCommands.CreateRecipe( RecipeDefinitionName:=MyRecipeName ,RecipeName:=MyRecipeFile ); END_IF IF R_TRIG_SaveReciple.Q THEN RecipeManCommands.ReadAndSaveRecipe( RecipeDefinitionName:=MyRecipeName ,RecipeName:=MyRecipeFile ); END_IF IF R_TRIG_ReadReciple.Q THEN RecipeManCommands.LoadAndWriteRecipe( RecipeDefinitionName:=MyRecipeName ,RecipeName:=MyRecipeFile ); END_IF |
Screen
こちらは操作画面になります。
Result
プログラムから直接bCreateRecipleをTrueにすると、MyDataのFolderも自動的にMyRecipesFileというFileが作成されます。
Nodepadを開いたらRecipe の要素も全部格納されています。
今度は画面から操作してみます。レシピ名をR123に設定し、CreateボタンをクリックしレシピFileを作成します。
Done!R123というRecipe Fileが生成されました。
画面にRecipe の要素をいくつかを変更し、SaveボタンをクリックしてRecipe を保存します。
Done!R123 レシピFileの要素の値も反映しました。
最後はレシピ名を別のFileに指定しLoadボタンをクリックし別のレシピを読み込んでみました。
Download
下記のLinkからサンプルプロジェクトをDownloadしてください。
https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT3_RecipleManager.7z