从称重机获取重量,该机器连接到COM1并从可选VGA获取牛奶中的脂肪含量

时间:2014-09-06 08:50:02

标签: c# wpf mvvm

我尝试开发一种从称重机读取重量的应用程序。我已经使用WPF和MVVM来完成这项任务。

这是我的代码:

MainWindow.xaml

<Window .............>
    <Window.DataContext>
        <vm:MainWindowViewModel />
    </Window.DataContext>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="10" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="10" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="10" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Row="0" Grid.Column="0" FontSize="24" Text="Weight :" />
        <TextBlock Grid.Row="0" Grid.Column="1" FontSize="24" Text="{Binding Weight}" />
        <TextBlock Grid.Row="2" Grid.Column="0" FontSize="24" Text="Fat :" />
        <TextBlock Grid.Row="2" Grid.Column="1" FontSize="24" Text="{Binding Fat}" />
        <TextBlock Grid.Row="4" Grid.Column="0" FontSize="24" Text="Ports :" />
        <ComboBox Grid.Row="4" Grid.Column="1" FontSize="24" ItemsSource="{Binding SerialPorts}"/>
    </Grid>
</Window>

MainWindowViewModel.cs

public class MainWindowViewModel : ViewModelBase
{
    SerialPort spCom1;
    SerialPort spCom2;

    public MainWindowViewModel()
    {
        spCom1 = new SerialPort("COM1", 9600, Parity.None, 8);
        spCom1.ReadTimeout = 1000;
        spCom1.DataReceived += spCom1_DataReceived;

        spCom2 = new SerialPort("COM2", 9600, Parity.None, 8);
        //115200 -- baudrate
        spCom2.ReadTimeout = 1000; 
        spCom2.DataReceived += spCom2_DataReceived;

        SerialPorts = new ObservableCollection<string>(SerialPort.GetPortNames());
    }

    void spCom1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        spCom1.Open();
        Weight = spCom1.ReadExisting().ToString();
        spCom1.Close();
    }

    void spCom2_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        spCom2.Open();
        Fat = spCom2.ReadExisting().ToString();
        spCom2.Close();
    }

    private string _weight;
    public string Weight
    {
        get
        {
            return _weight;
        }
        set
        {
            _weight = value;
            NotifyPropertyChanged("Weight");
        }
    }

    private string _fat;
    public string Fat
    {
        get
        {
            return _fat;
        }
        set
        {
            _fat = value;
            NotifyPropertyChanged("Fat");
        }
    }

    private ObservableCollection<string> _serialPorts;
    public ObservableCollection<string> SerialPorts
    {
        get
        {
            return _serialPorts;
        }
        set
        {
            _serialPorts = value;
            NotifyPropertyChanged("SerialPorts");
        }
    }

}

从上面提到的代码中可以看出,我正在尝试从连接到COM1的称重机获得重量。我试图从其机器中获取牛奶的脂肪含量,从RS232端口输出数据,CPU从可选的VGA端口接收信号。但是当我连接称重机时,我根本得不到任何数据。那么,我的代码有问题吗?

1 个答案:

答案 0 :(得分:1)

void spCom1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    spCom1.Open();
    ....

在任何DataReceived事件发生之前,您必须打开Com端口

您正在配置端口,但您从未打开它们。从一个简单的按钮开始。