- 複数ターゲット間でI/Oを共有する場合の注意
マルチタスクシステム上では、複数のターゲット間で同じI/Oボードを使用する場合がありえます。このとき、同じI/Oに異なる値を出力しようとすると不整合が起きてしまいます。標準のISaGRAFのカーネル自身には、このようなアクセスの競合を管理する機能はありません。I/Oドライバ側でこのような機能を作りこむ必要があります。
一般的な実現方法は、I/Oドライバ(主に出力ボードの場合)に、アプリケーション間の優先度を指定するようなOEMパラメータをI/Oドライバへ付加することです。このパラメータで、ターゲットの優先度に応じて物理的なI/Oアクセスを有効にしたり、無効したり、切り替えられます。
このような管理は、C言語ファンクション/ファンクションブロックの場合にも当てはまります。一般的に複数のファンクション間で、コンピュータのある資源を共有する場合は、何らかの排他制御が必要になります。
...
- 複数ビットのデータをまとめて1つの変数として扱うことはできますか?
このような場合、ISaGRAFでは変数の型は必ずアナログの整数型となります。
ブール型=ビットのデータ情報は、ISaGRAFの入力型または出力型の整数型の変数に割り付けられ、かつ使用するI/Oのタイプに合ったI/Oドライバに接続されます。
また、1ビットデータをアナログ型のデータに対応させるためにマスク処理を行います。(and_mask, or_mask, not_mask, xor_maskの各標準命令を使用して実現できます)
一方で、アナログ変数をビットデータに分解するような機能やその逆の機能をC言語ファンクションで実装することも可能です。
具体的な方法は、こちらをご覧下さい。
...
- 複数ターゲット間でI/Oを共有する場合の注意
マルチタスクシステム上では、複数のターゲット間で同じI/Oボードを使用する場合がありえます。このとき、同じI/Oに異なる値を出力しようとすると不整合が起きてしまいます。標準のISaGRAFのカーネル自身には、このようなアクセスの競合を管理する機能はありません。I/Oドライバ側でこのような機能を作りこむ必要があります。
一般的な実現方法は、I/Oドライバ(主に出力ボードの場合)に、アプリケーション間の優先度を指定するようなOEMパラメータをI/Oドライバへ付加することです。このパラメータで、ターゲットの優先度に応じて物理的なI/Oアクセスを有効にしたり、無効したり、切り替えられます。
このような管理は、C言語ファンクション/ファンクションブロックの場合にも当てはまります。一般的に複数のファンクション間で、コンピュータのある資源を共有する場合は、何らかの排他制御が必要になります。
...