はじめまして。
私は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 ]);
上記のように書けばと考えたのですが間違いでしょうか?
記述の仕方がわからないので教えてください。どうぞよろしくお願いします。
ステッピングモータのPC制御について質問です。
-
rikerume
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ステッピングモータのPC制御について質問です。
バイナリで送信したいのならfwriteなどで送信する必要があります。
printfだとどうやってもテキストとなってします。
あと提示されたコードは並び順が出鱈目です。
・確保が2回ある。
・宣言より代入が先。
printfだとどうやってもテキストとなってします。
あと提示されたコードは並び順が出鱈目です。
・確保が2回ある。
・宣言より代入が先。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: ステッピングモータのPC制御について質問です。
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がbyte型変数へのポインタだったとして(つまり、unsigned char* Dataの書き間違いだったとして)、次の行のprintfの引数でまた新たにbyteの配列を作っていますので、Dataに格納した要素数4の配列はまったく使用されません。
RS232を触る前に、少しC言語の基礎を勉強したほうがいいかと思います。
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がbyte型変数へのポインタだったとして(つまり、unsigned char* Dataの書き間違いだったとして)、次の行のprintfの引数でまた新たにbyteの配列を作っていますので、Dataに格納した要素数4の配列はまったく使用されません。
RS232を触る前に、少しC言語の基礎を勉強したほうがいいかと思います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: ステッピングモータのPC制御について質問です。
勘で書くとJavaが混じっているのでは? とは思いますが順番がおかしい説明にはなりませんね。
補足的にC++でnewは使えますがC言語ではnewは使えませんと書いておきます。文法はどちらを使うか明確にしてもらったほうが良いと思います。
補足的にC++でnewは使えますがC言語ではnewは使えませんと書いておきます。文法はどちらを使うか明確にしてもらったほうが良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。