ページ 11

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

Posted: 2012年5月25日(金) 19:56
by rikerume
はじめまして。
私は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 ]);

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

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

Posted: 2012年5月25日(金) 21:00
by rikerume
トピ主です。
ルールを把握してませんでした。コードを張り付けるのを忘れていました。申し訳ありません。

コード:

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 ]); 

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

Posted: 2012年5月25日(金) 22:52
by softya(ソフト屋)
バイナリで送信したいのならfwriteなどで送信する必要があります。
printfだとどうやってもテキストとなってします。

あと提示されたコードは並び順が出鱈目です。
・確保が2回ある。
・宣言より代入が先。

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

Posted: 2012年5月25日(金) 22:55
by beatle
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言語の基礎を勉強したほうがいいかと思います。

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

Posted: 2012年5月25日(金) 22:59
by softya(ソフト屋)
勘で書くとJavaが混じっているのでは? とは思いますが順番がおかしい説明にはなりませんね。
補足的にC++でnewは使えますがC言語ではnewは使えませんと書いておきます。文法はどちらを使うか明確にしてもらったほうが良いと思います。