HOME > サポート > FAQ-ZIPC > シミュレーション編
サポート
FAQ - ZIPC
  シミュレーション編
Q1 シミュレーションコンパイル時に、
<< error 0151: "main" この識別子は定義されていません >>
というエラーが出ますが、main 関数を必ず用意しなくてはならないのでしょうか?
ルート関数は Start 関数をすることはできないでしょうか?
A1 シミュレータでは起動する関数を指定することができます。
起動する関数の指定方法はRTOSを使用している場合としていない場合で異なるため別々に説明します。
RTOSを指定していない場合、[プロジェクト]-[プロジェクト設定]-[シミュレーション実行コード設定]の「その他」のページで「エントリにデフォルト名称使用」のチェックを外します。
「NonOS時のエントリ」に起動関数名称を設定します。
これで指定関数を起動時にコールします。
RTOSを指定している場合、[プロジェクト]-[プロジェクト設定]-[OS設定]-[OS資源登録]の「タスク」ページでそれぞれのタスクのエントリ関数を設定します。
Q2 シミュレーション実行後、停止させると C ソースの画面(テキストウインドウ) が表示されてしまいます。
このウィンドウを表示させなくするにはどうすればよいのでしょうか?
A2 ZIPCメニューの[デバック]-[テキストデバックモード]を選択して、チェックを外してください。
これで、テキストウインドウは表示されなくなります。
Q3 シミュレーション実行時、STM のイベントセルからイベント発行できない個所があります。
何がいけないのでしょうか?
A3 STMのイベントセルを追加したり内容を変更した場合、シミュレータでは自動的にイベント情報を更新しないために、イベント発行ができないことがあります。
イベントを追加/削除または変更した場合には、ZIPCメニューの[デバック]-[イベント送信/設定]の「STM」ページで変更したSTMを選択し再生成ボタンを押下する事により、情報が再生成されます。
この時注意する点はこのダイアログで情報を設定していた場合には、その情報は全て初期化されます。
初期化を行いたくない場合は、このダイアログからイベントを追加/削除または変更してください。
Q4 あるイベントを定周期(例えば10ms毎)に発生させてシミュレーションしたいのですが、どうすればいいのでしょうか?
A4 現在シミュレータでは、定周期に割り込みを発生させる機能はありませんが、μITRONのシステムコールを使用すれば、定周期のプログラムを動作させることができます。
この場合の説明を以下に示します。
(1)定周期に実行する関数を作成します。
関数が実行されたらイベントを発生するcyctime関数を作成します。この関数をハンドラに登録します。(周期ハンドラに登録している)
例えば、以下のように関数設計書(.fnc)を作成します。

(2)定周期監視プログラムでOSシステムコールを使用し、定周期の制御をします。
act_cyc( 定周期ハンドラNo, 0 ) ---> 定周期起動を停止
act_cyc( 定周期ハンドラNo, 1 ) ---> 定周期起動を実行
※ 定周期ハンドラNoは(5)で登録したNo)
例えば、以下のようなSTMになります。
●定周期を制御するSTM

