プロが教えるわが家の防犯対策術!

今後,電動ステージを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);
}

A 回答 (6件)

>今回パソコン同士は接続しないので,ストレートで合っていると思います.



パソコン同士だからはクロスとか、意味不明です
ストレートとクロスの意味わかってますか?

232Cの規格で判りやすく書くと
2番ピンが耳で
3番ピンが口です
相手の口が喋った言葉を耳で聞く、つまり、自分の口と相手の耳
相手の口と自分の耳をつなぎます
つまり、2番ピンと3番ピンをつなぐ結線をクロス結線と言います

一方モデムは、電話線が物理的にクロスしています、
(受話器の口で喋ると耳側で聞こえますよね)
なので、パソコンとモデム間をクロスにする必要は無いので
ストレート結線になります

一概には言えませんが、普通はクロスケーブルが一般的です
ここら辺はちゃんと仕様書を確認した方がいいです
    • good
    • 0
この回答へのお礼

すいません、クロスとストレートの意味がよくわかっていませんでした.
勉強し直してから出直してきます.

お礼日時:2012/08/23 15:32

>ケーブルについては,今までは気にしていませんでしたので,確認したところ,ストレートでした。


>今回パソコン同士は接続しないので,ストレートで合っていると思います。
>また,Tera Termでは文字を入力してもカーソルに表示されていない状況でした

プログラムよりも先に通信ケーブルだと思う、標準のCOMポートはモデム相手に作られています。
相手がモデムと同じ様に信号線を操作しているかも怪しいのでは?
プログラムに取り組むのはターミナルソフトでコマンドのやり取りができてからですね。

添付の画像の様なシンプルな結線で試される事を勧めます。
左はクロス結線で右がストレート結線、
それぞれの下の結線はRTS-CTSのフロー制御さえ省いた最もシンプルなケーブルです。
「C言語でのRS232Cとの通信」の回答画像5
    • good
    • 0
この回答へのお礼

わざわざ画像まで用意して頂きありがとうございます.
ケーブルについて勉強してから出直してきます.

お礼日時:2012/08/23 15:31

No2です。



仕様書はきっちりと確認すること。思いますではダメ。
1週間悩んで調べたら、ケーブルが原因だったとかよくある話です。

あと金がないなら知恵を絞ってください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
もう一度よく勉強し直して頑張ってみます.

お礼日時:2012/08/23 13:31

通信条件や接続ケーブルは合っているのか?


TeraTermで電動ステージと繋いで、電動ステージに手入力でコマンド送れますか?

研究の目的は、PCでシリアル通信することじゃなく、電動ステージの制御にあるのだから
通信を簡単に行えるC#やVB.NETで作成したらどうですか?
    • good
    • 0

まず、COMポートの番号はあってますか?



ケーブルはストレート?クロス?ちゃんとあってますか?

あと、COMポートをもう1個用意し(USB-RS232C変換等)、クロス接続し、TeraTerm等で文字列がきちんと出力していることを確認した方が良いです。

仕事なら、RS-232Cのラインモニタを用意したほうが良いですよ。

この回答への補足

Tera Termで確認したところ,“COM1”になっていました.
ケーブルについては,今までは気にしていませんでしたので,確認したところ,ストレートでした.今回パソコン同士は接続しないので,ストレートで合っていると思います.
また,Tera Termでは文字を入力してもカーソルに表示されていない状況でした.
仕事でなく研究なので,新しくラインモニタを購入するのは少し厳しいかもしれません.

補足日時:2012/08/23 12:36
    • good
    • 0

>また,このような質問は初めてなので,どういった情報がわかれば尚良いかを教えて頂けると幸いです.




仕事だろ?

なら、上司か、先輩に聞けばいい
そんなちゃっちいプログラム組まなくても
誰かが持っているからもらえばいい

まずは、動くプログラムを眺めた方が良い
結局は、素人だろうが玄人だろうが
書くことは同じなんだから

0から始めるよりも、答えから入る方がこの世界は理解だと思う

コーディングができなきゃ、話にもならんからね?

この回答への補足

研究に必要な実験に使用する予定です.
先輩たちはLinuxで動かしていたため,C言語のプログラムは誰も持っていない状況です.
自分の実験では,Linuxで動作確認できていない機器を使用しているため,ステージの方もC言語で組みたいと考えています.

補足日時:2012/08/23 12:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!