• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBへの変換の仕方 RS232C送信データとチェックサム)

VBへの変換の仕方 RS232C送信データとチェックサム

このQ&Aのポイント
  • 質問内容: 以下のプログラムをVBに変換する仕方を教えてください。サンプルプログラム 1110 CHKSUM=0 1120 FOR i=1 to LEN(A$) 'A$は送信データ 1130 CHKSUM=CHKSUM+ASC(MID$(A$,i,1) 1140 NEXT i 1150 C$=CHR$((CHKSUM+13) MOD 256) 1160 PRINT #1,A$;CHR$(13);C$; 私のVBプログラムは1110行から1150行まではそのままで CHKSUM=0 FOR i=1 TO LEN(A$) CHKSUM=CHKSUM+ASC(MID$(A$,i,1) NEXT i C$=CHR$((CHKSUM+13) MOD 256) としました。 送信部分を MSComm1.Output =A$ & CHR$(&H13) & C$ としてみましたが 1160行にあるセミコロン ";" はCHR$(&h3B) として送る必要があるのでしょうか? MSComm1.Output =A$ & CHR$(&h3B) & CHR$(&h13) ・・・・・・ また、データとしてA$="I 02"のチェックサムは "リ" となりますが正しいのでしょうか? 以上ご教示ください。
  • VBへの変換方法についての質問です。質問文中のプログラムをVBに変換する方法を教えてください。また、送信部分でセミコロンの代わりにCHR$(&h3B)を使う必要があるのか、データとしてA$="I 02"のチェックサムが正しいかについても教えてください。
  • VBへの変換方法について教えてください。質問文中のプログラムをVBに変換する方法を教えてください。また、送信部分でセミコロンの代わりにCHR$(&h3B)を使う必要があるのか、A$="I 02"のチェックサムが正しいかについても教えてください。

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

  • ベストアンサー
  • noah7150
  • ベストアンサー率46% (116/251)
回答No.1

VBのバージョンは? 新しいものであれば内部はUniCode化されていると思うので昔のソースを移行するのは大変と思う、特に半角文字を扱う場合は 送信データはStrConvでAsciiにしてバイト配列にしチェックサムは XOR演算したと思ったけど・・・ 偶数、奇数があるので最後に反転しないといけない場合もあるけど それとPrint文の;は続けて書く場合に使いますのでCHR$(&h3B) を付ける必要はありません Print "a","b" とすると a_______b となります_=Space また Print "a";"b"とすると ab となります Print "a" Print "b" なら a b Print "a"; Print "b" なら ab 通常送信データには改行を送らないので 最後の Print "b" も Print "b"; と書きます

lonvic
質問者

補足

ありがとう。 出力文中のコロン、セミコロン、カンマ はモニター表示形式と同じですよね。思い出しました。CHR$(&H13)は"CR" (&H0D) なので私の間違いでした。 どうもターゲット機器のサンプル通信プログラム仕様のバージョンが違う様で、コマンド自体も違っている様です。今日一日かけてコマンドを探るソフトを追加して応答が来るまで待ちます。皆さんありがとう。また宜しく。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

移植性を考えるなら Dim A$ → Dim A As String MID$(A$, i, 1) → Mid(A, i, 1) とすべきですね。これはVB.NET以降は型記号が使えないためです。 チェックサムは色々な形式があるので、何が正解かは「方式による」 としか言えません。Print文にある";"セミコロンは変換不要ですが、 ","はvbTabに変換し、後方に何も無い場合は最後にvbCrLfを追加する ようにします。 あと、CHR$(&H13)というのは独特の区切り記号なんですかねぇ? もしかしてキャリッジリターンのことあればvbCrにすべきです。

lonvic
質問者

補足

ありがとう。ターゲット機器のチェックサム計算式はサンプル通り。出力文のセミコロンは不要との事、了解。文法の件は了解。感謝。

関連するQ&A