1

ウェイトを取得するためにウェイブリッジに接続するWPFアプリケーションがあります。

spWeigh = new SerialPort("COM1", 9600, Parity.Even, 7, StopBits.One);
            spWeigh.RtsEnable = false;
            spWeigh.DtrEnable = false;
            spWeigh.Handshake = Handshake.None;
            spWeigh.ReadTimeout = 10000;
            spWeigh.DataReceived += spWeigh_DataReceived;

spWeigh.Write(((char)5).ToString());


void spWeigh_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
 strResponseWeigh = spWeigh.ReadLine();
            if (strResponseWeigh.Length == 0)
            {
                MessageBoxWrapper.Show("Error in communication with weighbridge", "Error");
                return;
            }
string wt = strResponseWeigh.Substring(15, 6);
}

同じアプリケーションを別のウェイブリッジで使用する必要があります。次に、計量ブリッジのコードを次のように変更する必要があります。

 spWeigh = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
        spWeigh.RtsEnable = false;
        spWeigh.DtrEnable = false;
        spWeigh.Handshake = Handshake.None;
        spWeigh.ReadTimeout = 10000;
        spWeigh.DataReceived += spWeigh_DataReceived;

  void spWeigh_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        try
        {
            strResponseWeigh = spWeigh.ReadLine();
            if (strResponseWeigh=="")
            {
                MessageBoxWrapper.Show("Error communicating with the weighbridge", "Error");
                return;
            }

//Some more checking are to be done here depending on the response(different from the first weighbridge type)

 string wt = strResponseWeigh.Substring(2, 7);
}

計量ブリッジセクションを汎用化することは可能ですか?1つまたは複数の文字を計量ブリッジに送信し、応答を取得し、応答が有効かどうかを確認して、重みを読み取るだけです。

実際のコードを変更せずに、計量ブリッジに応じてこのファイルの一部の値を変更するように構成ファイルを作成することは可能ですか?

4

3 に答える 3

2

これを管理する最も洗練された方法は、SerialPortオブジェクトを、このオブジェクトを構成するプロパティを持つクラスにカプセル化することです。

構成ファイルに値を格納するには、config.appファイルに値を設定し、ConfigurationManagerクラスを使用して値にアクセスします。

于 2012-07-02T12:04:17.373 に答える
0

すでに述べたように、すべての動的な値(たとえば、Timeout、Com-Port-No ...)を構成ファイルに入れることができます。このファイルまたは独自のXML形式のファイルにはapp.configファイルを使用できます。

別のアプローチは、戦略パターンの実装である可能性があります。リンクを参照してください

メソッドとイベント(Connect、Disconnect、DataReceived)は、アルゴリズムを記述する戦略基本クラスで定義され、実装自体は派生戦略でカバーされます。

最大限の柔軟性を得るには、特に将来2つ以上の計量と異なる計量アルゴリズムをサポートする場合に、構成ファイルを戦略パターンと組み合わせて使用​​することもできます。たとえば、タイプAとBの重量を戦略1で計量し、タイプCとDの重量を戦略2で計量する必要があります。

于 2012-07-02T12:30:51.140 に答える
0

静的クラス図

このUMLにあるようなものが必要だと思います。WeighMachineクラス(抽象)では、WeighingReceivedイベントのようなものを定義し、別の抽象であるWeighMachineConfigへの参照を保持します。アプリケーションコードは、抽象WeighMachineのみを処理します(ファクトリを使用して、構成から正しいインスタンスを選択してインスタンス化します)。各計量機は、異なる構成パラメーターとそれに送信する異なるコマンドを持つことができるため、構成はWeighMachineConfigXクラスにカプセル化され、プロトコル/コマンドはWeighMachineXクラスにカプセル化される必要があります。具体的な計量機インスタンスがデータを受信すると、抽象WeighMachineクラスで定義されたパブリックイベントを呼び出す必要があります。

于 2012-07-02T13:32:28.270 に答える