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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

1664閲覧

コンピュータと外部機器の接続がうまくいきません

a_s_

総合スコア1

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2020/06/23 10:33

前提・実現したいこと

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シリーズ

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

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

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

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

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

y_waiwai

2020/06/23 12:45

通信仕様はわかってるんでしょうか その、オシロスコープなるものの型番はなんでしょう
a_s_

2020/06/24 10:39

ごめんなさい、依頼の項目に気づきませんでした。。 問題は解決できました。 閲覧していただきありがとうございました!
guest

回答2

0

小城の設定の問題、小城のシリアル通信プログラムが立ち上がっていない、

asciiがバイナリかの問題

ケーブルのけっせんの問題

投稿2020/06/23 11:56

yukijiro1990

総合スコア37

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

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

a_s_

2020/06/23 14:22

回答ありがとうございます! オシロスコープ側でのプログラムの立ち上げは盲点でした! 調べてみます、ありがとうございます。 文字コードですが、参考にしている書籍では、「ID?」の3文字で返答が帰ってきているので、それを真似てただの文字列を入力していました。。 問題点を分かりやすく列挙して頂き、ありがとうございます!
guest

0

ベストアンサー

USBシリアルケーブルですと、9ピンのRS-232Cの信号線に相当する部分がつながっていない(存在しない)ことも多いです。ソフトでその部分を操作して正しく動くかどうかは、デバイスドライバーに依存します。まず、ご提示のコードのシリアルポートの設定で、以下の部分をコメント化(いじらない)してみてください。

C#

1//ハードウェアによるハンドシャケ("ハンドシェイク"、です。。。) 2// 指定しない comSerialPort.Handshake = System.IO.Ports.Handshake.RequestToSend; 3// 指定しない comSerialPort.RtsEnable = true;

これでダメなら最初に戻り、自作のプログラムではなくシリアル通信をサポートする実績のある何らかの通信ソフトを使って操作し、自作のプログラムに問題があるのかそれとも接続や設定に問題があるのか切り分けましょう。

投稿2020/06/23 10:51

dodox86

総合スコア9183

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

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

a_s_

2020/06/23 11:29

ご回答ありがとうございます! 信号線が通じていない場合があるんですね、、勉強になります。 誤字、大変失礼しました。 早速2行に//を入力して動作させてみましたが、応答は得られませんでした。。 新たな問題解決への糸口の提示、大変感謝いたします。実際にしてみたいのですが、ここでいうソフトというのは、無料でダウンロードできるようなもので大丈夫でしょうか? 一応tera termで「AUTOSet\n」といった入力はしてみたのですが無反応でした、、 初歩的な質問ですいません、よろしくお願いします。
dodox86

2020/06/23 12:36

> ここでいうソフトというのは、無料でダウンロードできるようなもので大丈夫でしょうか? > 一応tera termで「 teratermでOKです。(一般的には)まずそれで繋がることが前提だと思います。お使いのオシロスコープの正確な型番は分かりませんが、 https://jp.tek.com/oscilloscope/tds3014b-manual/tds3000b-series-user-manual で得られるマニュアルによると、RS-232Cについては BaudRate: Sets the baudrate insteps from 1200 to 38400 Flagging; Use to enable hard flagging(RTS/ CTS) or turn flagging off. EOL: Select send-of-lineterminator. Debug: Enablesanddisablesamessage windowtohelpyoudebug RS-232 problems. Set RS-232 Parameters to Default Values: Setsbaudrate=9600,hardflagging= on,andEOL=LF. とあります。既定値がハードウェア制御(RTS/CTS) ON だそうなので、お使いの機種を確認し、OFFにしてみてください。PC側と合っていないとダメです。また、念の為WindowsのデバイスマネージャーでCOMポートが正しく動作しているか(警告がでていないか)を確認してください。
a_s_

2020/06/23 14:07

