前提・実現したいこと
C#を使って、コンピュータとオシロスコープを通信させたいです。
とりあえずはコンピュータからコマンドを送信し、オシロスコープが反応してくれたらいいと思っています。
USB-RS232Cの変換ケーブルを使用しています。
発生している問題・エラーメッセージ
PCからオシロスコープにコードを送信しても反応がありません。 また、通信開始時に「ポートへのアクセスが拒否されました」というメッセージが出ることがあります。
該当のソースコード
connectButton:通信開始ボタン
sendButton:送信ボタン
sendDataTextBox:コマンドを入力するテキストボックス
receiveDataTextBox:受信した文字列を表示するテキストボックス
です。
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace WindowsFormsApp2 12{ 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 private void Form1_Load(object sender, EventArgs e) 21 { 22 //プロパティ設定 23 comSerialPort.PortName = "COM3"; 24 comSerialPort.BaudRate = 9600; 25 comSerialPort.DataBits = 8; 26 comSerialPort.Parity = System.IO.Ports.Parity.None; 27 comSerialPort.StopBits = System.IO.Ports.StopBits.One; 28 //ハードウェアによるハンドシャケ 29 comSerialPort.Handshake = System.IO.Ports.Handshake.RequestToSend; 30 comSerialPort.RtsEnable = true; 31 } 32 33 private void connectButton_Click(object sender, EventArgs e) 34 { 35 //通信開始ボタンのクリック 36 try 37 { 38 if(comSerialPort.IsOpen==false) 39 { 40 comSerialPort.Open(); 41 connectButton.Text = "通信停止"; 42 } 43 else 44 { 45 comSerialPort.Close(); 46 connectButton.Text = "通信開始"; 47 } 48 } 49 catch(Exception ex) 50 { 51 MessageBox.Show(ex.Message, "通信エラー", 52 MessageBoxButtons.OK, MessageBoxIcon.Error); 53 } 54 } 55 56 private void sendButton_Click(object sender, EventArgs e) 57 { 58 //送信ボタンのクリック 59 if (comSerialPort.IsOpen) 60 { 61 try 62 { 63 //\nの自動入力 64 comSerialPort.WriteLine(sendDataTextBox.Text + "\n"); 65 } 66 catch (Exception ex) 67 { 68 //送信エラー時の処理 69 MessageBox.Show(ex.Message, "送信エラー", 70 MessageBoxButtons.OK, MessageBoxIcon.Error); 71 } 72 } 73 else 74 { 75 MessageBox.Show("通信が未開始", "送信エラー", 76 MessageBoxButtons.OK, MessageBoxIcon.Error); 77 } 78 } 79 80 //デリゲート型の宣言 81 private delegate void ReceiveDataDelegate(string receiveData); 82 83 private void SetReceiveData(string dataString) 84 { 85 receiveDataTextBox.Text += dataString; 86 } 87 88 private void comSerialPort_DataReceived(object sender, 89 System.IO.Ports.SerialDataReceivedEventArgs e) 90 { 91 string receiveData; 92 //デリゲート型の変数の宣言、生成 93 ReceiveDataDelegate recieve = new 94 ReceiveDataDelegate(SetReceiveData); 95 96 try 97 { 98 //データ受信 99 receiveData = comSerialPort.ReadLine(); 100 } 101 catch(Exception ex) 102 { 103 receiveData = ex.Message; 104 } 105 //デリゲート型のメソッド呼び出し 106 Invoke(recieve, receiveData); 107 } 108 } 109} 110
試したこと
オシロスコープ:通信速度を9600、EOLをLFに設定、ポートはCOM3
自動で文字列を返すコマンド、オシロスコープを操作するコマンド(「AUTOSet」など)は入力してみましたが、無反応でした。
「ポートへのアクセスが拒否されました」というエラーに対して、Process Explorerというソフトでポートの使用状況を確認しましたが、エラーが出ている最中でもポートは使用されていませんでした(変換ケーブルのサービス値で検索)
エラーメッセージが出ずに接続が開始されていてる状態でも、ポートは使用されていない感じでした(ずっと検索結果0件)。
補足情報(FW/ツールのバージョンなど)
オシロスコープ:テクトロニクス製TDS3000Bシリーズ
visual studio 2019のwindowsフォームアプリケーション(.NET Framework)使用
変換ケーブル:バッファロー製bsusrco6シリーズ
回答2件
あなたの回答
tips
プレビュー