(3)OSを登録します。
[ シミュレーション ]-[ OS設定 ]-[ OS選択 ]を選択し、μITRON2.0-customを選びます。
(4)システムコールを登録する
[ シミュレーション ]-[ OS設定 ]-[ OSカスタマイズ ]を選択し、[ システムコール ]のページを開きます。「 時間管理-周期ハンドラ 」の「 周期ハンドラ活性制御 」でシステムコールを使用するにチェックします。
(5)周期ハンドラを登録します。
[ シミュレーション ]-[ OS設定 ]-[ OS資源登録 ]を選択し「 周期ハンドラ 」のページを開きます。ここで以下の設定を行います。
名称 自由に記述。(Cのシンボルとして使用できる文字)
タスク、ハンドラ 関数を登録したタスクかハンドラを選択
開始関数 定周期に実行する関数です。
状態 OFFの場合は動作しません。(4)のシステムコールで動作させます。
ONの場合、起動時に定周期が実行されます。停止もする必要がないのであれば、(4)の定義は必要ありません。
時間 定周期の時間を設定します。単位はmsecです。
このようにして定周期の設定を行います。
Q5 ステップ実行が思うようにできません。
ステップ実行を行ってもSTMの状態が遷移しないように見えるのですが...?
A5 ステップ実行時はCの1文ごとに実行しています。関数コール時は関数の中にステップしていきます。(関数コールが1ステップとなるステップ動作はありません。)
このため、STMの作りが深い(並列で動作する)ような場合は、1つのイベントに対して並列で動作するためSTM上に表示されるまでにはかなりのステップ実行を繰り返す必要があります。
Q6 STMのイベントセルをフラグ型/switch型で定義していますが、イベント発行がうまくいきません。教えてください。
A6 STMをシミュレーションする場合、事象を発生させる必要があります。シミュレーション時に事象を発生させなければSTMを動作させることはできません。
イベントセルが フラグ型/switch型で定義されている場合、事象を変数の変化として捕らえることによりSTMが駆動されます。したがって、シミュレーション時には事象を発生させるために、イベントセルに記述されているフラグ/switch条件が真になるように変数に値を設定しなければなりません。
これをシミュレーションするために、以下のようにして変数に値を設定します。
[ シミュレーション ]メニューの[ イベント送信/設定 ]からイベント発行/定義ダイアログ内でSTMタブをクリックします。
イベントリストの一覧に表示されている event0〜n に対して、[ 変更 ]ボタンを押下してデータ定義を条件式が真になるように設定式に変更します。
例えば、event0〜n に対して
 data1 = 0;
 data2 = 1;
