このような問題に直面したのはこれが初めてです。これは私の職業ではなく単なる趣味であり、これまでの参考文献はありません。私のプログラムでは、マシンを制御するためのいくつかの関数を 1 つずつ追加しました。最後の機能 (温度測定) を追加した後、他の機能で問題が発生し始めました (約 8 つの機能が同時に実行されています。発生している問題は、これとは関係のないグラフ (モーターの RPM) にあります)。温度測定を実行している場合と実行していない場合のこれら 2 つのチャートの違いがわかります. モーターの実際の速度は両方のチャートで同じですが、2 番目のチャートでは、アプリケーションが遅くなるため、その場でピースを失います下。
温度機能なし。 温度機能付き
特に、この機能は上記の制御を妨げています。アプリケーションの作業負荷が重くなっているため、またはサンプリングが必要なため、それらを取得するのに時間がかかるためだと思います。
private void AddT(decimal valueTemp)
{
sumTemp += valueTemp;
countTemp += 1;
if (countTemp >= 20) //take 20 samples and make average
{
OnAvarerageChangedTemp(sumTemp / countTemp);
sumTemp = 0;
countTemp = 0;
}
}
private void OnAvarerageChangedTemp(decimal avTemp)
{
float val3 = (float)avTemp;
decimal alarm = avTemp;
textBox2.Text = avTemp.ToString("F");
if (alarm > 230)
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.Stream = Properties.Resources.alarma;
player.Play();
timer4.Start();
}
else
{
timer4.Stop();
panel2.BackColor = SystemColors.Control;
}
}
この関数を別のスレッドで実行すると問題が解決するかどうか、またどうすれば解決できるのでしょうか? または、問題を解決する別の方法がある場合は、サンプルコードをいただければ幸いです。
更新、メソッド呼び出しが追加されました。
これが AddT メソッドを呼び出す方法です
if (b != "")
{
decimal convTemp; //corrente resistenza
decimal.TryParse(b, out convTemp);
AddT(convTemp);}
これは、シリアルからデータを受け取り、それをクラスに渡す方法です。このクラスは、使用されていない文字を取り除き、値をさまざまな変数に返します。 これは、使用されていない文字を取り除き、値を返すクラスです。そして、これが私がシリアル受信データを管理する方法です。私のコーディングを見た後、私を笑わないでください。私は別の仕事をしており、独学で学んでいます。