投稿者 素人  (学生) 投稿日時 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