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);
}

是否可以使地磅部分通用?我们所做的就是向地磅发送一个(或多个)字符,获取响应,检查响应是否有效并读取权重。

是否可以做一个配置文件,以便我们根据地磅更改此文件中的某些值而不更改实际代码?

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 回答