3

300 バイトの生データを 1 秒間に 20 回解析して、一連の WPF コントロール プロパティに変換するとしたら、どのようなソリューションになりますか?

より具体的には、Modbus 対応の PLC があり、それを制御するための WPF HMI を作成する必要があります。Modbus は、データ変更のポーリングを必要とする通信プロトコルです。対照的に、WPF と .NET Framework は一般にイベント ドリブン モデルを促進するため、データを 1 秒間に 20 回直接コントロールにプッシュするのは不自然に思えます。Modbus にはデータの変更を報告する手段がないだけでなく、バ​​イトのハイレベルな表現も提供されません。開発者は、署名のない short の配列を意味のあるものに適切に分析する必要があります。

このようなデータを解析することは私にとって大したことではありませんが、一連のイベント対応の DependencyProperties (データ バインディングを想定) への適切な変換を考え出すことは困難です。変更を監視するための初期化コードや一時ストレージを大量に用意したくありません。

4

1 に答える 1

2

周期的にポーリングされたデータを依存関係プロパティに入れる必要はありません。このようなデータ プロパティはバインディングのソースとしてのみ使用されるため、 INotifyPropertyChangedを実装するクラスに含めるだけで十分です。

約 10 回のポーリング サイクルのデータを収集し、データ プロパティを毎秒 2 回以上更新しないことをお勧めします。別のスレッドで確実にポーリングするため、以下のコードのように、Dispatcher.BeginInvokeによって UI スレッドでPropertyChangedイベントを呼び出すようにする必要があります。

public class DataCollector : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private byte[] someData;

    public byte[] SomeData
    {
        get { return someData; }
        set
        {
            someData = value;

            if (PropertyChanged != null)
            {
                Application.Current.Dispatcher.BeginInvoke(PropertyChanged, this, new PropertyChangingEventArgs("SomeData"));
            }
        }
    }
}
于 2012-03-20T09:50:36.183 に答える