Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
RS232C データ受信のタイミングでプログラムを動かす
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=20720#CommentId55676
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
daive
 (社会人)
投稿日時
2014/12/1 19:40:33
お役にたつかどうか解りませんが、
1.Windows API による 232 通信でも、受信バッファに受信されたデータ数を
検出する事が可能です。
⇒やさしく書いた過去サイトが、無いか検索してみました。
例えば、
WindowsでRS232Cを使う
http://members.jcom.home.ne.jp/0434383301/vc10.htm
受信されたデータ数を実際にReadFile()を呼び出す前に知りたい場合があります。
省略
⇒データが固定長であれば、決まった長さになるまで、受信データ数を、定期的にチェックする。
↑説明通りであれば、固定長の筈ですよね?
可変長であれば、ターミネータ(C/R、L/F、EOT etc)で判別、
固定長でもなく、ターミネータでも判定出来ない、適当通信であれば、
データ数の増加がなくなったら、1回分受信終了と判定するなど。
’
現状のコード構成に近いままで行うには、
> Do While CommInput(hCom, buf, Len(buf)) = 0 ' 受信する(Module1内の受信命令を実行)
> DoEvents
> Loop
固定長データなのですから、
上記のコードの後に、決まったデータ数に達するまで、
データを追加で読込むコードを追加すれば良いのでは?
2.イベント駆動型プログラミングでは、
>'23時のデータを受信するまで常にデータを受信する
>Do While nipo <> 2300
> DoEvents
> :中略
> Loop
の様な、無限ループ的プログラムは、書かない事が前提です。
DoEventsは、現在の環境では、DoEventsの利点よりも、欠点の方が多く、
安易な使用は避けるべきものです。
EXCEL-VBAでは、標準でインターバルタイマが実装されていないので、
application.ontime(検索ワード:vba application.ontime)の使い方を工夫して、
定周期に、受信バッファのデータ数を調べる方法へ、変更をお勧めします。
(データ受信間隔:1時間に1回程度ですので、対応可能。)
または、1分以上に1回程度チェックするのであれば、テーブルクエリのデータ更新間隔を
イベントに使う事も可能。
3.苦労して、Windows API から 232 を使わなくても、VB.NET であれば、
232 通信は、簡単にできるのですが、敷居が高いようであれば、
受信バッファに受信されたデータ数を検出する事
からかも。
’
VB.NET から EXCEL を使う方法もありますが、
慣れていないと混乱するかもしれません。
EXCEL-DNA という手段もあります。