質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

0回答

751閲覧

グラフテックMT-1000(100)をc#でIEEE-488.2コマンドで制御したいです

noname11

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/08/28 04:25

前提・実現したいこと

グラフテックの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にしたりしましたが解決に至りませんでした

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/08/28 04:44 編集

メーカーの仕様書は確認したんですか? あと、例外catchしてるのにExceptionオブジェクトの内容確認しないんですか?
dodox86

2021/08/28 05:36

> MT-1000(100)の改行コードがCRLFなので device.IO.TerminationCharacter= 0x0A; の0x0Aの部分を0x0Dにしたりしましたが解決に至りませんでした 自然に考えると、デバイスオープン自体でNGなら改行コードの話は関係ないでしょう。改行コードはOpenできて以降、コマンドやレスポンスの送受信のときの話のはずです。で、仮にOpenできたとしても、CRLF(0x0D, 0x0A)が仕様なのに、0x0Aや0x0Dのみじゃダメなのでは? 、
退会済みユーザー

退会済みユーザー

2021/08/28 06:04

> まずデバイスオープンしないです それをどうしてそう判断できたのですか? MessageBox.Show(""); で MessageBox が表示されるから? try - catch を全部やめたら何か分かりそうな気がしますけど・・・
gentaro

2021/08/28 08:01

そもそもなぜ例外を全部握りつぶしてるんだ… 自分で原因特定のヒントになる情報を消しておいて「わかりません」は話にならないと思うけど。
dodox86

2021/08/28 08:37

あるいはExceptionはthrowされていないんだけど、while(true)で永久ループしているから、viop()メソッドから出てこないとか。button1_Click()のイベントで呼び出すようになっていますが、これはちょっとあんまりなコードでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問