Skip to content

yunos0987/jiecunit

Repository files navigation

JiecUnit

JiecUnit

目次

概要

JiecUnitは、テキスト形式で記述されたIEC 61131-3言語のPOUを単体テストするためのフレームワークです。

特徴は、テスト対象POUのソースコード、単体テストコード、JiecUnit自体のソースコードがすべてIEC 61131-3 ST言語を拡張したテキスト形式で完結している点です。これにより、Git等で直接構成管理が可能です。Visual Studio Codeなどの対応IDEによっては生成AIを活用したIEC 61131-3プログラミングも可能です。

このテキスト形式コードをPLCメーカーのツールで取り込み可能な形式に変換するため、IEC 61131-3 ⇄ IEC 61131-10変換ソフトウェア Jieccを使用します。

JiecUnitは現在、IEC 61131-10 XMLをサポートする以下の環境に対応しています。

必要環境

JiecUnitのサンプル単体テストを実行するには、以下の環境が必要です。

  • Jiecc 5.14以降
  • Sysmac Studio(試用期間制限あり)、KV Studio(試用回数制限あり)、またはCODESYS
    • いずれも同梱シミュレータでテスト可能。必要に応じてPLC本体もご用意ください。

単体テストのサンプルの実行方法

まず、JiecUnitプロジェクトをダウンロードします。mainブランチのDownload ZIPで取得するか、git clone https://github.com/yunos0987/jiecunit.gitでクローンしてください。

JiecUnitプロジェクトには、単体テスト実行可能なサンプルがsamplesディレクトリにあります。samples/sample_pous.iecには、テスト対象POUとして以下2つが含まれます。

  • meanファンクション:配列入力の平均値を計算
  • RunningMeanファンクションブロック:状態を記憶し逐次平均値を出力

samples/sample.iecには、上記POUをテストする2つのテストプログラムtest_meantest_RunningMeanが含まれています。

テストサンプルの実行方法は環境ごとに異なります。

オムロン社製Sysmac Studioの場合の単体テストサンプルの実行方法

  1. コマンドプロンプトを起動し、次のコマンドを実行します。

コマンド内の<JiecUnit Project Root>はJiecUnitプロジェクトをダウンロードしたディレクトリに変更してください。また、事前にjiecc.exeを<JiecUnit Project Root>直下におくか、jieccがあるディレクトリへパスを通しておいてください。

$ cd <JiecUnit Project Root>
$ jiecc .\samples\sample.iec -I. -I.\sys -t omron -o .\samples\sample.xml

.\samples\sample.xmlが出力されます。

  1. 出力された.\samples\sample.xmlをSysmac StudioのIEC 61131-10インポート機能 [ ツール | IEC 61131-10 XML | インポート ] でインポートします。

単体テストを実行するためのグローバル変数、データ型、およびPOUがインポートされます。インポート完了後に次のダイアログが表示されるので、OKを押下します。

インポート完了ダイアログ

  1. Sysmac Studioのタスク設定でプライマリ定周期タスクに以下のようにプログラムを割り付けます(マルチビューエクスプローラ|構成・設定|タスク設定|プログラムの割付設定|)。必要に応じて、デフォルトで作成されるProgram0プログラムを削除してください。特に、JiecUnitMainが先頭になるように設定してください。
  • JiecUnitMain
  • test_mean
  • test_RunningMean

プログラムの割付設定

  1. ビルド(F8キー)し、シミュレータ(F5キー)や実機で実行します。
  2. テストの実行結果がグローバル変数g_consoleに出力されます。

テスト実行ログ

2つのテストtest_meantest_RunningMeanが実行され、テストをパス(成功)したことを意味します。

以下は、テストが失敗したときの例です。テストtest_RunningMeanのテストコード57行目の3サイクル目(@2)において、期待値は5であったが、実値は3となり、失敗したことを意味します。

57行目という数字は、XMLにコンバートする前のテキストの行番号です。これをSysmac Studio上のtest_RunningMeanの行数で表示するテクニックは、Jieccソフトウェアの機能を活用します。ここでは、深く述べません。

