VISAを使ったシリアル通信を試していますが、今回はボーレートの変更です。
シリアルポートをオープンする処理の記述が以下のとおり。C#で記述です。
try
{
mbSession = (MessageBasedSession)rmSession.Open(sr.ResourceName);
}
catch (InvalidCastException)
{
MessageBox.Show("Resource must be a message-based session");
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
オープンしたセッションで使われているハードウェアインタフェースがなんであるかを知る必要があります。
mbSessionを見てみると、HardwareInterfaceTypeという値を持っているようです。
で、HardwareInterfaceTypeの取りうる値(enum)を調べると、GPIBやUSBと並んでSerialも定義されています。
Ivi.Visa.HardwareInterfaceType.Serialが欲しい値のようです。
書き換えたコードは以下のとおり。
try
{
mbSession = (MessageBasedSession)rmSession.Open(sr.ResourceName);
if ( mbSession.HardwareInterfaceType == Ivi.Visa.HardwareInterfaceType.Serial )
{
MessageBox.Show("Serial");
}
}
シリアルと判ったところで、ボーレートを変更する必要があります。
そこで、開いたセッションがシリアルセッションと判明しているので、シリアルセッションを扱う変数を使います。
mbSession = (MessageBasedSession)rmSession.Open(sr.ResourceName);
if ( mbSession.HardwareInterfaceType == Ivi.Visa.HardwareInterfaceType.Serial )
{
SerialSession ss = mbSession as Serial Session;
ss.BaudRate = 115200;
}
設定するボーレートも選びたいところですが、とりあえず変更できるか試してみます。
シリアルポートを選んでコマンドを送ってみます。
今回も"*IDN?"と送りました。
10ビット分と思われる長さを測ってみると87usです。10ビット分で11.4943KHzと表示されていますから、1ビットあたりは114.943KHz。
115.2kbpsに変更が出来ているようです。
ちなみにC#は経験がありません。
自由にコードが書けるようにならないと時間が掛かります。。