VB RS-232C 通信プログラム
何度もお世話になっております。(VB6.0 MSCommを使用した通信プログラムを作成中です。)私は新卒で食品会社に入社したのですが,プログラムの分かる上司が身近では誰1人といない状況で困っています。
今作成しているのは,重量計に荷物が乗った段階で作業者がデータ転送ボタン(重量計についている)を押すと,重量計のデータ(500kgというデータ)をシリアルでCOM1に取り込み,フォームにエクセルのセルを作成し(OLEを用いて)保存できるようにしたいと考えています。
(重量計から送られてくるデータのフォーマット)
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8
S T , N T , + 0 0 1 2 . 3 4 k g CR LF
ST ; ヘッダ1 NT ; ヘッダ2 CRLF ; ターミネータ
の18バイトのデータです。
ここで質問なのですが
(1) 以下のプログラムで重量はバイト配列に受信できていますでしょうか?(実際に重量計とPCを接続できれば良いのですが工場の稼動状況が関わっておりすぐにはできません。)
(2) 18バイトのデータを受信するからと言って RThreshold = 18 として良いのでしょうか? 普通,データは1バイトずつ送られてくると思うので RThreshold = 1としてイベントを発生させる必要があるのかとも思うんですが。
'MSComm1,2(COM1,2)コントロールの初期設定
Private Sub Form_Load()
MSComm1.CommPort = 1 '通信ポートを設定
MSComm1.Settings = "9600,n,8,1" '通信条件の設定
MSComm1.RThreshold = 18 '固定長のデータ
End Sub
Private Sub Port1_Click() 'Port1_Clickのクリックイベントプロシージャ
If MSComm1.PortOpen = False Then 'シリアルポートのオープン
MSComm1.PortOpen = True
End If
LPort1.Text = "" 'テキストボックスのクリア受信
End Sub
Private Sub MSComm1_OnComm() '受信のOnCommイベント
Dim Buffer1(0 To 17) As Byte '受信バッファの変数宣言(18バイト)
Select Case MSComm1.CommEvent 'CommEventプロパティに対する処理
Case comEvReceive '受信データ有り
Buffer1 = MSComm1.Input '受信データをバッファに格納
'これより下は受信した18バイトから必要なデータ8バイト目から4バイト分切り出し,dという配列(4バイト)に格納できないかと考えました。
Dim i As Integer
Dim d(0 To 3) As Byte
d = MidB(Buffer1, 8, 4)
LPort1.Text = d
'LPort1.Text = Buffer1 '受信データをテキストボックスに表示
End Sub
お礼
アドバイスありがとうございました。 このURLにはわたしも目をつけていました。 非常に参考になりました。 VBAでもmscommを標準にしてくれても良いのに... どうもありがとうございます。