- 締切済み
C言語でのRS232Cとの通信
今後,電動ステージをRS232Cを持つコントローラとVisual studio2008で動かすことになったのですが, プログラム初心者のため,動かし方がわかりません. 一応,いくつかのサイトで調べた方法を試したのですが,動かすことができませんでした. 下に現在のプログラムソースを張ってあります. また,コントローラの諸元は, ボーレート:9600 データ長:8ビット ストップビット:1ビット パリティ:なし です. 皆さんのアドバイスを頂けたら,幸いです. また,このような質問は初めてなので,どういった情報がわかれば尚良いかを教えて頂けると幸いです. [プログラムソース] #include <stdio.h> #include <windows.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <time.h> #define CR 0x0d #define LF 0x0a HANDLE hCom; void init(char *com, int baudrate); void m_move(double pos); int main() { double pos; init("COM1", 9600); printf("移動量 = ");scanf("%lf", &pos); m_move(pos); CloseHandle(hCom); } void init(char *com, int baudrate) { DCB dcb; hCom = CreateFile("COM1", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); GetCommState(hCom, &dcb); dcb.BaudRate = baudrate; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; SetCommState(hCom, &dcb); } void m_move(double pos) { int Send_Res, SendLen; char Send_Buf[4000]; char cmd[256]; DWORD wbyte; sprintf(cmd, "LMA ,,%.2lf", pos); //LMA はステージを動かすコマンド printf("%s", cmd); strcpy(Send_Buf, cmd); SendLen = strlen(Send_Buf); Send_Buf[SendLen] = CR; Send_Buf[SendLen + 1] = LF; Send_Res = WriteFile(hCom, Send_Buf, SendLen+2, &wbyte, NULL); fflush(stdout); Sleep(100); }
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- nak777r
- ベストアンサー率36% (49/136)
>今回パソコン同士は接続しないので,ストレートで合っていると思います. パソコン同士だからはクロスとか、意味不明です ストレートとクロスの意味わかってますか? 232Cの規格で判りやすく書くと 2番ピンが耳で 3番ピンが口です 相手の口が喋った言葉を耳で聞く、つまり、自分の口と相手の耳 相手の口と自分の耳をつなぎます つまり、2番ピンと3番ピンをつなぐ結線をクロス結線と言います 一方モデムは、電話線が物理的にクロスしています、 (受話器の口で喋ると耳側で聞こえますよね) なので、パソコンとモデム間をクロスにする必要は無いので ストレート結線になります 一概には言えませんが、普通はクロスケーブルが一般的です ここら辺はちゃんと仕様書を確認した方がいいです
- yama1718
- ベストアンサー率41% (670/1618)
>ケーブルについては,今までは気にしていませんでしたので,確認したところ,ストレートでした。 >今回パソコン同士は接続しないので,ストレートで合っていると思います。 >また,Tera Termでは文字を入力してもカーソルに表示されていない状況でした プログラムよりも先に通信ケーブルだと思う、標準のCOMポートはモデム相手に作られています。 相手がモデムと同じ様に信号線を操作しているかも怪しいのでは? プログラムに取り組むのはターミナルソフトでコマンドのやり取りができてからですね。 添付の画像の様なシンプルな結線で試される事を勧めます。 左はクロス結線で右がストレート結線、 それぞれの下の結線はRTS-CTSのフロー制御さえ省いた最もシンプルなケーブルです。
お礼
わざわざ画像まで用意して頂きありがとうございます. ケーブルについて勉強してから出直してきます.
- tsunji
- ベストアンサー率20% (196/958)
No2です。 仕様書はきっちりと確認すること。思いますではダメ。 1週間悩んで調べたら、ケーブルが原因だったとかよくある話です。 あと金がないなら知恵を絞ってください。
お礼
ご回答ありがとうございました。 もう一度よく勉強し直して頑張ってみます.
- Hayashi_Trek
- ベストアンサー率44% (366/818)
通信条件や接続ケーブルは合っているのか? TeraTermで電動ステージと繋いで、電動ステージに手入力でコマンド送れますか? 研究の目的は、PCでシリアル通信することじゃなく、電動ステージの制御にあるのだから 通信を簡単に行えるC#やVB.NETで作成したらどうですか?
- tsunji
- ベストアンサー率20% (196/958)
まず、COMポートの番号はあってますか? ケーブルはストレート?クロス?ちゃんとあってますか? あと、COMポートをもう1個用意し(USB-RS232C変換等)、クロス接続し、TeraTerm等で文字列がきちんと出力していることを確認した方が良いです。 仕事なら、RS-232Cのラインモニタを用意したほうが良いですよ。
補足
Tera Termで確認したところ,“COM1”になっていました. ケーブルについては,今までは気にしていませんでしたので,確認したところ,ストレートでした.今回パソコン同士は接続しないので,ストレートで合っていると思います. また,Tera Termでは文字を入力してもカーソルに表示されていない状況でした. 仕事でなく研究なので,新しくラインモニタを購入するのは少し厳しいかもしれません.
- joqr
- ベストアンサー率18% (742/4026)
>また,このような質問は初めてなので,どういった情報がわかれば尚良いかを教えて頂けると幸いです. 仕事だろ? なら、上司か、先輩に聞けばいい そんなちゃっちいプログラム組まなくても 誰かが持っているからもらえばいい まずは、動くプログラムを眺めた方が良い 結局は、素人だろうが玄人だろうが 書くことは同じなんだから 0から始めるよりも、答えから入る方がこの世界は理解だと思う コーディングができなきゃ、話にもならんからね?
補足
研究に必要な実験に使用する予定です. 先輩たちはLinuxで動かしていたため,C言語のプログラムは誰も持っていない状況です. 自分の実験では,Linuxで動作確認できていない機器を使用しているため,ステージの方もC言語で組みたいと考えています.
お礼
すいません、クロスとストレートの意味がよくわかっていませんでした. 勉強し直してから出直してきます.