こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

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

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

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

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

投稿日時 - 2018-05-07 08:05:22

QNo.9495957

暇なときに回答ください

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

本件の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-07 22:37:53

お礼

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

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

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

投稿日時 - 2018-05-08 19:51:03

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

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

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

このレベル

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

投稿日時 - 2018-05-07 17:49:40

お礼

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

投稿日時 - 2018-05-08 19:51:53

ANo.1

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

投稿日時 - 2018-05-07 17:43:35

お礼

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

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

投稿日時 - 2018-05-08 19:52:40

あなたにオススメの質問