Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
通信データのグラフ化
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30409#CommentId83553
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
素人
 (学生)
投稿日時
2019/6/12 11:33:31
一部コードを書き換えてみました。
書き換えた内容は、
①指定したデータ数取得したら、グラフを一度クリアして、再描画(これを繰り返す)
②通信データのリアルタイム表示
①に関しては、↓のコードでできましたが、②が実装できません…
↓のコードで記述すると、次のエラーが発生してしまいます。
このエラーが起こる原因が分からず、困っています。
//////////////エラーの内容//////////////////////
EasyModbus.Exceptions.ConnectionException
HResult=0x80131500
Message=connection error
Source=EasyModbus
スタック トレース:
場所 EasyModbus.ModbusClient.ReadHoldingRegisters(Int32 startingAddress, Int32 quantity)
場所 Modbus_TCP.Form1.Timer1_Tick(Object sender, EventArgs e) (C:\Users\User01\source\repos\Modbus TCP\Modbus TCP\Form1.vb):行 239
場所 System.Windows.Forms.Timer.OnTick(EventArgs e)
場所 System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
場所 Modbus_TCP.My.MyApplication.Main(String[] Args) ():行 81
///////////////////////////////////////////////////////
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
'グラフタイプの設定(省略)
'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)
End Sub