VCDプロパティ:GPIOプロパティ編
概要
TheImagingSource社のカメラには外部トリガー信号を搭載しているカメラがあります。
外部トリガーによって複数台のカメラの同期をとったり、ストロボ出力をすることで照明と撮影タイミングを合わせることができます。
外部トリガー・ストロボアウトはカメラのVCDプロパティにアクセスすることで制御することができます。
ここでは外部トリガーをカメラに入力した時のステータスと、ストロボアウトでマニュアルで出力するための方法について説明しています。
なお、トリガーと同期してストロボ出力の機能を使うにはVCDID_StrobeのVCDプロパティのクラスからの制御となりますのでご注意ください。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | digitalio_cs_3.5.zip |
サンプル(VB.NET) | digitalio_vb_3.5.zip |
実行結果
Visual Studioのプログラム上ではすでにボタンの設置や関数は定義済ですので、IC Imaging Contorl3.5をインストールされていれば、実行ボタンだけですぐにデバッグで動作確認することができます。
画面にあるそれぞれのボタンなどのコントローラの機能は下記の通りです。
[Read Input]ボタン | ボタンを押した時トリガー信号を入力しカメラ側で検知した時、Input StateチェックボックスをONにする。検知しない場合にはInput StateチェックボックスをOFFにする。 |
---|---|
[Input State]チェックボックス | Read Inputボタンでカメラでトリガー信号を検知したらチェックが反映される。 |
[Write Input]ボタン | クリックしたタイミングでOutput Stateチェックボックスのステータス値でSTROBE_OUTを出力する。 |
[Output State]チェックボックス | Write Inputボタンをクリックしたときに反映させる値。チェックONの場合STROBE_OUTをhigh、チェックOFFの場合STROBE_OUTをLowにする。 |
VCDプロパティの宣言
ストロボアウトとトリガーインの検知で使用するVCDプロパティは下記の4つとなります。
private VCDRangeProperty _gpioIn;
private VCDRangeProperty _gpioOut;
private VCDButtonProperty _gpioRead;
private VCDButtonProperty _gpioWrite;
Private _GPIn As VCDRangeProperty
Private _GPOut As VCDRangeProperty
Private _GPInRead As VCDButtonProperty
Private _GPIOWrite As VCDButtonProperty
プロパティにアクセスするための下準備
private void Form1_Load( object sender, EventArgs e )
{
// xmlファイルを読み込む
if( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
{
MessageBox.Show("No device was selected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
return;
}
// VCDプロパティのクラスを初期化して、ICImagingControl オブジェクトのプロパティにアクセスします。
_gpioIn = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>( VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOIn );
_gpioOut = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>( VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOOut );
_gpioRead = icImagingControl1.VCDPropertyItems.Find<VCDButtonProperty>( VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIORead );
_gpioWrite = icImagingControl1.VCDPropertyItems.Find<VCDButtonProperty>( VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOWrite );
// まず、デジタル IO が現在のビデオ キャプチャ デバイスでサポートされているかどうかを確認します。
if ( _gpioIn != null && _gpioOut != null && _gpioRead != null && _gpioWrite != null )
{
// デジタル入力状態を取得します。
cmdReadDigitalInput.Enabled = true;
ReadDigitalInput();
// デジタル出力の状態を取得します。
cmdWriteDigitalOutput.Enabled = true;
chkDigitalOutputState.Enabled = true;
if( _gpioOut.Value == 1 )
{
chkDigitalOutputState.CheckState = CheckState.Checked;
}
else
{
chkDigitalOutputState.CheckState = CheckState.Unchecked;
}
}
else
{
cmdReadDigitalInput.Enabled = false;
cmdWriteDigitalOutput.Enabled = false;
chkDigitalOutputState.Enabled = false;
}
// ライブストリーミング開始
icImagingControl1.LiveStart();
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IcImagingControl1.DeviceValid Then
IcImagingControl1.ShowDeviceSettingsDialog()
If Not IcImagingControl1.DeviceValid Then
MsgBox("No device was selected.", MsgBoxStyle.Information, "DigitalIO")
Me.Close()
Exit Sub
End If
End If
' VCDプロパティのクラスを初期化して、ICImagingControl オブジェクトのプロパティにアクセスします。
IcImagingControl1.VCDPropertyItems.Find(VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOIn, _GPIn)
IcImagingControl1.VCDPropertyItems.Find(VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOOut, _GPOut)
IcImagingControl1.VCDPropertyItems.Find(VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIORead, _GPInRead)
IcImagingControl1.VCDPropertyItems.Find(VCDGUIDs.VCDID_GPIO, VCDGUIDs.VCDElement_GPIOWrite, _GPIOWrite)
If Not _GPIn Is Nothing Then
cmdReadDigitalInput.Enabled = True
ReadDigitalInput()
Else
cmdReadDigitalInput.Enabled = False
End If
If Not _GPOut Is Nothing Then
'デジタル出力の状態を取得します。
cmdWriteDigitalOutput.Enabled = True
chkDigitalOutputState.Enabled = True
If _GPOut.Value = 1 Then
chkDigitalOutputState.CheckState = CheckState.Checked
Else
chkDigitalOutputState.CheckState = CheckState.Unchecked
End If
Else
cmdWriteDigitalOutput.Enabled = False
chkDigitalOutputState.Enabled = False
End If
' ライブストリーミング開始
IcImagingControl1.LiveStart()
End Sub
カメラに実装されている下記のプロパティにアクセスします。
VCDElement_GPIOIn | トリガー入力のステータス |
---|---|
VCDElement_GPIOOut | ストロボ出力のステータス |
VCDElement_GPIORead | トリガー信号を読み取り |
VCDElement_GPIOWrite | ストロボアウトの出力 |
フォームロードするタイミングでカメラのVCDプロパティにアクセスして、接続しているカメラが外部トリガー信号に対応している機種か確認します。その後、接続しているカメラが外部トリガー信号に対応していれば、外部トリガーストロボ出力の現在のステータスを[Input State]チェックボックスと[Output State]チェックボックスに反映させライブストリームを開始しています。
[Read Input]ボタンをクリックした時の動作
private void cmdReadDigitalInput_Click(object sender, EventArgs e)
{
ReadDigitalInput();
}
private void ReadDigitalInput()
{
// カメラからトリガー入力を読み取ります。
_gpioRead.Push();
// デジタル入力の状態を chkDigitalInputState チェックボックスに設定します。
if( _gpioIn.Value == 1 )
{
chkDigitalInputState.CheckState = CheckState.Checked;
}
else
{
chkDigitalInputState.CheckState = CheckState.Unchecked;
}
}
Private Sub cmdReadDigitalInput_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdReadDigitalInput.Click
ReadDigitalInput()
End Sub
Private Sub ReadDigitalInput()
' カメラからトリガー入力を読み取ります。
_GPInRead.Push()
If _GPIn.Value = 1 Then
chkDigitalInputState.CheckState = CheckState.Checked
Else
chkDigitalInputState.CheckState = CheckState.Unchecked
End If
End Sub
[Read Input]ボタンをクリックした時のイベントです。
カメラからトリガー入力を読み取り、外部トリガの有り無しをInput Stateチェックボックスに反映させています。
[Write Input]ボタンをクリックした時の動作
private void cmdWriteDigitalOutput_Click( object sender, EventArgs e )
{
// チェックボックスの値をカメラに反映
if( chkDigitalOutputState.CheckState == CheckState.Checked )
{
_gpioOut.Value = 1;
}
else
{
_gpioOut.Value = 0;
}
// 現在のステータスでストロボ出力を実行
_gpioWrite.Push();
}
Private Sub cmdWriteDigitalOutput_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWriteDigitalOutput.Click
' チェックボックスの値をカメラに反映
If chkDigitalOutputState.CheckState = CheckState.Checked Then
_GPOut.Value = 1
Else
_GPOut.Value = 0
End If
' 現在のステータスでストロボ出力を実行
_GPInRead.Push()
End Sub
[Output State]のチェックボックスにOnの時にストロボ出力するようにしています。
その他、VCDプロパティの使用法については下記をご覧ください。
技術関連項目:VCDプロパティ
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル