ステッピングモータのPC制御について質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
rikerume

ステッピングモータのPC制御について質問です。

#1

投稿記事 by rikerume » 14年前

はじめまして。
私はC言語が苦手なのでアドバイスをいただきたく今回トピックをたてさせてもらいました。

ステッピングモータをPCで制御したいと考えてアクチュエータ用のコントローラーを購入しました。
このコントローラーはPCとRS232Cによるシリアル通信で専用の命令コマンドを送ってステッピングモータを動かすためのものです。そこでステッピングモータを一連の流れで動かしたいと思いプログラムを書こうと考えているのですがわからない状態なのでアドバイスいただきたいです。

この規格ではデータはバイナリで送らないといけないのですが、
たとえば「255」という値を送りたいとき

unsigned char X = 255;
printf("%d",X);

という風に書けばいいと思います。

仮にコントローラのコマンドの停止命令の送信フォーマットが
[ 255 ][ 33 ][ 1 ][ 0 ]
で、このコマンドを使いたい場合、プログラム上ではどのように表記すればよいのでしょうか?

Data = new byte [ 4 ];
Data[ 0 ] = 255;
Data[ 1 ] = 33;
Data[ 2 ] = 1;
Data[ 3 ] = 0;

unsigned char Data = new byte [ 4 ];
printf("%d",new byte [ 4 ]);

上記のように書けばと考えたのですが間違いでしょうか?
記述の仕方がわからないので教えてください。どうぞよろしくお願いします。

rikerume

Re: ステッピングモータのPC制御について質問です。

#2

投稿記事 by rikerume » 14年前

トピ主です。
ルールを把握してませんでした。コードを張り付けるのを忘れていました。申し訳ありません。

コード:

Data = new byte [ 4 ];
Data[ 0 ] = 255;
Data[ 1 ] = 33;
Data[ 2 ] = 1;
Data[ 3 ] = 0;

unsigned char Data = new byte [ 4 ];
printf("%d",new byte [ 4 ]); 

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ステッピングモータのPC制御について質問です。

#3

投稿記事 by softya(ソフト屋) » 14年前

バイナリで送信したいのならfwriteなどで送信する必要があります。
printfだとどうやってもテキストとなってします。

あと提示されたコードは並び順が出鱈目です。
・確保が2回ある。
・宣言より代入が先。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: ステッピングモータのPC制御について質問です。

#4

投稿記事 by beatle » 14年前

RS232にバイナリで送りたい、というのと、printf("%d", X)するという行為がまったく関係ないように思いますが如何でしょうか。
printfは標準出力に文字を表示するだけですから、特殊な設定を行なって標準出力をRS232に接続しておかない限り、RS232へはデータが送信されません。
softyaさんも書かれていますが、RS232に送りたいならfwriteや、WindowsならWindows APIを使用する必要があります。

もしかして、RS232にどのようなデータが送信されているのかを可視化するために、標準出力にも表示したい、ということでしょうか。

RS232は無関係な一般論として、new byte [4];とありますがC++ではbyteという型は標準ではありません。
まあ、多分unsigned charのtypedefでしょうからそう解釈するとして、new byte [4]の結果はbyte型変数が4つ並んだ配列です。

コード:

unsigned char Data = new byte [ 4 ];
は配列(へのポインタ)を、単なるunsigned char型の変数に格納しようとしています。

仮にDataがbyte型変数へのポインタだったとして(つまり、unsigned char* Dataの書き間違いだったとして)、次の行のprintfの引数でまた新たにbyteの配列を作っていますので、Dataに格納した要素数4の配列はまったく使用されません。

RS232を触る前に、少しC言語の基礎を勉強したほうがいいかと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ステッピングモータのPC制御について質問です。

#5

投稿記事 by softya(ソフト屋) » 14年前

勘で書くとJavaが混じっているのでは? とは思いますが順番がおかしい説明にはなりませんね。
補足的にC++でnewは使えますがC言語ではnewは使えませんと書いておきます。文法はどちらを使うか明確にしてもらったほうが良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る