Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
通信データのグラフ化
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30409#CommentId83548
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
素人
 (学生)
投稿日時
2019/6/11 13:49:31
[実現させたいこと]
通信データをグラフに"リアルタイム"で表示させたい。
[実現できていること]
・通信データの受信
・グラフへの描画
ここまではできているのですが、通信データから受信する値をリアルタイムで受信したいです。
(リアルタイムといっても、タイムラグが発生するのは承知しています。)
今のプログラムを掲載しますが、
今は、ボタン1をクリックすると、その時に受信したデータを描画し続けるという結果になります。
受信データの変化をグラフに反映させるためには、ボタン1をクリックしなければなりませんが、
これを自動で(ボタン1をクリックしなくて)行えるようにしたいです。
いろいろ試してみたのですが、今の状態が、「実現させたいこと」に一番近い状態です。
どのようにコードを変更すれば良いのでしょうか。
Private Registers As Integer()
Private xdata As Double
Private Sub Button1_Click() Handles Button1.Click
Dim ComError = 0
Dim ModbusClient As EasyModbus.ModbusClient = New EasyModbus.ModbusClient(TextBox1.Text, 502)
Try
ModbusClient.Connect()
Catch ex As Exception
Label10.ForeColor = Color.Red
Label10.Text = "Error!"
ComError = 1
End Try
If ComError = 0 Then
Label10.ForeColor = Color.Black
Label10.Text = "Data..."
Registers = ModbusClient.ReadHoldingRegisters(0, 3)
Label1.Text = Registers(0)
Label2.Text = Registers(1)
Label3.Text = Registers(2)
ModbusClient.Disconnect()
End If
'Chart背景設定
'Load時に設定した画像をここで削除し、背景を白に変更
Chart1.ChartAreas("ChartArea1").InnerPlotPosition.Auto = True
Chart1.BackImage = ""
Chart1.BackImageAlignment = ChartImageAlignmentStyle.Center
Chart1.BackImageWrapMode = ChartImageWrapMode.Scaled
'背景色設定
Chart1.BackColor = Color.White
Chart1.BackImageTransparentColor = Color.Black
'/////////////////////////////Series設定/////////////////////////////
'同じスレッドからの呼び出しならそのまま実行
Chart1.Series.Clear() '既存の Series をクリアする場合
'Dim xaxis, yaxis As Series
Dim xaxis = Chart1.Series.Add("受信データ")
'凡例の見た目設定
Chart1.Legends(0).Font = New Font("MS Pゴシック", 10.0F, FontStyle.Bold)
'枠線色
Chart1.Legends(0).BorderColor = Color.Black
'背景色
Chart1.Legends(0).BackColor = Color.Yellow
'枠に影付け
Chart1.Legends(0).ShadowOffset = 4
'グラフタイプの設定
'接続時はとりあえずPoint表示
xaxis.BorderWidth = 3
xaxis.BorderDashStyle = ChartDashStyle.Solid
xaxis.ChartType = SeriesChartType.Point
'500msec/繰り返しTrueに設定
TextBox2.Text = CStr(CInt(500))
CheckBox1.Checked = True
'Timer1(受信用タイマー)を有効にする
Timer1.Enabled = True
'時間をリセット
time = 0
'*1000は、msecのため秒表記へ変更
CountData = CDbl(maxX / (CDbl(TextBox2.Text) / 1000))
Chart1.Series(0).Points.AddXY(time, xdata)
xdata = Registers(0)
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Chart1.Series("受信データ").Points.AddXY(time, xdata)
time += CDbl(TextBox2.Text) / 1000
End Sub