Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
通信データのグラフ化
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30409#CommentId83558
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
素人
 (学生)
投稿日時
2019/6/12 16:46:07
魔界の仮面弁士さま
回答ありがとうございます。
私のほうで分かったこととの報告と、質問をさせてください。
①わかったこと
エラーの件ですが、通信タイムアウト時間の設定によることが分かりました。
ご指摘のあった内容をもとに調べていったところ、接続先で設定しているタイムアウト時間より短い時間でTimer1_Tickを実施すると、先ほどのエラーが発生しました。
②処理の流れについて
計測開始時(Form1_Load とか Button1_Click とか)に、ModbusClient を New しておき、
Timer1_Tick では、ModbusClient インスタンスのReadHoldingRegisters を呼ぶように記述しました。
↓のコードです。(コメントアウトしている部分は、Button1_Click内でModbusClientをNewしているので、ここでは、コメントアウトしています。)
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
'Dim ModbusClient As EasyModbus.ModbusClient = New EasyModbus.ModbusClient(TextBox1.Text, 502)
ModbusClient.Connect()
Registers = ModbusClient.ReadHoldingRegisters(0, 3)
Label1.Text = Registers(0)
xdata = Registers(0)
Chart1.Series("受信データ").Points.AddXY(time, xdata)
ModbusClient.Disconnect()
この記述にしてしまうと、Timer1_Tick 内のModbusClientを使用する箇所で、次のエラーが出てしまいます。
"非共有メンバーを参照するには、オブジェクト参照が必要です。"
このエラーを回避するためには、Timer1_Tick 内でもModbusClientをNewするしかありません。
何か根本的に間違えているのでしょうか。
③受信データの値に応じてイベントを発生させたい。
例えば、受信データが800を超えたときにメッセージを表示させます。
当たり前ですが、Timer1_Tick 内に記述してしまうと、800を超えている間、ずっとメッセージが表示されてしまいます。
If xdata > 800 Then
MessageBox.Show("800を超えました!")
End If
これを、ある値を超えたら、1度だけメッセージを表示させるためには、どうすればよいのでしょうか。