今後,電動ステージを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件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
>今回パソコン同士は接続しないので,ストレートで合っていると思います.
パソコン同士だからはクロスとか、意味不明です
ストレートとクロスの意味わかってますか?
232Cの規格で判りやすく書くと
2番ピンが耳で
3番ピンが口です
相手の口が喋った言葉を耳で聞く、つまり、自分の口と相手の耳
相手の口と自分の耳をつなぎます
つまり、2番ピンと3番ピンをつなぐ結線をクロス結線と言います
一方モデムは、電話線が物理的にクロスしています、
(受話器の口で喋ると耳側で聞こえますよね)
なので、パソコンとモデム間をクロスにする必要は無いので
ストレート結線になります
一概には言えませんが、普通はクロスケーブルが一般的です
ここら辺はちゃんと仕様書を確認した方がいいです
No.5
- 回答日時:
>ケーブルについては,今までは気にしていませんでしたので,確認したところ,ストレートでした。
>今回パソコン同士は接続しないので,ストレートで合っていると思います。
>また,Tera Termでは文字を入力してもカーソルに表示されていない状況でした
プログラムよりも先に通信ケーブルだと思う、標準のCOMポートはモデム相手に作られています。
相手がモデムと同じ様に信号線を操作しているかも怪しいのでは?
プログラムに取り組むのはターミナルソフトでコマンドのやり取りができてからですね。
添付の画像の様なシンプルな結線で試される事を勧めます。
左はクロス結線で右がストレート結線、
それぞれの下の結線はRTS-CTSのフロー制御さえ省いた最もシンプルなケーブルです。
No.4
- 回答日時:
No2です。
仕様書はきっちりと確認すること。思いますではダメ。
1週間悩んで調べたら、ケーブルが原因だったとかよくある話です。
あと金がないなら知恵を絞ってください。
No.3
- 回答日時:
通信条件や接続ケーブルは合っているのか?
TeraTermで電動ステージと繋いで、電動ステージに手入力でコマンド送れますか?
研究の目的は、PCでシリアル通信することじゃなく、電動ステージの制御にあるのだから
通信を簡単に行えるC#やVB.NETで作成したらどうですか?
No.2
- 回答日時:
まず、COMポートの番号はあってますか?
ケーブルはストレート?クロス?ちゃんとあってますか?
あと、COMポートをもう1個用意し(USB-RS232C変換等)、クロス接続し、TeraTerm等で文字列がきちんと出力していることを確認した方が良いです。
仕事なら、RS-232Cのラインモニタを用意したほうが良いですよ。
この回答への補足
Tera Termで確認したところ,“COM1”になっていました.
ケーブルについては,今までは気にしていませんでしたので,確認したところ,ストレートでした.今回パソコン同士は接続しないので,ストレートで合っていると思います.
また,Tera Termでは文字を入力してもカーソルに表示されていない状況でした.
仕事でなく研究なので,新しくラインモニタを購入するのは少し厳しいかもしれません.
No.1
- 回答日時:
>また,このような質問は初めてなので,どういった情報がわかれば尚良いかを教えて頂けると幸いです.
仕事だろ?
なら、上司か、先輩に聞けばいい
そんなちゃっちいプログラム組まなくても
誰かが持っているからもらえばいい
まずは、動くプログラムを眺めた方が良い
結局は、素人だろうが玄人だろうが
書くことは同じなんだから
0から始めるよりも、答えから入る方がこの世界は理解だと思う
コーディングができなきゃ、話にもならんからね?
この回答への補足
研究に必要な実験に使用する予定です.
先輩たちはLinuxで動かしていたため,C言語のプログラムは誰も持っていない状況です.
自分の実験では,Linuxで動作確認できていない機器を使用しているため,ステージの方もC言語で組みたいと考えています.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
strchr() の第2引数はなぜ int ...
-
CStringをwchar_tに変換したい
-
_TCHAR*での引数の読み込み
-
間接操作のレベルとは
-
fgetsなどのときのstdinのバッ...
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
ftoa の作り方
-
標準ライブラリ関数の自作につ...
-
c言語です。
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
構造体のアライメント調整
-
間接参照のレベルが異なっています
-
文字列から空白を取り除きたい...
-
起動時の引数の取得方法が分か...
-
コマンドラインに入力されてい...
-
配列をnビットシフトする
-
RGB→YUV変換のプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報