PLCnext CLI テンプレート
この記事は、PLCnext CLI バージョン 22.0.0 LTS に適用されます。
C++ を使用して PLCnext Control デバイスをプログラムする場合、おそらく PLCnext CLI でインストールされたコード テンプレートを使用したことがあるでしょう。
Visual Studio と Eclipse では、PLCnext プロジェクト ウィザード (PLCnext IDE 拡張機能と共にインストールされる) で新しいプロジェクトを作成するときに使用するプロジェクト テンプレートを選択する必要があります。
PLCnext CLI を使用してコマンドラインで新しい C++ プロジェクトを生成する場合、プロジェクト テンプレートも指定する必要があります。
3 つのデフォルト プロジェクト テンプレートは次のとおりです。
project The project is a template for user programs.
They are managed by the PLM (Program Library Manager).
acfproject The acfproject is a template for component based platform development.
The resulting component will be managed by the ACF
(Application Component Framework).
consumablelibrary The consumable library is a template, that creates a library
which can be used by other projects.
上記の情報は、plcncli new
を実行することで確認できます。 指図。これらのタイプのプロジェクトの詳細については、PLCnext Info Center をご覧ください:
- ACF と PLM の境界
- 共有ライブラリの作成と使用
この記事では、PLCnext CLI でインストールされる追加のプロジェクト テンプレートを有効にして使用する方法、および独自のプロジェクト テンプレートを作成して使用する方法について説明します。
しかし、最初に、PLCnext CLI テンプレート システムがどのように機能するかを見てみましょう。
PLCnext CLI テンプレート システム
PLCnext CLI には、TemplateLocations
というデフォルト設定が含まれています。 、コード テンプレートの場所を示します。この設定の値は、次のコマンドで確認できます:
user@machine:~$ plcncli get setting TemplateLocations
{
"setting": {
"TemplateLocations": "./Templates/Templates.xml"
}
}
xml ファイルへのパスは、plcncli
に対する相対パスです。 インストール パス。
./Templates
をブラウズすると ディレクトリ、Templates.xml
が表示されます ファイル、およびいくつかのサブディレクトリ。
Templates.xml
の内容の一覧表示 ファイル ...
user@machine:~/plcncli/Templates$ cat Templates.xml
<?xml version="1.0" encoding="utf-8"?>
<Templates xmlns="http://www.phoenixcontact.com/schema/clitemplates">
<Include type="Template">ProjectTemplate/TemplateDescription.xml</Include>
<Include type="Template">ProgramTemplate/TemplateDescription.xml</Include>
<Include type="Format">ProjectTemplate/FormatTemplates.xml</Include>
<Include type="Template">ComponentTemplate/TemplateDescription.xml</Include>
<Include type="Template">BaseTemplates/BaseTemplateDescription.xml</Include>
<Include type="Template">BaseTemplates/CodeTemplateDescription.xml</Include>
<Include type="Fields">BaseTemplates/FieldTemplates.xml</Include>
<Include type="Types">BaseTemplates/TypeTemplates.xml</Include>
<Include type="Format">BaseTemplates/FormatTemplates.xml</Include>
<Include type="Template">AcfProjectTemplate/TemplateDescription.xml</Include>
<Include type="Template">BaseProjectTemplate/TemplateDescription.xml</Include>
<Include type="Template">AcfComponentTemplate/TemplateDescription.xml</Include>
<Include type="Template">BaseComponentTemplate/TemplateDescription.xml</Include>
<Include type="Template">ConsumableLibraryTemplate/TemplateDescription.xml</Include>
</Templates>
... TemplateDescription.xml
への参照があることがわかります Templates
の下のディレクトリにあるさまざまな種類のファイル ディレクトリ。これらには、そのテンプレートが使用されたときに何をすべきかを PLCnext CLI に伝える指示が含まれています。
上記のテンプレート記述ファイルは、既に使い慣れた 3 つのデフォルト プロジェクト テンプレートを実装しています。
追加のテンプレートを有効にする方法
PLCnext CLI とともにデフォルトでインストールされる「隠し」プロジェクト テンプレートが 1 つありますが、これはデフォルトでは使用できません:
minimumproject This is the same as acfproject, but without the capability to create
Port variables in the Global Data Space.
MinimalAcfTemplates.xml
を追加することで、このテンプレートを PLCnext CLI で利用できるようにすることができます。 ファイル - Templates
ですでに気づいているかもしれません ディレクトリ - テンプレートの場所の設定へ:
user@machine:~$ plcncli set setting TemplateLocations ./Templates/MinimalAcfTemplates.xml --add
新しい XML ファイルがテンプレートの場所に追加されました:
user@machine:~$ plcncli get setting TemplateLocations
{
"setting": {
"TemplateLocations": "./Templates/Templates.xml;./Templates/MinimalAcfTemplates.xml"
}
}
...そして plcncli new
コマンドが実行されます、minimumproject
オプションのリストに表示されるようになりました。このテンプレートを使用して、コマンド ラインから新しい C++ プロジェクトを作成できるようになりました。
注: プロジェクト テンプレートを PLCnext CLI に追加しても、プロジェクト テンプレートが Visual Studio または Eclipse プロジェクト ウィザードに自動的に追加されるわけではありません。
独自の PLCnext CLI テンプレートを作成する方法
カスタム PLCnext CLI テンプレートの作成は、簡単な例を使用して実演されます。 「Hello World!」を生成する PLCnext CLI テンプレートが作成されます。 C++ のコンソール アプリケーション。
手順は次のとおりです。
<オール>新しい PLCnext CLI プロジェクト テンプレートのディレクトリを作成します。
Linux の場合:
user@machine:~/plcncli/Templates$ mkdir ExeTemplate && cd ExeTemplate
テンプレート C++ コードを含むファイルを作成します。このファイルは、このタイプのすべての新しいプロジェクトの開始点として使用できます。
user@machine:~/plcncli/Templates/ExeTemplate$ touch Main.cpp
この例で使用されている C++ コードは次のとおりです。
#include
int main() {
std::cout << "Hello World!" << std::endl;
return 0;
}
テンプレート cmake ソース ファイルを作成します。
user@machine:~/plcncli/Templates/ExeTemplate$ touch CMakeLists.txt
この例で使用される CMake コードは次のとおりです:
cmake_minimum_required(VERSION 3.13)
project($(name))
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
################# create target #######################################################
file(GLOB_RECURSE Headers CONFIGURE_DEPENDS src/*.h src/*.hpp src/*.hxx)
file(GLOB_RECURSE Sources CONFIGURE_DEPENDS src/*.cpp)
add_executable(${CMAKE_PROJECT_NAME} ${Headers} ${Sources})
#######################################################################################
################# set install directories #############################################
string(REGEX REPLACE "^.*\\(([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*$" "\\1" _ARP_SHORT_DEVICE_VERSION ${ARP_DEVICE_VERSION})
set(BIN_INSTALL_DIR ${ARP_DEVICE}_${_ARP_SHORT_DEVICE_VERSION}/${CMAKE_BUILD_TYPE})
#######################################################################################
################# project include-paths ###############################################
target_include_directories(${CMAKE_PROJECT_NAME}
PRIVATE
$)
#######################################################################################
################# include arp cmake module path #######################################
list(INSERT CMAKE_MODULE_PATH 0 "${ARP_TOOLCHAIN_CMAKE_MODULE_PATH}")
#######################################################################################
################# set link options ####################################################
# WARNING: Without --no-undefined the linker will not check, whether all necessary #
# libraries are linked. When a library which is necessary is not linked, #
# the firmware will crash and there will be NO indication why it crashed. #
#######################################################################################
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE LINKER:--no-undefined)
#######################################################################################
################# add link targets ####################################################
find_package(ArpDevice REQUIRED)
find_package(ArpProgramming REQUIRED)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ArpDevice ArpProgramming)
#######################################################################################
################# install #############################################################
install(TARGETS ${CMAKE_PROJECT_NAME} RUNTIME DESTINATION ${BIN_INSTALL_DIR})
unset(_ARP_SHORT_DEVICE_VERSION)
#######################################################################################
CMake コードにはプレースホルダー $(name)
が含まれていることに注意してください。 plcncli new
に渡されるプロジェクトの名前に置き換えられます。 コマンド。
オプション:README ファイルを新しいテンプレート ディレクトリに追加します。これは、このテンプレートから作成された新しいプロジェクトごとに README ファイルを作成するためにも使用できます。
PLCnext CLI プロジェクト構成ファイルを作成します。
このファイルは、PLCnext CLI のプロジェクト構成情報を保存するために使用されます。プロジェクトをビルドするターゲットのリスト。
この例では、.proj
ファイルは ConsumableLibraryTemplate
からコピーされました ディレクトリを編集して、以下を生成します:
<?xml version="1.0" encoding="utf-8"?>
<ProjectSettings xmlns="http://www.phoenixcontact.com/schema/cliproject">
<Type>exeproject</Type>
<Version>0.1</Version>
<Name>$(name)</Name>
</ProjectSettings>
Type
フィールドには、このプロジェクト テンプレートの一意の名前が含まれている必要があります。これは、次のステップでテンプレート記述ファイルにも含まれます。
Name
フィールドにはプレースホルダー $(name)
が含まれます これは、新しいプロジェクトを作成するたびにプロジェクト名に置き換えられます。
テンプレート記述ファイルを作成します。
この例では、TemplateDescription.xml
ファイルは ConsumableLibraryTemplate
からコピーされました ディレクトリを編集して、以下を生成します:
<?xml version="1.0" encoding="utf-8"?>
<TemplateDescription name="exeproject" isRoot="true" basedOn="baseproject" supportedFirmwareVersions="19.0.0.16199" requiredCliVersion="19.0.0.660" version="1.0"
xmlns="http://www.phoenixcontact.com/schema/clitemplates" identifier="ProjectSettingsIdentifier">
<File name="plcnext.proj" template=".proj"/>
<File name="CMakeLists.txt" template="CMakeLists.txt"/>
<File name="README.md" template="README.md"/>
<File name="$(name)Main.cpp" template="Main.cpp" path="src"/>
<Description>Create a new stand-alone executable project.</Description>
<Example>
<Arguments>
<Argument name="name" value="MyExe"/>
</Arguments>
<Description>creates a new stand-alone executable project in the directory 'MyExe'</Description>
</Example>
</TemplateDescription>
テンプレートの説明には次のフィールドが含まれます:
name="exeproject"
:コマンドplcncli new exeproject
を使用して、このテンプレートからプロジェクトを作成できるようにします .File name="A" template="B" path="C"
:指定したテンプレート ファイルに基づいて、指定したパスの新しいプロジェクトにファイルを作成します。ファイル名には、$(name)
のようなプレースホルダーを含めることもできます 。これは、新しいプロジェクトを作成するたびにプロジェクト名に置き換えられます。Description
とExample
plcncli
の関連セクションに表示されるフィールド ヘルプ システム。
新しいテンプレート ファイルを作成します。これは、新しいテンプレートについて PLCnext CLI に伝えるために使用されます。
この例では、MinimalAcfTemplates.xml
Templates
のファイル ディレクトリは CustomTemplates.xml
という名前のファイルにコピーされました であり、そのファイルは次のように編集されました:
<?xml version="1.0" encoding="utf-8"?>
<Templates xmlns="http://www.phoenixcontact.com/schema/clitemplates">
<Include type="Template">ExeTemplate/TemplateDescription.xml</Include>
</Templates>
カスタム テンプレートを PLCnext CLI に登録します
user@machine:~$ plcncli set setting TemplateLocations ./Templates/CustomTemplates.xml --add
パスは、PLCnext CLI インストール ディレクトリに対する相対パスです。
試してみてください!
次の bash コマンドのリストは、新しいテンプレートの機能を示しています:
plcncli new # The help text includes the new template and description
plcncli new exeproject --help # Displays the example showing how to use this template
plcncli new exeproject --name "HelloWorld" # Creates a new project based on the template
cd HelloWorld
plcncli set target -n AXCF2152 -v 2022 --add # Sets the build target
plcncli build # Builds the project with the default template code
scp bin/AXCF2152_22.0.3.129/Release/HelloWorld [email protected]:~ # Copies the executable to the device
ssh [email protected]
./HelloWorld # Runs the executable!
貢献する
将来的には、Github の PLCnext CLI Templates プロジェクトへのコントリビューションが可能になる予定です。それまでは、新しいテンプレートのアイデア、または自分で作成したテンプレートの例について問題を開くことができます。
質問またはコメント?
以下にコメントを投稿するか、PLCnext コミュニティ フォーラムで質問してください。
産業技術