前提・実現したいこと
グラフテックのMT-1000もしくはMT-100をc#で制御したいです
KEYSIGHTのVISAを使用しています
まずデバイスオープンしないです
すみません、だれか助けてください
該当のソースコード
[visa.cs] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Ivi.Visa.Interop; using System.Runtime.InteropServices; namespace WindowsFormsApp2 { public class visa { public static ResourceManager rm; public static FormattedIO488 device; public static void viop() { ResourceManager rm = new ResourceManager(); FormattedIO488 device = new FormattedIO488(); while (true) { try { device.IO =(IMessage)rm.Open("TCPIP0::192.168.254.253::8023::SOCKET", AccessMode.NO_LOCK, 0, ""); device.IO.TerminationCharacter= 0x0A; device.IO.TerminationCharacterEnabled = true; device.IO.SendEndEnabled = true; } catch { MessageBox.Show(""); device.IO = null; return; } } } public static void wr(string a) { while (true) { try { device.WriteString(a); break; } catch { continue; } } } public static string re() { while (true) { try { string a = device.ReadString(); return a; } catch { continue; } } } } [Form1.cs] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Ivi.Visa.Interop; using System.Runtime.InteropServices; namespace WindowsFormsApp2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { visa.viop(); MessageBox.Show("!"); visa.wr("*IDN?"); MessageBox.Show(visa.re()); } } }
試したこと
MT-1000(100)の改行コードがCRLFなので device.IO.TerminationCharacter= 0x0A; の0x0Aの部分を0x0Dにしたりしましたが解決に至りませんでした
メーカーの仕様書は確認したんですか?
あと、例外catchしてるのにExceptionオブジェクトの内容確認しないんですか?
> MT-1000(100)の改行コードがCRLFなので device.IO.TerminationCharacter= 0x0A; の0x0Aの部分を0x0Dにしたりしましたが解決に至りませんでした
自然に考えると、デバイスオープン自体でNGなら改行コードの話は関係ないでしょう。改行コードはOpenできて以降、コマンドやレスポンスの送受信のときの話のはずです。で、仮にOpenできたとしても、CRLF(0x0D, 0x0A)が仕様なのに、0x0Aや0x0Dのみじゃダメなのでは?
、
> まずデバイスオープンしないです
それをどうしてそう判断できたのですか? MessageBox.Show(""); で MessageBox が表示されるから?
try - catch を全部やめたら何か分かりそうな気がしますけど・・・
そもそもなぜ例外を全部握りつぶしてるんだ…
自分で原因特定のヒントになる情報を消しておいて「わかりません」は話にならないと思うけど。
あるいはExceptionはthrowされていないんだけど、while(true)で永久ループしているから、viop()メソッドから出てこないとか。button1_Click()のイベントで呼び出すようになっていますが、これはちょっとあんまりなコードでは。
あなたの回答
tips
プレビュー