のように入力して設定します。
ここで、event0、1、2...は、STMの先頭、2番目、3番目...のイベント...にそれぞれ対応しています。イベント発行/定義ダイアログ内で設定した内容を、STMビューア上のイベントセルメニューから[ イベント送信 ]もしくは イベント発行/定義ダイアログの[ 発行 ]ボタンをクリックして事象を発生させる仕組みです。
Q7 STMを階層化しましたが、シミュレーションで子STMが動作しません。
A7 階層化STMを、イベント名称でシミュレーションする際に、親と子のイベント名称を同時に発生させないと動作しません。親子のイベント名称を同時に発生させるには、[ シミュレーション ]メニューの[ イベント送信/設定 ]から、イベント発行定義ダイアログを起動します。
STMタブをクリックし、STM名称から子STMを選択します。
イベントリストに登録されている "event0〜n" に対して[ 変更 ]ボタンを押下します。
イベント名称に "親STMイベント名称:子STMイベント名称"のように入力します。(":"は1Byte文字)
Q8 fncの中でステート番号管理変数を参照する様にコーディングを変更し、シミュレーションのコード生成を実行したら下記のようなエラーがでました。
どう対応したらよいのでしょうか?
■ "ztsk1_0_stateno"識別子は定義されていません ■
A8 エラーとなった原因は、同一のハンドラ 又は タスク内から外部のタスクの管理変数を参照したためです。変数を参照できるのは、同一タスクもしくは同一ハンドラ内で定義されている変数のみです。
この現象を回避する方法として以下の方法があります。
STMの種別をサブルーチンとすると、ZIPCの状態管理変数をユーザ管理として変数設計書(.ram)に定義することが可能となります。(状態変数名称は自由に定義できます。)
これによって変数設計書で定義した変数はグローバル変数となりますので、ハンドラや他タスクからのアクセスが可能となるシステム共通にこの変数設計書を登録すれば、他タスクやハンドラからでも変数の参照が可能になります。
Q9 シミュレータのコード生成まで正常に終了し(エラー結果は0)シミュレーションを実行しましたが、STMが何も表示されない状態です。
A9 考えられる問題として、シミュレータとSTMの通信が行われていない可能性があります。このような場合、シミュレータからSTMを起動して通信を行います。
* スタートメニューから単独でSTMエディタを起動しないでください。
下記手順にてシミュレーションを行ってください。
1. シミュレータを起動します。
2. ファイルメニュー[ シミュレータ環境を開く ]で.zpfファイルを開きます。
3. 表示メニュー[ STMビューア ]-[ 起動 ]でSTMを起動します。
* 環境ファイルを開いた時にSTMが起動されていれば行う必要はありません。
1. シミュレーションメニュー[ コード生成 ]を実行します。
2. シミュレーションメニュー[ 実行 ]を選択します。
3. ビューア表示されたSTM内でイベントセルからマウスの右ボタンをクリックしポップアップメニューから「 イベント送信 」を選択します。(イベント番号0 から順に行います)
これで正常にシミュレーションが行われます。
Q10 STMでシミュレーションした時、状態セルが緑色に残らないのですが、なぜでしょうか?残る様にする方法を教えてください。
A10 以下の場合には、状態セルは残モードにならない仕様となっております。
1. E型STMに状態アクティビティが登録されている場合。
2. E型STMに並列状態が存在する場合。
3. E型STMにディスパッチアクティビティが登録されている場合。
4. S型STMの場合。ただし、イベント受信時には該当する状態セルが光ります。
Q11 作成した外観図から、ボタンをクリックしてもイベントがSTM上で発生しません。
A11 考えられる原因としてツール間(シミュレータとVIP)でリンクが取れていない可能性があります。下記手順にてミュレーションを行ってください。
1. シミュレータを起動します。
2. ファイルメニュー[ シミュレータ環境を開く ]で.zpf を開きます。
3. ツールメニュー[ VIP ]でVIPを起動します。
*メニューにチェックマーク付いていれば行う必要はありません。
4. VIP内のメニュー[ ファイル ]−[ 開く ]で、.vip を開きます。
5. VIPメニュー[ 環境設定 ]−[ 外観図起動 ]で、.exe を指定します。
6. シミュレーションメニュー[ コード生成 ]を実行します。
7. シミュレーションメニュー[ 実行 ]を選択します。
これで正常にシミュレーションが行われます。
Q12 シミュレータでコード生成を行うと、エラーがたくさん出るのですが、どのようにして修正すればいいのでしょうか?
A12 シミュレータのコード生成は以下の3つの流れで実行されます。
1)チェッカの実行
登録されたドキュメント情報をチェッカに渡し、静的チェックを行います。エラーはメッセージウインドウに表示されます。そのエラーをダブルクリックするとエラー箇所にジャンプします。
例えば、STMに関してのエラーであればSTMが起動し、対象のファイルがオープンしエラーの箇所が表示されます。
2)ジェネレータの実行
登録されたドキュメントをジェネレータに渡し、Cソースコードを生成します。シミュレータで生成するCソースコードはジェネレータが生成するコードと基本的には同じですが、シミュレータで生成するコードには、シミュレータ用の関数が付加されています。
3)コンパイルの実行
ジェネレータが生成したCソースコードをシミュレータが理解できるようにコンパイルします。コンパイル結果でエラーが0の場合、シミュレーションが可能となります。エラーがある場合、エラーはメッセージウインドウに表示されます。そのエラーをダブルクリックするとCソースコードのエラー箇所にジャンプすることができます。
設計書から自動生成されたCソースコードのエラーについては、Cソースではなく設計書の方を修正してください。CソースコードをZIPCドキュメント登録ツリーに登録している場合は、直接Cソースコードを修正してください。
*この設計書は、メニュー[ファイル]-[ドキュメントの設定]で表示されるZIPCドキュメント登録ツリーから選択します。
最終的に、シミュレータのコンパイルがエラー0であればシミュレーションの実行が可能になります。
Q13 LOGファイルからTCファイルを作成したいのですがうまく作れません。作成手順を教えてください。
A13 グファイルからTCへコンバートする手順は下記の通りです。
1. ATVを起動します。
2. ATVのメニュー[ ATV ]−[ ATV実行モード選択 ]を選択してください。
3. 表示されたATV実行モードダイアログで[ ログファイルよりTC情報を生成 ]ボタンをチェックして[ OK ]ボタンを押下します。
4. 表示されたログ->TC生成環境ダイアログで[ ログファイル選択 ]ボタンを押下して.logファイルを選択します。ログファイルを選択すると、実行環境ファイル一覧に内容が表示されます。生成されるファイル名称を変更したい場合は、[ 名称変更 ]ボタンを押下して行います。
5. また、[ 生成オプション ]ボタンを押下して時間単位や必要な変数のみを生成したりすることができます。
6. [ 実行 ]ボタンを押下します。
これで、TCが生成されます。なお、ログからMSCについての生成も行えます。
▲ ページTOPへ