Получите вес от взвешивающей машины, которая подключена к COM1 и получает жир в молоке из дополнительного VGA

105
11

Я попытался разработать приложение для чтения Weight from Weighing Machine. Я использовал 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, а процессор получает сигналы от дополнительного VGA-порта. Но когда я подключаю взвешивающий аппарат, я вообще не получаю никаких данных. Итак, есть ли какие-либо проблемы с моим кодом?

спросил(а) 2014-09-06T11:50:00+04:00 6 лет, 5 месяцев назад
1
Решение
60

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

Вам нужно будет открыть порт Com до того, как произойдет какое-либо событие DataReceived.

Вы настраиваете порты, но никогда не открываете их. Начните с простой кнопки.

ответил(а) 2014-09-06T12:00:00+04:00 6 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема