仮想マイコン
							最終更新日:2023/12/20 
							
							■ 概要
							
								センサ入力や、制御出力信号に小型マイコンを用いていた産業用エッジシステムのケースにおいて、仮想マイコン機能は有効なソリューションです。
								産業コンピューターが搭載するIntel CPU マルチコアを応用することでソフトウェアが作り出す仮想のマイコンプラットフォームを提供します。Intel CPU がマイコンの処理能力をカバーできるので、マイコンハードウェアを必要とせずに、この仮想プラットフォーム上に C言語/C++言語で開発できるマイコンアプリケーションを実行させて目的の機能を実現できます。この「仮想マイコン」ソフトウェアは、RT-edgeシステムのコンテナとして利用できるだけでなく、産業用PCにこの「仮想マイコン」ソフトウェアをインストールして利用することもできます。
							
					
							■ 特長
							
							
								- 市販マイコン同等の処理が可能
 
								- in()、out()関数でレジスタアクセス
 
								- 仮想マイコンタスクテーブルへの登録で動作するリアルタイムマルチタスク
 
								- 複数の仮想マイコン間で連携が可能(イベント機能)
 
								- 他のタスクと連携が可能(メッセージ機能)
 
								- 新規アプリケーション開発を支援するウィザード機能
 
								- Microsoft Visual StudioのC言語プログラミングでアプリケーション開発
 
								- コンフィグファイル(XML)にI/Oレジスタ構成を定義
 
								- この「仮想マイコン」は1台の産業用PCで複数のマイコンとして利用可能(最大64マイコン)
 
							
							 
					
							■ 仕様
							
							
								仮想マイコンタスク機能
								
									
										| No | 
										項目 | 
										内容 | 
										備考 | 
									
									
										| 1 | 
										制御周期 | 
										最小100us | 
										作り出せる時間の最小単位 ※マシン性能によって制限されます | 
									
									
										| 2 | 
										プライオリティ(詳細) | 
										256段階 | 
										 | 
									
									
										| 3 | 
										スタックサイズ | 
										128KB | 
										 | 
									
									
										| 4 | 
										最大仮想マイコン数 | 
										64 | 
										 | 
									
									
										| 5 | 
										1仮想マイコン当たりの 最大仮想マイコンタスク数 | 
										64 | 
										ただしシステム内の最大仮想マイコン数を超えないこと | 
									
									
										| 6 | 
										タスク(プログラム)の大きさ上限 | 
										約6万行 | 
										 | 
									
									
										| 7 | 
										扱えるデータメモリ上限サイズ | 
										最大4GB | 
										 | 
									
								
							 
							
								
								
									
										| No | 
										項目 | 
										内容 | 
										備考 | 
									
									
										| 1 | 
										アドレス範囲 | 
										0x0000~0xFFFF | 
										最大ディジタル信号65535点 | 
									
									
										| 2 | 
										アクセス形式 | 
										リトルエンディアン形式 | 
										 | 
									
								
							 
							
							
								メッセージ機能
								
								
								
									| No | 
									項目 | 
									内容 | 
									備考 | 
								
								
									| 1 | 
									メッセージ名 | 
									VM_M[1] 
									[1]:EgStartでのEgVMを使用した 
										仮想マイコンの起動番号 
									( 00 .. 63 )
									 | 
									フレームワークで生成したメッセージをキューイングする。 | 
								
								
									| 2 | 
									個数 | 
									1 | 
									 | 
								
								
									| 3 | 
									レコード長 | 
									2048バイト | 
									 | 
								
								
									| 4 | 
									レコード数 | 
									1024 | 
									 | 
								
								
								 
							
								
									
									
										
											| No | 
											項目 | 
											内容 | 
											備考 | 
										
										
											| 1 | 
											カタログ名 | 
											VM_E[1][2] 
											[1]:EgStartでのEgVMを使用した 
												仮想マイコンの起動番号 
											( 00 .. 63 ) 
											[2]:仮想マイコンタスクテーブルの 
												仮想マイコンタスクの起動番号 
											( 00 .. 63 )
											 | 
											EgMailboxを使用 | 
										
										
											| 2 | 
											個数 | 
											64 | 
											vmInitで生成 | 
										
										
											| 3 | 
											レコード長 | 
											1バイト | 
											RT-edge仕様上最小値をセット | 
										
										
											| 4 | 
											レコード数 | 
											2 | 
											RT-edge仕様上最小値をセット | 
										
										
											| 5 | 
											メッセージ番号 | 
											20000 | 
											ユーザーメッセージを使用 | 
										
									
								 
							 
							
					
					
					
							■ RT-edge でのコンテナ間メッセージ通信
							
							仮想マイコンアプリケーションは 他のRT-edgeコンテナに対して非同期的なメッセージ通知を使って処理を要求することが可能です。
							例えばデータベースコンテナにレコード追記を要求したり、上位通信コンテナにクラウドサーバ向けの送信要求をすることができます。
								
							 
					
					
					
							■ Visual Studioでのアプリケーションの開発
							
							仮想マイコンアプリケーションの開発には、Microsoft Visual Studio によるC言語が使用できるので STL を用いたアルゴリズムの活用や、キャラクタコンソールの簡易表示ができます。
							ソケット関数も用意されておりTCP IP 通信もハードウェアの増設なしに利用できます。これには産業用コンピューターが搭載しているイーサネットポートが使用されます。
							
							
					
							■ 新規アプリケーション開発を支援するウィザード機能
							
							新規のアプリケーションを開発する場合 Visual Studio のプロジェクトを自動生成します。
							アプリケーション開発者は生成されたスケルトンコードに処理を追記する形で目的の処理をプログラミングしていくことができます。
							Visual Studioでビルドを行えば実行モジュールが生成されます。
								
							 
							
					
							■ API関数
							
								
									- サービス関数群
										仮想マイコンアプリケーションのプロセスをコントロールできます。 
									- 仮想I/O空間アクセス関数群
										マッピングされたレジスタへのアクセスができます。これには仮装のポートアドレスを使って指定します。レジスタは8ビット16ビット32ビットの指定が可能です。
										これらにより RTCD 内のタグ情報が取得/更新されます。 
									- メッセージ通信関数群
										他の仮想マイコンへのメッセージ送信と受信が可能です。 
									- イベント関数群
										仮想マイコン内のタスク同士でイベントの通知と、受信が可能です。
										
											
												
													| No | 
													項目 | 
													内容 | 
													備考 | 
												
												
													| 1 | 
													サービス | 
													vmInit | 
													仮想マイコンを初期化 | 
												
												
													| 2 | 
													サービス | 
													vmNotifyEvent | 
													終了イベントを待機 | 
												
												
													| 3 | 
													サービス | 
													vmExit | 
													仮想マイコンを終了 | 
												
												
													| 4 | 
													仮想I/O空間アクセス | 
													vmInByte | 
													仮想IO空間の8ビット読み込み | 
												
												
													| 5 | 
													仮想I/O空間アクセス | 
													vmOutByte | 
													仮想IO空間の8ビット書き込み | 
												
												
													| 6 | 
													仮想I/O空間アクセス | 
													vmInHword | 
													仮想IO空間の16ビット読み込み | 
												
												
													| 7 | 
													仮想I/O空間アクセス | 
													vmOutHword | 
													仮想IO空間の16ビット書き込み | 
												
												
													| 8 | 
													仮想I/O空間アクセス | 
													vmInWord | 
													仮想IO空間の32ビット読み込み | 
												
												
													| 9 | 
													仮想I/O空間アクセス | 
													vmOutWord | 
													仮想IO空間の32ビット書き込み | 
												
												
													| 10 | 
													メッセージ通信 | 
													vmSendMessage | 
													EgMailboxにメッセージを送信 | 
												
												
													| 11 | 
													メッセージ通信 | 
													vmReceiveMessage | 
													EgMailboxからメッセージを受信 | 
												
												
													| 12 | 
													イベント | 
													vmSendEvent | 
													イベントを送信 | 
												
												
													| 13 | 
													イベント | 
													vmReceiveEvent | 
													イベントを受信 | 
												
												
													| 14 | 
													その他 | 
													vmSleep | 
													RtSleepExをラップ | 
												
											
										 
										サンプルコードはこちら。