本文へ移動
サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

1人が「役に立った」と評価
ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MCプロトコル 1ビットだけONしたいとき)

MCプロトコルで1ビットだけONする方法についての質問

2023/10/19 19:23

このQ&Aのポイント
  • MCプロトコル通信アプリを作成中。ワード単位書き込みはできているが、ビット単位の書き込み方法がわからない。
  • MELSECプロトコルマニュアルを確認したが、ビット単位書き込みの方法についての説明がない。
  • バイト配列にどの値を書き込めば1ビットだけONになるのかわからない。文字列連結からASCII変換する方法が良いかどうか知りたい。
※ 以下は、質問の原文です

MCプロトコル 1ビットだけONしたいとき

2018/05/07 08:05

お疲れ様です。
現在MCプロトコル通信アプリを作成しておりましてワード単位書き込みはできております。

文字列で連結させてアスキー変換する方法ではなく、
純粋にバイト配列を作って入れ込んでSocket の Write, Read をやる方法をとっております。

MELSECプロトコルマニュアルをみたのですが、
ビット単位書き込みのときは、データ列をビット列で並べるだけ、という解釈しかできません。
たとえば1ビットだけONしたいときは、バイト配列に書き込むやりかただと、どういう値を書き込めばよいのでしょうか。 &H1 (0x01) という値を書き込んでも何もなりません。

やはり文字列連結からASCII変換して送るやりかたのほうが賢明なのでしょうか?

ご教授いただければ幸いです。。

質問者が選んだベストアンサー

ベストアンサー
2018/05/07 22:37
回答No.3

本件のMCプロトコルとは
三菱電機PLC通信プロトコルの事ですよね?

http://www.mitsubishielectric.co.jp/fa/download/index.html
MELSECコミュニケーションプロトコルリファレンスマニュアル Ver.AD
SH-080003 (6.63MB)

97/486ページ
ビット単位の一括書込み(コマンド: 1401)

ここに記載されてるけど

>データ列をビット列で並べるだけ
と、言う風には解釈できないけど?



>文字列で連結させてアスキー変換する方法ではなく
アスキーモードでなくバイナリモードの意味でしょうか?


>&H1 (0x01) という値を書き込んでも何もなりません。
例えばデバイスM100を1個だけとかの意味?
マニュアルをよく読みましょうね
0x0100ですね

0x01 00
  ↑   ↑
M100   M101


尚、通信系プログラムを作る時の鉄則として
データ読出し命令から作るベシ!
データ読出し命令が満足に動かないのに書込み命令は厳禁である

本件も読出し命令から先にプログラム&デバッグしていれば
悩むことなく完了した話でしょうね

お礼

2018/05/08 19:51

ありがとうございました。

>データ読出し命令が満足に動かないのに書込み命令は厳禁である

参考にさせていただきます!

質問者

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する

その他の回答 (3件中 1~3件目)

2018/05/07 17:49
回答No.2

プロトコル自体を作らないといけない

232Cで説明すると
今やってるのは
http://www.ee.fukui-nct.ac.jp/~yoneda/data/C/a_06.htm

このレベル

やらないといけないのは
http://www.picfun.com/serial22.html
このレベル

お礼

2018/05/08 19:51

ありがとうございます。
マイコンも難しいですね。SPIとか動かすのにとても苦労したことがあります。

質問者
2018/05/07 17:43
回答No.1

こんばんは
このプロトコルは全く無知ですので、ほんの少し場違いかとは思いますが一言。
”たとえば1ビットだけONしたいときは、バイト配列に書き込むやりかただと、どういう値を書き込めばよいのでしょうか。 &H1 (0x01) という値を書き込んでも何もなりません。”
上記文章箇所のみについてです。
”1ビットのみON”にする為のバイト単位の書込では、0x01を書き込むとビット0のみ1としてビット1~7までを0という書込になります。
ビット0のみ1として他ビット1~7は普遍とするためには、直前に該当するバイトを読み出してそのバイトと0x01をORする必要があります。ORすればビット1~7は変化しません。
以上、

お礼

2018/05/08 19:52

0x01をORする必要があります。ORすればビット1~7は変化しません。

ビット演算ですね。ありがとうございます。

質問者

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。