テスト実行NGログ

キーエンス社製KV Studioの場合の単体テストサンプルの実行方法

  1. コマンドプロンプトを起動し、次のコマンドを実行します。

コマンド内の<JiecUnit Project Root>はJiecUnitプロジェクトをダウンロードしたディレクトリに変更してください。また、事前にjiecc.exeを<JiecUnit Project Root>直下におくか、jieccがあるディレクトリへパスを通しておいてください。

$ cd <JiecUnit Project Root>
$ jiecc .\samples\sample.iec -I. -I.\sys -t keyence -o .\samples\sample.xml

.\samples\sample.xmlが出力されます。

  1. 出力された.\samples\sample.xmlをKV StudioのIEC 61131-10インポート機能 [ ファイル | インポート | IEC 61131-10 XMLのインポート ] でインポートします。

単体テストを実行するためのグローバル変数、データ型、およびPOUがインポートされます。インポート完了後に次のダイアログが表示されるので、OKを押下します。

インポート完了ダイアログ

  1. KV Studioのワークスペースにおいて、毎スキャンモジュールが次のようになっていることを確認します。必要に応じて、デフォルトで作成されるMainモジュールを削除してください。特にJiecUnitMainが先頭になっていることを確認してください。
  • JiecUnitMain
  • test_mean
  • test_RunningMean

毎スキャンモジュール

  1. 変換(Ctrl+F9キー)し、シミュレータ(Ctrl+F2キー)や実機で実行(シミュレータの場合、[ デバッグ | RUN ])します。
  2. テストの実行結果がグローバル変数g_consoleに出力されます。

テスト実行ログ

2つのテストtest_meantest_RunningMeanが実行され、テストをパス(成功)したことを意味します。

以下は、テストが失敗したときの例です。テストtest_RunningMeanのテストコード56行目の3サイクル目(@2)において、期待値は5であったが、実値は3となり、失敗したことを意味します。

56行目という数字は、XMLにコンバートする前のテキストの行番号です。これをKV Studio上のtest_RunningMeanの行数で表示するテクニックは、Jieccソフトウェアの機能を活用します。ここでは、深く述べません。

テスト実行NGログ

CODESYS社製CODESYSの場合の単体テストサンプルの実行方法

事前にCODESYSのIEC 61131-10のインポート機能を有効化しておいてください。

  1. コマンドプロンプトを起動し、次のコマンドを実行します。

コマンド内の<JiecUnit Project Root>はJiecUnitプロジェクトをダウンロードしたディレクトリに変更してください。また、事前にjiecc.exeを<JiecUnit Project Root>直下におくか、jieccがあるディレクトリへパスを通しておいてください。

$ cd <JiecUnit Project Root>
$ jiecc .\samples\sample.iec -I. -I.\sys -t codesys -o .\samples\sample.xml

.\samples\sample.xmlが出力されます。

  1. CODESYSにてNew ProjectにてEmpty projectを作成し、出力された.\samples\sample.xmlをCODESYSのIEC 61131-10インポート機能 [File | Import IEC 61131-10] でインポートします。

インポートダイアログが表示されます。

インポートダイアログ

  1. OKボタンを押下します。

単体テストを実行するためのコンフィグレーション、リソース、グローバル変数、データ型、POUがインポートされます。

  1. CODESYSのDevices画面において、インポートされたMainConfigurationを右クリックし、Update Device...から適切なデバイスを設定します。

  2. POUs画面において、以下画像の通りにオブジェクトを選択し(Project Settings以外を選択し)、Devices画面のMainResourceにドラッグ&ドロップします。

POUs画面

MainResouce下にオブジェクトが移動されます。

Devices画面

  1. Devices画面において、MainResourceを右クリックし、Add Object | Task Configuration... し、追加されたTask Configurationを次のように設定します。特にJiecUnitMainが先頭になっていることを確認してください。
  • JiecUnitMain
  • test_mean
  • test_RunningMean

タスク構成

  1. Devices画面のLibrary Managerを選択し、AddLibraryを選択し、次の画面のようにStandard LibraryのCONCATを選択した状態にし、OKボタンを押下します。

