|
分類:[VB.NET/VB2005 以降]
前回、No75068でシリアル送信コマンドについて質問させて頂きました。 今回は、前回の続きで受信の方で質問なのですが、 【接続構成】 PC-----→A基板-----→B基板 ↑←-------------------↓
PC-A基板(USB) A基板-B基板(LAN) B基板-PC(USB)
現在上のような環境で、PCからデータを送信→A基板→B基板を経由してPCで受信するというものを作ろうとしています。 B基板にデータが送られた時、レスポンスコマンドが発行され、PCで受信します。
【仕様】 レスポンスコマンドの仕様は @STX(HEX)02Hで固定 ANode No(HEX)B基板の番号(30H 30H) BSub Add(HEX)B基板の番号(30H 30H) CEnd Code(HEX)終了コード(正常なら30H 30H、それ以外ならエラー) DMRC(HEX)30Hで固定 ESRC(HEX)30Hで固定 FResCode(HEX)レスポンスコード(正常なら30H 30H 30H 30H、それ以外ならエラー) GReadData(HEX)35H 35H HEXT(HEX)03Hで固定 IBCC(HEX)A〜Hまでの値を利用 これらをまとめたデータ [@STX]+[ANode No]+[BSub Add]+[CEnd Code]+[DEFGFINE]+[HEXT]+[IBCC] となっております。 レスポンスコマンドをPC側で受信した際の処理として、 STEP1:受信したレスポンスコマンドの先頭が02H(STX)であれば、IのBCCまでデータを受信し、A〜HまでのBCCの計算を行う。 STEP2:CのEnd Codeが30H 30H以外ならエラー処理("終了コードが異常です"の表示) STEP3:FのResCodeが30H 30H 30H 30H以外ならエラー処理("レスポンスコードが異常です"の表示) STEP4:GのデータをASCUの55に変換→55(16進数)を10進数に変換して10を掛ける。 STEP5:受信したBCCと計算したBCCが同じなら、STEP4の計算結果を表示する。
上記のような処理を行いたいのですが、これらをコード上で表現する際、
【Q1】 STEP1:レスポンスコマンドを配列に格納する(Byte型?) 配列の0番目にSTXを代入(SerialPortのReadメソッド)し、if文で判定を行う(配列の0番目=02H) if文の判定が真なら、Readメソッドで残りのデータを配列に代入する。 BCC計算用の変数を宣言し、計算結果を格納する。 STEP2:if文で判定し、偽だった場合MsgBoxを使用する。 STEP3:STEP2と同じ STEP4:受信したデータ(ASCUの35H 35H)をString(Hex関数?)に一度変換し、そこからint型に変換して10を掛ける。 STEP5:if文の判定で真なら、MsgBoxを使用して、STEP4の結果を表示する。
という考えなのですが、上記の考えで出来ますでしょうか。
【Q2】 コマンド/レスポンス方式の通信に関しての確認なのですが、 コマンド/レスポンス方式の通信では、送信データに対してレスポンス側(今回でいうB基板)が送信データを受け取った際に、 レスポンスコードを発行(機器によってコードの仕様は異なる)し、それを送信元(PC)にデータを返答するという認識であっていますでしょうか。
長くなりましたが、以上です。 まとまりがなくて、非常にわかり辛いかもしれませんが、ご指摘等頂けますでしょうか。 よろしくお願いします。
|