ご返信、ありがとうございます! teratermで大丈夫なんですね! 自分もこのマニュアルを参照しています。 RTS/CTSの項目はPCでの設定に合わせてオン、オフの両方を試してみましたが、駄目でした。。 ただ、teraterm内でオフにしても、デバイスマネージャーではオンのままだったりして、、これはそういう仕様なのでしょうか? デバイスマネージャーでは、変換ケーブルのみでも「正常に動作しています」という表示がありました。rs232側にオシロスコープを接続しても表示に変化はありませんでした。 こうなってくると、やっぱり変換ケーブルに問題があるということになるんでしょうか、、 何度も申し訳ありません、返信お待ちしてます。
dodox86

2020/06/23 17:58 編集

(1) > また、通信開始時に「ポートへのアクセスが拒否されました」というメッセージが出ることがあります。 いつも出るのではなくたまに出るエラーであれば、ソフトのせいかもしれません。Open-->Send-->Close-->Open-->Send で、タイミングの問題、とか。 (2) > ただ、teraterm内でオフにしても、デバイスマネージャーではオンのままだったりして、、これはそういう仕様なのでしょうか? teraterm内でOFFにしても、teratermが終了するときにもとに戻すはずだったと思うので、問題ないはずです。とりあえずCOMポートに異常が無ければだいじょうぶだと思います。 その他気になったこと: (3) オシロスコープ側に送っているコマンドのフォーマットは合っていますか? 以下で得られる「Programmer Manual」によると、 https://jp.tek.com/oscilloscope/tds3014b-manual/tds3000-tds3000b-tds3000c-series コマンドについて"AUTOSET"はヘッダーなので、最低限、コマンドとして"AUTOSET EXECUTE<改行>"と送信するように見受けられます。また、オシロスコープ側から結果が返ってくるはずの"BUSY?"などのクエリーコマンドも試してみてください。 (4) 「Programmer Manual」のTable 1-6 にRS-232Cに関するトラブルシューティングの一覧があるので、確認してみてください。オシロスコープ側の「Debug」メニューとやらに、通信速度の不一致などに関するエラーの報告が出るようです。ケーブルに関して「null modemケーブルを使え」旨の表記がありますが、いわゆる「クロスケーブル」です。お使いのUSBシリアルケーブルも"恐らく"そのはずですが、ケーブルを疑う際はその点も確認してください。 (5) 今はteratermで確認作業をされているので問題ではありませんが、ご提示のソースコードで、受信についてイベントハンドラcomSerialPort_DataReceivedが呼ばれるようになっていないように見えます。そうだとすると、teratermで動くようになり、ご自身のプログラムで試す段になっても受信できません。再度確認してみてください。 https://docs.microsoft.com/ja-jp/dotnet/api/system.io.ports.serialport.datareceived?view=dotnet-plat-ext-3.1 (6) > こうなってくると、やっぱり変換ケーブルに問題があるということになるんでしょうか、、 その変換ケーブルで他の機器でも良いから動いた実績がまだないのであれば、不良品でないとも言い切れません。別のPCや機器に接続して試してみるなどの確認方法もあります。(ヌルモデム/クロスケーブルであることは確認してください)
a_s_

2020/06/24 10:36

お返事、ありがとうございます。 色々と知る機会を得られて、すごく勉強になります。 (5)についても、確認してみます。ご指摘ありがとうございます。 (3)と(4)に記載して頂いた情報から、ケーブルを替え、デバッグメニューを見ながらいろいろ入力したら通信することができました! 原因は、クロスケーブルが良くなかった(もしかしたらストレートケーブルだった?)のと、改行コードの設定(今まで自分で最後に\nと打っていましたが要りませんでした、、)だと思われます。 teratermに文字が返ってくるようになり、autosetもPCから起動させることができるようになりました。 本当に助かりました!ありがとうございました!!
dodox86

2020/06/24 10:38

通信自体ができるようになってよかったです。後は自作のプログラムの方ですね。がんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問