標準ライブラリの追加

Standardライブラリが追加されます。

  1. Generate Code(F11キー)すると、「C0174: VAR_TEMP declaration not allowed in this place」エラーが複数出力されますので、Replaceダイアログで次のように設定し、Replace Allボタンを押下します。

Replaceダイアログ

ソースコード内のすべてのVAR_TEMPVARに置換されます。

  1. Generate Code(F11キー)し、成功することを確認します。シミュレーションや実機で実行(シミュレーションの場合、[ Debug | F5 ])します。

  2. テストの実行結果がグローバル変数g_consoleに出力されます。

テスト実行ログ

2つのテストtest_meantest_RunningMeanが実行され、テストをパス(成功)したことを意味します。

以下は、テストが失敗したときの例です。テストtest_RunningMeanのテストコード58行目の3サイクル目(@2)において、期待値は5.0であったが、実値は3.0となり、失敗したことを意味します。

58行目という数字は、XMLにコンバートする前のテキストの行番号です。これをCODESYS上のtest_RunningMeanの行数で表示するテクニックは、Jieccソフトウェアの機能を活用します。ここでは、深く述べません。

テスト実行NGログ

JiecUnit開発者向け

リポジトリ構成

  • jiecunit.iec:JiecUnitユーザが使用すべき公開API。テスト記述用のマクロや関数群を定義。
  • docsディレクトリ:補助資料(各種画像、説明図、メーカー別手順、技術資料など)を格納。
  • samplesディレクトリ:JiecUnitの使い方サンプル。テスト対象POU(sample_pous.iec)とテストコード(sample.iec)を含む。
  • srcディレクトリ:JiecUnit本体のソースコード。コア機能、テスト実行エンジン、設定ファイルなど。
  • sysディレクトリ:JiecUnitの動作に必要な補助的コード。型変換ファンクション、コンソール出力、メーカー依存の補助関数など。
  • testディレクトリ:JiecUnit自体の単体テストコード。各種マクロ・内部関数の動作検証用テストファイル(test_jiectest.iec等)を含む。
  • checkディレクトリ:テスト結果(XMLファイル等)の出力先。テスト実行時に生成される成果物を格納。
  • wsディレクトリ:作業用・バックアップ用ディレクトリ。履歴管理や一時保存に利用。
  • README.md:本ドキュメント。使い方・構成・サポート状況などを記載。
  • LICENSE:ライセンス情報。
  • VERSION:バージョン管理用ファイル。
  • VERSION_MANAGEMENT.md:バージョン管理の運用ルールや履歴。

JiecUnitのテスト方法

ターゲットの環境ごとに以下のコマンドを実行し、上述と同じ手順を実行します。

$ cd <JiecUnit Project Root>
$ mkdir check
$ cd check
$ jiecc -I.. -I..\sys ..\test\test.iec -o .\test.xml -t omron
or
$ jiecc -I.. -I..\sys ..\test\test.iec -o .\test.xml -t keyence
or
$ jiecc -I.. -I..\sys ..\test\test.iec -o .\test.xml -t codesys

各メーカーのIEC 61131-3言語サポート状況

項目 OM (Sysmac) KE (KV) CO (CODESYS)
データ型 SINT
データ型 INT
データ型 DINT
データ型 LINT
データ型 USINT
データ型 UINT
データ型 UDINT
データ型 ULINT
データ型 REAL
データ型 LREAL
データ型 BYTE
データ型 WORD
データ型 DWORD
データ型 LWORD
データ型 TIME
データ型 BOOL
データ型 DATE
データ型 TIME_OF_DAY
データ型 DATE_AND_TIME
データ型 STRING
データ型 WSTRING
構造体
FB
配列

ライセンス

このプロジェクトはMIT Licenseのもとで公開されています。詳細はLICENSEファイルをご参照ください。

その他の情報

Graviness Blogもご参照ください。

About

Unit testing framework for IEC 61131-3

Resources

License

Stars

3 stars

Watchers

2 watching

Forks

Packages

 
 
 

Contributors