(57)【要約】【課題】複数の演算装置が各制御タスクを実行することでシステムを制御するときに、各制御タスクの負荷変動に対しても別の演算装置への再割当てを抑制すること。【解決手段】割当装置１は、システムを制御するための各制御タスクの処理量について、現在の処理量から処理量の変動データをもとに将来の処理量を計算する処理負荷計算部２１と、各制御タスクの将来の処理量と、各制御タスクの割当先である複数の演算装置の処理能力との制約条件を満たすように、各制御タスクの割当先である演算装置を決定するパターン決定部４１と、を有する。例えば、処理負荷計算部２１は、各演算装置における将来の処理負荷率を、将来の処理量として計算する。【選択図】  図１
2019012456.tif 000002
【特許請求の範囲】
【請求項１】
システムを制御するための各制御タスクの処理量について、現在の処理量から処理量の変動データをもとに将来の処理量を計算する処理量計算部と、
前記各制御タスクの前記将来の処理量と、前記各制御タスクの割当先である複数の演算装置の処理能力との制約条件を満たすように、前記各制御タスクの割当先である前記演算装置を決定する割当先決定部と、を有することを特徴とする
タスク割当て装置。
【請求項２】
前記処理量計算部は、前記各演算装置における将来の処理負荷率を、前記将来の処理量として計算し、
前記割当先決定部は、前記各演算装置における前記将来の処理負荷率が、前記各演算装置の処理能力の範囲内になる旨の前記制約条件を満たすように、前記各制御タスクの割当先である前記演算装置を決定することを特徴とする
請求項１に記載のタスク割当て装置。
【請求項３】
前記割当先決定部は、前記制約条件を満たす範囲内で、現在の処理負荷率から前記将来の処理負荷率までの変化量が大きい前記制御タスクほど、割り当ててある前記制御タスクの処理負荷率が小さい前記演算装置に割り当てるように、割当先である前記演算装置を決定することを特徴とする
請求項２に記載のタスク割当て装置。
【請求項４】
前記処理量計算部は、前記システムで計測された所定のセンサデータを処理するために複数の前記制御タスクにまたがって実行される同期型処理について、前記各制御タスクでの処理時間が前記処理量の変動データにより更新された状態での将来の応答時間を、前記将来の処理量として計算し、
前記割当先決定部は、計算された前記将来の応答時間が、前記システムを制御するために事前に設定された応答時間の上限値の範囲内になる旨の前記制約条件を満たすように、前記各制御タスクの割当先である前記演算装置を決定することを特徴とする
請求項１に記載のタスク割当て装置。
【請求項５】
前記割当先決定部は、前記制約条件を満たす範囲内で、同期型処理に対する現在の応答時間から前記将来の応答時間までの変化量が小さくなるように、割当先である前記演算装置を決定することを特徴とする
請求項４に記載のタスク割当て装置。
【請求項６】
タスク割当て装置は、処理量計算部と、割当先決定部と、を有しており、
前記処理量計算部は、システムを制御するための各制御タスクの処理量について、現在の処理量から処理量の変動データをもとに将来の処理量を計算し、
前記割当先決定部は、前記各制御タスクの前記将来の処理量と、前記各制御タスクの割当先である複数の演算装置の処理能力との制約条件を満たすように、前記各制御タスクの割当先である前記演算装置を決定することを特徴とする
タスク割当て方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タスク割当て装置、および、タスク割当て方法に関する。
【背景技術】
【０００２】
自動車、鉄道車両、船舶、建設機械、エレベータなどの技術分野では、いわゆる組込みソフトウェアによって制御対象を制御するＥＣＵ（Electronic Control Unit）が用いられている。組込みソフトウェアは、従来の機械的機構や電気回路による方式に比べて柔軟かつ高度な制御が実現できることが利点として挙げられる。
【０００３】
ここで、制御の複雑化に伴い組込みソフトウェアの規模は増大しており、ＥＣＵが処理するタスクの計算量も増加している。そこで、複数個のＥＣＵや、１つのＥＣＵに内蔵された複数個のプロセッサコアを並列に用いることで、モータ、エンジン、ブレーキなどの個々の部品を制御するタスクを同時に動作させ、システム全体を制御することができる。
【０００４】
なお、単にＥＣＵの計算資源を豊富に用意しても、特定のＥＣＵだけに偏ってタスクが割り当てられてしまうと、そのＥＣＵがボトルネックとなってしまう。つまり、一連の組込みソフトウェアを複数のＥＣＵにどのように割り当てれば、ＥＣＵ間での負荷が分散できるかが、問題となる。
そこで、特許文献１には、内燃機関の回転角（クランク角）に同期した回転角同期タスク、および時間同期タスクを複数のコアに効率的に分配する制御装置が記載されている。これにより、時間経過による増減の幅が大きいエンジン回転速度に対応するタスクであっても、所定の回転角ごとにタスクが複数のコアに分散して割り当てられることで、回転角同期タスクの負荷分散が可能となる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１３０１０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特に建設機械などの組込みシステムの開発においては、既存のシステムをベースとして次世代および次次世代の製品を派生開発するといった特徴がある。ここで、次世代および次次世代の製品を開発する場合においては、開発工数などの開発コストの削減を目的に、既存システムで利用しているソフトウェアとハードウェアを再利用することが多い。
【０００７】
ここで、複数のＥＣＵに対して、複数のタスクをどのように割り当てるかという割当結果についても、既存のシステムの割当結果を派生開発時にも再利用できれば望ましい。しかし、派生開発によって特定のタスクの処理量が増加してしまい、既存のＥＣＵの処理能力を超過してしまうと、その特定のタスクを処理能力に余裕のある別のＥＣＵに再割当てすることとなり、設計・検証に要する追加コストが発生してしまう。
なお、特許文献１などの従来の負荷分散システムでは、加速や減速に伴うエンジン回転速度の変化という制御時の短期間（数秒単位）の負荷変動はある程度考慮されていた。しかし、ある車両のニューモデル販売に伴う高機能化による長期間（数年単位）の負荷増加の傾向は、制御タスクの割当結果には考慮されていない。
【０００８】
そこで、本発明は、複数の演算装置が各制御タスクを実行することでシステムを制御するときに、各制御タスクの負荷変動に対しても別の演算装置への再割当てを抑制することを、主な課題とする。
【課題を解決するための手段】
【０００９】
前記課題を解決するために、本発明のタスク割当て装置は、以下の特徴を有する。
本発明は、システムを制御するための各制御タスクの処理量について、現在の処理量から処理量の変動データをもとに将来の処理量を計算する処理量計算部と、
前記各制御タスクの前記将来の処理量と、前記各制御タスクの割当先である複数の演算装置の処理能力との制約条件を満たすように、前記各制御タスクの割当先である前記演算装置を決定する割当先決定部と、を有することを特徴とする。
その他の手段は、後記する。
【発明の効果】
【００１０】
本発明によれば、複数の演算装置が各制御タスクを実行することでシステムを制御するときに、各制御タスクの負荷変動に対しても別の演算装置への再割当てを抑制することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態に関する制御システムの構成図である。
【図２】本発明の一実施形態に関する制御タスクデータの説明図である。
【図３】本発明の一実施形態に関する割当パターンデータの説明図である。
【図４】本発明の一実施形態に関する負荷変動データの説明図である。
【図５】本発明の一実施形態に関する時間変動データの説明図である。
【図６】本発明の一実施形態に関する割当装置から制御装置に制御タスクを割り当てる処理を示すフローチャートである。
【図７】本発明の一実施形態に関する応答時間の計算例を示すタイムチャートである。
【図８】本発明の一実施形態に関する処理負荷計算部および応答時間計算部の計算結果を示す説明図である。
【発明を実施するための形態】
【００１２】
以下、本発明の一実施形態を、図面を参照して詳細に説明する。
【００１３】
図１は、制御システムの構成図である。
割当装置１は、複数の制御タスクＴ１，Ｔ２，Ｔ３，…を制御装置５の各演算装置５１に割り当てる。
割当装置１は、ＣＰＵ（Central Processing Unit）と、メモリと、ハードディスクなどの記憶手段（記憶部）と、ネットワークインタフェースとを有するコンピュータとして構成される。
このコンピュータは、ＣＰＵが、メモリ上に読み込んだプログラム（アプリケーションや、その略のアプリとも呼ばれる）を実行することにより、各処理部により構成される制御部（制御手段）を動作させる。
【００１４】
ここで、割当装置１は、各制御タスクの高機能化による長期間（例えば数年単位）の負荷増加の傾向をもとに、いったん割り当てた制御タスクの再割り当ての頻度がなるべく少なくなるように、各制御タスクの割当結果を計画的に作成する。
そのため、割当装置１は、例えば、制御装置５を製造する製造工場の内部に配備され、制御装置５の組込みソフトウェアの開発者によって管理される。長期間の負荷増加の傾向データなどの開発側の情報を反映しやすいように、かつ、次々に製造される制御装置５に対して、各制御タスクの割当結果を送信しやすいようにするためである。
【００１５】
制御装置５は、以下に例示するような各種システムを制御する。
・家庭用機器、産業用機器、医療機器など電子制御を必要とする製品の組込みシステム
・自動車などの内燃機関、鉄道車両、船舶、建設機械、エレベータなどの輸送機器など、必要とする機能が多岐にわたるシステム
・複数のハードウェア、複数のソフトウェアを組み合わせた規模の大きなシステム
この制御装置５は、例えば、制御対象の各種システムに内蔵され、各種システムの保守員により管理される。
【００１６】
制御装置５は、複数の演算装置５１と、ＡＤＣ５２と、センサ５３とを有する。マルチコアに対応した１つのＥＣＵには、複数のＥＣＵコアが含まれる。図１では、１つの演算装置５１を１つのＥＣＵコアとし、３つのＥＣＵコアが１つのＥＣＵに含まれる構成を例示する。
センサ５３は、車輪の回転角データなどの外部データを計測する。ＡＤＣ（Analog-to-digital converter）５２は、センサ５３の計測値をデジタル値に変換し、そのデジタル値を各演算装置５１に入力する。各演算装置５１は、割り当てられた各制御タスクＴ１，Ｔ２，Ｔ３の処理内容に従い、入力されたデジタル値を処理して、各種システムの制御信号などを出力する。
【００１７】
割当装置１は、演算資源データ１１と、制御タスクデータ１２（図２参照）と、割当パターンデータ１４（図３参照）と、負荷変動データ２２（図４参照）と、時間変動データ３２（図５参照）とを記憶部に格納する。制御装置５の組込みソフトウェアの開発者は、これらの記憶部に格納するデータを、事前に（例えば制御装置５の出荷前に）過去の履歴データなどを参照して用意しておく。
割当装置１は、パターン生成部１３と、処理負荷計算部２１と、応答時間計算部３１と、パターン決定部４１とを、処理部として有する。
以下、割当装置１内の各データの詳細を図２〜図５を用いて説明した後、図６のフローチャートに沿って、割当装置１内の各処理部の詳細を説明する。ここで、本実施形態では、制御タスクの処理量を示すパラメータの一例として、処理負荷計算部２１が計算する演算装置５１ごとの処理負荷率（ＣＰＵ使用率）と、応答時間計算部３１が計算する複数の制御タスクにまたがった同期型処理の計算時間（応答時間）とを用いる。
【００１８】
図２は、制御タスクデータ１２の説明図である。制御タスクデータ１２は、割当装置１が割り当てる制御タスクごとの詳細な情報である。例えば、図２では、制御タスクごとに、その実行周期と、デッドラインと、最大処理時間とを示す。１行目の制御タスクＴ１の場合、実行周期とデッドラインは共に10[ms]であり、最大処理時間は1.2[ms]である。
【００１９】
図３は、割当パターンデータ１４の説明図である。割当パターンデータ１４は、制御タスクデータ１２と、演算資源データ１１との組み合わせを総当たりで示し、その組み合わせごとの識別子として割当パターンを定義したものである。演算資源データ１１とは、制御タスクの割当先となる複数の演算装置５１（C1,C2,C3…）のリストである。１行目の割当パターンP1は、制御タスクT1,T2,T3が演算装置５１（C1）に割り当てられ、制御タスクT4が別の演算装置５１（C2）に割り当てられるという組み合わせである。
【００２０】
図４は、負荷変動データ２２の説明図である。負荷変動データ２２は、制御タスクごとに生成される時系列のグラフであり、その縦軸は１つの演算装置５１に割り当てたときのＣＰＵ負荷（0%〜100%）である。例えば、現在が2016年であるとすると、2014〜2016年の実測値と、2017年以降の予測値とが同じグラフ上に線分として示される。これらの予測値は、例えば、最小二乗法での近似線として実測値をもとに計算される。
ここで、負荷変動データ２２のグラフが年単位で増加しているのは、例えば、ある車両のニューモデル販売に伴う制御タスクの高機能化によるものである。つまり、負荷変動データ２２のグラフは、同じ種類（同じブランド名）として販売されているシステムについて、各年の販売モデルごとの負荷値を示している。
なお、１つの制御タスクについてグラフの線分が２種類以上存在していてもよく、図４では平均の線分に加え、制御タスクの上昇傾向が強い（悲観的な）予測である「最悪」の線分も定義されている。どちらの線分を用いるか、または前記以外の線分を用いるかは、割当装置１の管理者（制御タスクのソフト開発者）などが別途割当装置１に指定する。
【００２１】
図５は、時間変動データ３２の説明図である。時間変動データ３２は、制御タスクごとの年毎の処理量の増減率を示しており、この処理量は演算装置５１が制御タスクを処理する時間（応答時間）に影響する。制御タスクT1は増減率が０％であるため、次年度においても処理量は不変である。制御タスクT2は年率２％の割合で処理量が増加しているため、応答時間も徐々に長期化される。
ここで、応答時間とは、センサ５３の計測値を変換したデジタル値をＡＤＣ５２が演算装置５１に入力した開始時刻から、演算装置５１がデジタル値を演算処理するまでの時刻までの期間である（詳細は図７）。
【００２２】
図６は、割当装置１から制御装置５に制御タスクを割り当てる処理を示すフローチャートである。このフローチャートは、例えば、工場で制御装置５を製造した後、工場出荷状態として、割当装置１から制御タスクを割り当てる（インストールする）ときに実行される。そして、図６のフローチャートを実行することで制御タスクが割り当てられた制御装置５は、工場から販売店舗へと出荷される。または、制御装置５の制御タスクをオンラインでアップデート可能であるときには、そのアップデートするタイミングで、図６のフローチャートを再計算してもよい。
まず、このフローチャートの開始前に、パターン生成部１３は、制御タスクデータ１２と、演算資源データ１１との組み合わせを網羅した割当パターンデータ１４を作成しておく。
【００２３】
Ｓ１１〜Ｓ１８として、パターン生成部１３は、割当パターンデータ１４の割当パターンを、計算対象として順に１つずつ選択するループを実行する。
【００２４】
Ｓ１２〜Ｓ１５として、パターン生成部１３は、演算資源データ１１の演算装置５１を、計算対象として順に１つずつ選択するループを実行する。
Ｓ１３として、処理負荷計算部２１は、選択した割当パターンについて、選択した演算装置５１が実行する制御タスクの現在の（例えば2016年の）処理負荷率を、制御タスクデータ１２を参照して計算する。
Ｓ１４として、処理負荷計算部２１は、選択した割当パターンについて、選択した演算装置５１が実行する制御タスクの将来の（例えば、現在から３年後である2019年の）処理負荷率を、制御タスクデータ１２に負荷変動データ２２の変動分を加味して計算する。
なお、Ｓ１３，Ｓ１４の処理負荷率の計算処理は、例えば、負荷変動データ２２のＸ軸（現在＝2016年、将来＝2019年）から対応するグラフのＹ軸の値を求める処理として具体化される。さらに、選択した演算装置５１が複数の制御タスクを担当する割当パターンでは、処理負荷計算部２１は、各制御タスクのＹ軸の値を個別に求め、それらの総和を演算装置５１単位での処理負荷率とする。
【００２５】
Ｓ１６として、応答時間計算部３１は、選択した割当パターンについて、実行される制御タスクの現在の応答時間を、制御タスクデータ１２を参照して計算する。
Ｓ１７として、応答時間計算部３１は、選択した割当パターンについて、実行される制御タスクの将来の応答時間を、制御タスクデータ１２に時間変動データ３２の変動分を加味して計算する。
なお、Ｓ１６，Ｓ１７の応答時間の計算処理の詳細は、図７で後記する。
【００２６】
Ｓ１９として、パターン決定部４１は、割当パターンデータ１４の各割当パターンについての処理負荷率の計算結果および応答時間の計算結果を検証することで、今回採用する割当パターンを決定する。そして、パターン決定部４１は、その決定した割当パターンに従って各演算装置５１に各制御タスクを割り当てる。
【００２７】
図７は、Ｓ１６，Ｓ１７での応答時間の計算例を示すタイムチャートである。タイムチャートは、ＡＤＣ５２の各出力信号に加え、２つの演算装置５１（C1,C2）を用いた、複数の制御タスクTA,TB,TC,TD,TXの並列処理を示している。これらの制御タスクのうちの周期タスクはTA,TB,TC,TDであり、回転角同期タスクはTXである。
タイムチャートの横棒（タスクバー）のうち、時刻t1のＡＤＣ５２の各出力信号を起点とする処理の実行中を黒塗りバーとし、その処理以外のタスクの時間を白枠バーとして図示している。タスクバーの横方向の長さは処理時間を示しており、現在の応答時間を求めるときには、制御タスクデータ１２に登録された「最大処理時間」をそのまま用い、将来の応答時間を求めるときには、制御タスクデータ１２に登録された「最大処理時間」に時間変動データ３２の増減率を加味する（２％増加なら、最大処理時間に乗数(102/100)をかける）。
【００２８】
ここで、黒塗りバーに着目して、（処理開始時刻,処理開始タスク）の表記で複数の制御タスク間での処理の連携（同期型処理）を示すと、次の通りである。
（t1,ADC）→（t2,TA）→（t3,TB）→（t4,TX）→（t5,TA）→（t6,TB）→（t7,TC）→（t8,TB）
これらの処理の内、２つの演算装置５１（C1,C2）をまたぐ「（t6,TB）→（t7,TC）→（t8,TB）」の処理では、その処理対象となるデータが演算装置５１間（C1,C2間）で同期化される。つまり、同期型処理では、処理Ａの終了を待ってから処理Ｂが起動し、その処理Ｂの終了を待ってから処理Ｃが起動するように、連携する各処理の処理時間が連鎖的に加算されていく。
【００２９】
応答時間計算部３１は、例えば、以下に例示する時間を、制御装置５が制御対象とするシステムの振舞いを保証するための応答時間として計算する。
・図７に例示したように、時刻t1（ＡＤＣ５２の出力信号の発生時刻）から時刻t7（制御タスクTCの演算開始時刻）までの応答時間td
・制御対象とするシステム（アクチュエータなど）の操作量などの制御信号の演算開始時刻から、計算された制御信号を受けてシステムが動作する動作開始時刻までの応答時間
・時刻t1（ＡＤＣ５２の出力信号の発生時刻）から、ＡＤＣ５２の出力信号をもとに計算された制御信号を受けてシステムが動作する動作開始時刻までの応答時間
【００３０】
つまり、応答時間計算部３１は、複数の制御タスク間の並列処理にまたがった黒塗りバーの処理時間の合計時間と、複数の制御タスク間でのデータの受け渡し（同期処理）に要する遅延時間（遅延ブロック）との総和を応答時間として計算する。これにより、実際の車両による性能を示す応答時間を模擬することで、制御対象とするシステムの振舞いを高精度に予測できる。
一方、単に制御タスクの処理時間だけを考慮して応答時間を求める比較例では、複数の演算装置５１に制御タスクが分散された並列処理における遅延時間が考慮されておらず、モデルベースで設計した組込みソフトウェアと実機性能との乖離が大きくなってしまう。
【００３１】
図８は、処理負荷計算部２１および応答時間計算部３１の計算結果を示す説明図である。
このデータテーブルには、演算装置５１ごとのＳ１３で求めた現在の処理負荷率と、Ｓ１４で求めた将来の（３年後の）処理負荷率と、Ｓ１６で求めた現在の応答時間と、Ｓ１７で求めた将来の応答時間とが、割当てパターンごとに格納されている。
ここで、パターン決定部４１は、図８のデータテーブルを参照して、例えば以下に示す（手法１）〜（手法４）の各アルゴリズムの少なくとも１つにより割当パターンの採否を決定する（Ｓ１９の詳細）。
例えば、パターン決定部４１は、１００個の割当パターンを（手法３）により１０個に絞り込み、その１０個から（手法２）により１個に絞り込む。
【００３２】
（手法１）「処理負荷率の上限値」に着目する。制御対象とするシステムの振舞いを保証するための処理負荷率の上限値を演算装置５１の処理能力ごとに制約条件としてあらかじめ登録しておき、その上限値よりも小さい処理負荷率を、現在も将来も満たす割当パターンを採用する。
【００３３】
（手法２）「処理負荷率の時間変化」に着目する。処理負荷が少ない演算装置５１に対して、現在から将来までの処理負荷率の増加量（変化量）が大きい制御タスクを割り当てている割当パターンを採用する。換言すると、処理負荷が大きい演算装置５１に対して、現在から将来までの処理負荷率の増加が小さい制御タスクを割り当てている割当パターンともいえる。
【００３４】
（手法３）「応答時間の上限値」に着目する。制御対象とするシステムの振舞いを保証するための同期型処理の応答時間の上限値を制約条件としてあらかじめ登録しておき、その上限値よりも小さい応答時間を、現在も将来も満たす割当パターンを採用する。
【００３５】
（手法４）「応答時間の時間変化」に着目する。局所的性質として、同期型処理での現在の応答時間と、将来の応答時間との差分が所定値より小さい割当パターンを採用する。
【００３６】
以上説明した本実施形態では、パターン決定部４１は、処理負荷率や応答時間などの割当パターンの各評価尺度について、現在の評価値だけでなく、現在から将来までの時間変化をあらかじめ予測しておき、その時間変化を加味して制御タスクの割当パターンを決定する。
なお、現在は処理能力に余裕があるからといって所定の演算装置５１にぎりぎりまで制御タスクを割り当ててしまうと、その後の制御タスクの高機能化などによる負荷上昇に伴い処理能力不足による制御タスクの再割当が発生してしまう。そこで、本実施形態のように時間変化を加味して制御タスクの割当パターンを決定することで、将来を見越した最適なタスク割当を決定することが可能となる。
つまり、制御タスクの再割当を予測して未然に防ぐような割当パターンを決定することで、次世代および次次世代の製品開発時でも再利用可能なタスク割当を実現する。
【００３７】
なお、本発明は前記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、前記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。
また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段などは、それらの一部または全部を、例えば集積回路で設計するなどによりハードウェアで実現してもよい。
また、前記の各構成、機能などは、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
【００３８】
各機能を実現するプログラム、テーブル、ファイルなどの情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）などの記録装置、または、ＩＣ（Integrated Circuit）カード、ＳＤカード、ＤＶＤ（Digital Versatile Disc）などの記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
さらに、各装置を繋ぐ通信手段は、無線ＬＡＮに限定せず、有線ＬＡＮやその他の通信手段に変更してもよい。
【符号の説明】
【００３９】
１      割当装置（タスク割当て装置）
１１    演算資源データ
１２    制御タスクデータ
１３    パターン生成部
１４    割当パターンデータ
２１    処理負荷計算部（処理量計算部）
３１    応答時間計算部（処理量計算部）
２２    負荷変動データ
３２    時間変動データ
４１    パターン決定部（割当先決定部）
５      制御装置
５１    演算装置
５２    ＡＤＣ
５３    センサ
【図１】
2019012456.tif 000003
【図２】
2019012456.tif 000004
【図３】
2019012456.tif 000005
【図４】
2019012456.tif 000006
【図５】
2019012456.tif 000007
【図６】
2019012456.tif 000008
【図７】
2019012456.tif 000009
【図８】
2019012456.tif 000010