投稿者 魔界の仮面弁士  (社会人) 投稿日時 2019/6/12 14:01:27
データ型を意識するために、フォームの先頭に
Option Strict On
を記述しておくことをお奨めします。

> EasyModbus.Exceptions.ConnectionException
> HResult=0x80131500
ConnectionException なので、何らかの通信エラーですね。
HResult 値の 0x80131500 は COR_E_EXCEPTION を意味する汎用エラーです。

EasyModbus の仕様は知らないのですが、おそらくは
「既にオープン済みのポートをさらに開こうとした」
「まだオープンしていないデバイスから値を読み取ろうとした」
のどちらかであろうと想像します。


> New EasyModbus.ModbusClient(TextBox1.Text, 502)
第一引数が IP アドレス、第二引数が ポート番号だそうですが、
これって毎回オープンする必要があるのでしょうか?

開き続けておいても構わないのであれば、こんな感じで処理できそうです。


🔷計測開始時(Form1_Load とか Button1_Click とか)は、初期設定のみ。
 🔹Chat1 の凡例を整備
 🔹ModbusClient を New しておく
 🔹Timer1.Start() を呼び出す

🔷Timer1_Tick では、データの取得とグラフ描画
 🔹先ほど New しておいた ModbusClient インスタンスの
  ReadHoldingRegisters を呼び、Integer 配列を得る
 🔹得られたデータを Chat1 にプロットする。
 🔸リアルタイムに得られた Integer 配列の各データを表示させるために
  Label1~Label3 の Text に表示させる必要があるのなら、
  Integer から String への型変換も忘れずに!

🔷計測終了時の処理も必要(Fomr1_FormClosing とか Button2_Click とか)
 🔹Timer1.Stop() を呼び出して、タイマーを止める
 🔹ModbusClient インスタンスはもう使わないので、Disconnect しておく


> ①指定したデータ数取得したら、グラフを一度クリアして、再描画(これを繰り返す)
何故クリアするのでしょう?

凡例(Legends)や系列(Series)については、
デザイン時に設定しておくか、初回設定のみで良い気がするのですが…。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30287
http://hanatyan.sakura.ne.jp/chart/chart1.htm

リアルタイムに更新させるべきは、プロットされる
ポイントデータ(Points あるいは DataSource) だけですよね。


> ②通信データのリアルタイム表示

どのように表示させるのでしょうか?

➊ 時間の経過と共に、描画されるデータ数がどんどん増えていくもの
➋ データの総数は固定だが、時間ごとにデータが変化するもの
➌ データの最大数が決まっており、それを超えると古いものから消えていくもの

※先の私のサンプルは、上記 ➌ のパターンです。