键相和转速添加下降沿和上升沿

This commit is contained in:
zhangsheng 2026-03-07 16:13:55 +08:00
parent 37ac87a797
commit 3609ab9047
6 changed files with 403 additions and 227 deletions

View File

@ -486,6 +486,7 @@ int ConfigMgr::Save(QString & file_path) {
channel_item.insert("keyphase_points",ptr->variables_[cid].keyphase_points);
channel_item.insert("speed_delay",ptr->variables_[cid].speed_delay);
channel_item.insert("zero_speed",ptr->variables_[cid].zero_speed);
channel_item.insert("fail",ptr->variables_[cid].fail);
QJsonObject alarm;
alarm["danger_high_level"] = ptr->danger_high[cid].level;
alarm["danger_high_hysteresis"] = ptr->danger_high[cid].hysteresis;
@ -517,6 +518,7 @@ int ConfigMgr::Save(QString & file_path) {
channel_item.insert("point_name",ptr->variables_[cid].point_name);
channel_item.insert("keyphase_points",ptr->variables_[cid].keyphase_points);
channel_item.insert("speed_delay",ptr->variables_[cid].speed_delay);
channel_item.insert("fail",ptr->variables_[cid].fail);
}
slot_item[QString::number(cid + 1)] = channel_item;
@ -1038,6 +1040,7 @@ void ConfigMgr::Load(QString filename) {
speed_data->variables_[j].keyphase_points = channel["keyphase_points"].toInt();
speed_data->variables_[j].speed_delay = channel["speed_delay"].toInt();
speed_data->variables_[j].zero_speed = channel["zero_speed"].toInt();
speed_data->variables_[j].fail = channel["fail"].toBool();
if(channel.contains("alarm")){
QJsonObject alarm = channel["alarm"].toObject();
speed_data->danger_high[j].level = alarm["danger_high_level"].toDouble();
@ -1075,6 +1078,7 @@ void ConfigMgr::Load(QString filename) {
keyphase_data->variables_[j].point_name = channel["point_name"].toString();
keyphase_data->variables_[j].keyphase_points = channel["keyphase_points"].toInt();
keyphase_data->variables_[j].speed_delay = channel["speed_delay"].toInt();
keyphase_data->variables_[j].fail = channel["fail"].toBool();
}
cards_.push_back(keyphase_data);

View File

@ -463,6 +463,7 @@ typedef struct {
bool alert_latching;
bool overspeed_latching;
bool normal_latching;
bool fail;
} TachometerVariables;
typedef struct {
@ -476,6 +477,7 @@ typedef struct {
int events_per_revolution;
int keyphase_points;
int speed_delay;
bool fail;
} KeyphaseVariables;
typedef struct {

View File

@ -92,6 +92,11 @@ void KeyPhase::UpdateData(std::shared_ptr<KeyphaseData> &keyphase_data) {
keyphase_data->variables_[i].events_per_revolution = ui->spinBox_events_per_revolution_1->value();
keyphase_data->variables_[i].keyphase_points = ui->spinBox_points->value();
keyphase_data->variables_[i].speed_delay = ui->spinBox_delay->value();
if(ui->radioButton_falling_edge->isChecked()){
keyphase_data->variables_[i].fail = true;
}else if(ui->radioButton_rising_edge->isChecked()){
keyphase_data->variables_[i].fail = false;
}
} else if (i + 1 == 2) {
keyphase_data->variables_[i].active = ui->checkBox_enable_2->isChecked();
keyphase_data->variables_[i].normal_voltage_high = ui->doubleSpinBox_high_2->value();
@ -102,6 +107,11 @@ void KeyPhase::UpdateData(std::shared_ptr<KeyphaseData> &keyphase_data) {
keyphase_data->variables_[i].events_per_revolution = ui->spinBox_events_per_revolution_2->value();
keyphase_data->variables_[i].keyphase_points = ui->spinBox_points_2->value();
keyphase_data->variables_[i].speed_delay = ui->spinBox_delay_2->value();
if(ui->radioButton_falling_edge_2->isChecked()){
keyphase_data->variables_[i].fail = true;
}else if(ui->radioButton_rising_edge_2->isChecked()){
keyphase_data->variables_[i].fail = false;
}
} else if (i + 1 == 3) {
keyphase_data->variables_[i].active = ui->checkBox_enable_3->isChecked();
keyphase_data->variables_[i].normal_voltage_high = ui->doubleSpinBox_high_3->value();
@ -112,6 +122,11 @@ void KeyPhase::UpdateData(std::shared_ptr<KeyphaseData> &keyphase_data) {
keyphase_data->variables_[i].events_per_revolution = ui->spinBox_events_per_revolution_3->value();
keyphase_data->variables_[i].keyphase_points = ui->spinBox_points_3->value();
keyphase_data->variables_[i].speed_delay = ui->spinBox_delay_3->value();
if(ui->radioButton_falling_edge_3->isChecked()){
keyphase_data->variables_[i].fail = true;
}else if(ui->radioButton_rising_edge_3->isChecked()){
keyphase_data->variables_[i].fail = false;
}
} else if (i + 1 == 4) {
keyphase_data->variables_[i].active = ui->checkBox_enable_4->isChecked();
keyphase_data->variables_[i].normal_voltage_high = ui->doubleSpinBox_high_4->value();
@ -122,6 +137,11 @@ void KeyPhase::UpdateData(std::shared_ptr<KeyphaseData> &keyphase_data) {
keyphase_data->variables_[i].events_per_revolution = ui->spinBox_events_per_revolution_4->value();
keyphase_data->variables_[i].keyphase_points = ui->spinBox_points_4->value();
keyphase_data->variables_[i].speed_delay = ui->spinBox_delay_4->value();
if(ui->radioButton_falling_edge_3->isChecked()){
keyphase_data->variables_[i].fail = true;
}else if(ui->radioButton_rising_edge_3->isChecked()){
keyphase_data->variables_[i].fail = false;
}
}
}
}
@ -157,6 +177,10 @@ void KeyPhase::Init() {
ui->doubleSpinBox_threshold_1->setValue(keyphase_data->variables_[i].threshold);
ui->doubleSpinBox_hysteresis_1->setValue(keyphase_data->variables_[i].hysteresis);
ui->spinBox_events_per_revolution_1->setValue(keyphase_data->variables_[i].events_per_revolution);
if(keyphase_data->variables_[i].fail)
ui->radioButton_falling_edge->setCheckable(true);
else
ui->radioButton_rising_edge->setCheckable(true);
} else if (i + 1 == 2) {
ui->checkBox_enable_2->setChecked(keyphase_data->variables_[i].active);
ui->doubleSpinBox_high_2->setValue(keyphase_data->variables_[i].normal_voltage_high);
@ -175,6 +199,10 @@ void KeyPhase::Init() {
ui->doubleSpinBox_threshold_2->setValue(keyphase_data->variables_[i].threshold);
ui->doubleSpinBox_hysteresis_2->setValue(keyphase_data->variables_[i].hysteresis);
ui->spinBox_events_per_revolution_2->setValue(keyphase_data->variables_[i].events_per_revolution);
if(keyphase_data->variables_[i].fail)
ui->radioButton_falling_edge_2->setCheckable(true);
else
ui->radioButton_rising_edge_2->setCheckable(true);
} else if (i + 1 == 3) {
ui->checkBox_enable_3->setChecked(keyphase_data->variables_[i].active);
ui->doubleSpinBox_high_3->setValue(keyphase_data->variables_[i].normal_voltage_high);
@ -193,6 +221,10 @@ void KeyPhase::Init() {
ui->doubleSpinBox_threshold_3->setValue(keyphase_data->variables_[i].threshold);
ui->doubleSpinBox_hysteresis_3->setValue(keyphase_data->variables_[i].hysteresis);
ui->spinBox_events_per_revolution_3->setValue(keyphase_data->variables_[i].events_per_revolution);
if(keyphase_data->variables_[i].fail)
ui->radioButton_falling_edge_3->setCheckable(true);
else
ui->radioButton_rising_edge_3->setCheckable(true);
} else if (i + 1 == 4) {
ui->checkBox_enable_4->setChecked(keyphase_data->variables_[i].active);
ui->doubleSpinBox_high_4->setValue(keyphase_data->variables_[i].normal_voltage_high);
@ -211,6 +243,10 @@ void KeyPhase::Init() {
ui->doubleSpinBox_threshold_4->setValue(keyphase_data->variables_[i].threshold);
ui->doubleSpinBox_hysteresis_4->setValue(keyphase_data->variables_[i].hysteresis);
ui->spinBox_events_per_revolution_4->setValue(keyphase_data->variables_[i].events_per_revolution);
if(keyphase_data->variables_[i].fail)
ui->radioButton_falling_edge_4->setCheckable(true);
else
ui->radioButton_rising_edge_4->setCheckable(true);
}
}
ui->comboBox_relative_number->setCurrentIndex(base_ptr->relative_number);

View File

@ -245,7 +245,7 @@
<attribute name="title">
<string>通道 1</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_4">
<layout class="QVBoxLayout" name="verticalLayout_14">
<item>
<widget class="QCheckBox" name="checkBox_enable_1">
<property name="text">
@ -619,18 +619,21 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QPushButton" name="pushButton">
<widget class="QRadioButton" name="radioButton_falling_edge">
<property name="text">
<string>===&gt;</string>
<string> 下降沿</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_11">
<widget class="QRadioButton" name="radioButton_rising_edge">
<property name="text">
<string>通道 2</string>
<string> 上升沿</string>
</property>
</widget>
</item>
@ -655,7 +658,7 @@
<attribute name="title">
<string>通道 2</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_12">
<layout class="QVBoxLayout" name="verticalLayout_20">
<item>
<widget class="QCheckBox" name="checkBox_enable_2">
<property name="text">
@ -1029,18 +1032,21 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_15">
<layout class="QVBoxLayout" name="verticalLayout_12">
<item>
<widget class="QLabel" name="label_12">
<widget class="QRadioButton" name="radioButton_falling_edge_2">
<property name="text">
<string>通道 1</string>
<string> 下降沿</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_4">
<widget class="QRadioButton" name="radioButton_rising_edge_2">
<property name="text">
<string>&lt;===</string>
<string> 上升沿</string>
</property>
</widget>
</item>
@ -1071,39 +1077,6 @@
<height>0</height>
</size>
</property>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>220</y>
<width>95</width>
<height>87</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_14">
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>===&gt;</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_39">
<property name="text">
<string> ===</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>&lt;===</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
@ -1115,7 +1088,7 @@
<attribute name="title">
<string>通道 3</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_11">
<layout class="QVBoxLayout" name="verticalLayout_21">
<item>
<widget class="QCheckBox" name="checkBox_enable_3">
<property name="text">
@ -1489,18 +1462,21 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_22">
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
<widget class="QPushButton" name="pushButton_5">
<widget class="QRadioButton" name="radioButton_falling_edge_3">
<property name="text">
<string>===&gt;</string>
<string> 下降沿</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_13">
<widget class="QRadioButton" name="radioButton_rising_edge_3">
<property name="text">
<string>通道 4</string>
<string> 上升沿</string>
</property>
</widget>
</item>
@ -1525,7 +1501,7 @@
<attribute name="title">
<string>通道 4</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_13">
<layout class="QVBoxLayout" name="verticalLayout_22">
<item>
<widget class="QCheckBox" name="checkBox_enable_4">
<property name="text">
@ -1899,18 +1875,21 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_29">
<layout class="QVBoxLayout" name="verticalLayout_13">
<item>
<widget class="QLabel" name="label_14">
<widget class="QRadioButton" name="radioButton_falling_edge_4">
<property name="text">
<string>通道 3</string>
<string> 下降沿</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_6">
<widget class="QRadioButton" name="radioButton_rising_edge_4">
<property name="text">
<string>&lt;===</string>
<string> 上升沿</string>
</property>
</widget>
</item>

View File

@ -97,6 +97,12 @@ void Tachometer::UpdateData(std::shared_ptr<TachometerData> &speed_data) {
speed_data->variables_[i].events_per_revolution = ui->spinBox_events_per_revolution_1->value();
speed_data->variables_[i].record_output = ui->comboBox_record_output_1->currentIndex();
speed_data->variables_[i].two_ma_clamp = ui->checkBox_two_ma_clamp_1->isChecked();
if(ui->radioButton_falling_edge->isChecked()){
speed_data->variables_[i].fail = true;
}else if(ui->radioButton_rising_edge->isChecked()){
speed_data->variables_[i].fail = false;
}
// -alarm
speed_data->danger_high[i].level = ui->lineEdit_danger_high_level->text().toDouble();
speed_data->danger_high[i].hysteresis = ui->lineEdit_danger_high_hysteresis->text().toDouble();
@ -137,7 +143,11 @@ void Tachometer::UpdateData(std::shared_ptr<TachometerData> &speed_data) {
speed_data->variables_[i].events_per_revolution = ui->spinBox_events_per_revolution_2->value();
speed_data->variables_[i].record_output = ui->comboBox_record_output_2->currentIndex();
speed_data->variables_[i].two_ma_clamp = ui->checkBox_two_ma_clamp_2->isChecked();
if(ui->radioButton_falling_edge_2->isChecked()){
speed_data->variables_[i].fail = true;
}else if(ui->radioButton_rising_edge_2->isChecked()){
speed_data->variables_[i].fail = false;
}
// -alarm
speed_data->danger_high[i].level = ui->lineEdit_danger_high_level_2->text().toDouble();
speed_data->danger_high[i].hysteresis = ui->lineEdit_danger_high_hysteresis_2->text().toDouble();
@ -178,7 +188,11 @@ void Tachometer::UpdateData(std::shared_ptr<TachometerData> &speed_data) {
speed_data->variables_[i].events_per_revolution = ui->spinBox_events_per_revolution_3->value();
speed_data->variables_[i].record_output = ui->comboBox_record_output_3->currentIndex();
speed_data->variables_[i].two_ma_clamp = ui->checkBox_two_ma_clamp_3->isChecked();
if(ui->radioButton_falling_edge_3->isChecked()){
speed_data->variables_[i].fail = true;
}else if(ui->radioButton_rising_edge_3->isChecked()){
speed_data->variables_[i].fail = false;
}
// -alarm
speed_data->danger_high[i].level = ui->lineEdit_danger_high_level_3->text().toDouble();
speed_data->danger_high[i].hysteresis = ui->lineEdit_danger_high_hysteresis_3->text().toDouble();
@ -219,7 +233,11 @@ void Tachometer::UpdateData(std::shared_ptr<TachometerData> &speed_data) {
speed_data->variables_[i].events_per_revolution = ui->spinBox_events_per_revolution_4->value();
speed_data->variables_[i].record_output = ui->comboBox_record_output_4->currentIndex();
speed_data->variables_[i].two_ma_clamp = ui->checkBox_two_ma_clamp_4->isChecked();
if(ui->radioButton_falling_edge_3->isChecked()){
speed_data->variables_[i].fail = true;
}else if(ui->radioButton_rising_edge_3->isChecked()){
speed_data->variables_[i].fail = false;
}
// -alarm
speed_data->danger_high[i].level = ui->lineEdit_danger_high_level_4->text().toDouble();
speed_data->danger_high[i].hysteresis = ui->lineEdit_danger_high_hysteresis_4->text().toDouble();
@ -281,7 +299,10 @@ void Tachometer::Init() {
ui->spinBox_events_per_revolution_1->setValue(speed_data->variables_[i].events_per_revolution);
ui->comboBox_record_output_1->setCurrentIndex(speed_data->variables_[i].record_output);
ui->checkBox_two_ma_clamp_1->setChecked(speed_data->variables_[i].two_ma_clamp);
if(speed_data->variables_[i].fail)
ui->radioButton_falling_edge->setCheckable(true);
else
ui->radioButton_rising_edge->setCheckable(true);
// -alarm
ui->lineEdit_danger_high_level->setText(QString::number(speed_data->danger_high[i].level));
ui->lineEdit_danger_high_hysteresis->setText(QString::number(speed_data->danger_high[i].hysteresis));
@ -329,7 +350,10 @@ void Tachometer::Init() {
ui->spinBox_events_per_revolution_2->setValue(speed_data->variables_[i].events_per_revolution);
ui->comboBox_record_output_2->setCurrentIndex(speed_data->variables_[i].record_output);
ui->checkBox_two_ma_clamp_2->setChecked(speed_data->variables_[i].two_ma_clamp);
if(speed_data->variables_[i].fail)
ui->radioButton_falling_edge_2->setCheckable(true);
else
ui->radioButton_rising_edge_2->setCheckable(true);
// -alarm
ui->lineEdit_danger_high_level_2->setText(QString::number(speed_data->danger_high[i].level));
ui->lineEdit_danger_high_hysteresis_2->setText(QString::number(speed_data->danger_high[i].hysteresis));
@ -377,7 +401,10 @@ void Tachometer::Init() {
ui->spinBox_events_per_revolution_3->setValue(speed_data->variables_[i].events_per_revolution);
ui->comboBox_record_output_3->setCurrentIndex(speed_data->variables_[i].record_output);
ui->checkBox_two_ma_clamp_3->setChecked(speed_data->variables_[i].two_ma_clamp);
if(speed_data->variables_[i].fail)
ui->radioButton_falling_edge_3->setCheckable(true);
else
ui->radioButton_rising_edge_3->setCheckable(true);
// -alarm
ui->lineEdit_danger_high_level_3->setText(QString::number(speed_data->danger_high[i].level));
ui->lineEdit_danger_high_hysteresis_3->setText(QString::number(speed_data->danger_high[i].hysteresis));
@ -425,7 +452,10 @@ void Tachometer::Init() {
ui->spinBox_events_per_revolution_4->setValue(speed_data->variables_[i].events_per_revolution);
ui->comboBox_record_output_4->setCurrentIndex(speed_data->variables_[i].record_output);
ui->checkBox_two_ma_clamp_4->setChecked(speed_data->variables_[i].two_ma_clamp);
if(speed_data->variables_[i].fail)
ui->radioButton_falling_edge_4->setCheckable(true);
else
ui->radioButton_rising_edge_4->setCheckable(true);
// -alarm
ui->lineEdit_danger_high_level_4->setText(QString::number(speed_data->danger_high[i].level));
ui->lineEdit_danger_high_hysteresis_4->setText(QString::number(speed_data->danger_high[i].hysteresis));

View File

@ -254,7 +254,7 @@
<attribute name="title">
<string>通道 1</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_17">
<layout class="QVBoxLayout" name="verticalLayout_42">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
@ -611,7 +611,7 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<widget class="QGroupBox" name="groupBox_10">
<property name="title">
@ -860,48 +860,97 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<layout class="QVBoxLayout" name="verticalLayout_17">
<item>
<widget class="QLabel" name="label_28">
<property name="minimumSize">
<size>
<width>105</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>键齿数:</string>
</property>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QLabel" name="label_28">
<property name="minimumSize">
<size>
<width>105</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>键齿数:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_events_per_revolution_1">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_25">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>1 - 10000</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QSpinBox" name="spinBox_events_per_revolution_1">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_25">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>1 - 10000</string>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QRadioButton" name="radioButton_falling_edge">
<property name="text">
<string> 下降沿</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup_2</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_rising_edge">
<property name="text">
<string> 上升沿</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup_2</string>
</attribute>
</widget>
</item>
</layout>
</item>
</layout>
</item>
@ -1516,7 +1565,7 @@
<attribute name="title">
<string>通道 2</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_9">
<layout class="QVBoxLayout" name="verticalLayout_48">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_27">
<item>
@ -2113,48 +2162,73 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_24">
<layout class="QVBoxLayout" name="verticalLayout_43">
<item>
<widget class="QLabel" name="label_32">
<property name="minimumSize">
<size>
<width>105</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>键齿数:</string>
</property>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout_24">
<item>
<widget class="QLabel" name="label_32">
<property name="minimumSize">
<size>
<width>105</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>键齿数:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_events_per_revolution_2">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_33">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>1 - 10000</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QSpinBox" name="spinBox_events_per_revolution_2">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_33">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>1 - 10000</string>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QRadioButton" name="radioButton_falling_edge_2">
<property name="text">
<string> 下降沿</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_rising_edge_2">
<property name="text">
<string> 上升沿</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
@ -2769,7 +2843,7 @@
<attribute name="title">
<string>通道 3</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_10">
<layout class="QVBoxLayout" name="verticalLayout_60">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_31">
<item>
@ -3123,7 +3197,7 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<layout class="QHBoxLayout" name="horizontalLayout_23">
<item>
<widget class="QGroupBox" name="groupBox_23">
<property name="title">
@ -3366,48 +3440,73 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_36">
<layout class="QVBoxLayout" name="verticalLayout_59">
<item>
<widget class="QLabel" name="label_36">
<property name="minimumSize">
<size>
<width>105</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>键齿数:</string>
</property>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<item>
<widget class="QLabel" name="label_36">
<property name="minimumSize">
<size>
<width>105</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>键齿数:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_events_per_revolution_3">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_37">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>1 - 10000</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QSpinBox" name="spinBox_events_per_revolution_3">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_37">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>1 - 10000</string>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout_10">
<item>
<widget class="QRadioButton" name="radioButton_falling_edge_3">
<property name="text">
<string> 下降沿</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_rising_edge_3">
<property name="text">
<string> 上升沿</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
@ -4022,7 +4121,7 @@
<attribute name="title">
<string>通道 4</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_11">
<layout class="QVBoxLayout" name="verticalLayout_65">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_48">
<item>
@ -4379,7 +4478,7 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_18">
<layout class="QHBoxLayout" name="horizontalLayout_36">
<item>
<widget class="QGroupBox" name="groupBox_32">
<property name="title">
@ -4622,48 +4721,73 @@
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_45">
<layout class="QVBoxLayout" name="verticalLayout_64">
<item>
<widget class="QLabel" name="label_40">
<property name="minimumSize">
<size>
<width>105</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>键齿数:</string>
</property>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout_18">
<item>
<widget class="QLabel" name="label_40">
<property name="minimumSize">
<size>
<width>105</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>键齿数:</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_events_per_revolution_4">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_41">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>1 - 10000</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QSpinBox" name="spinBox_events_per_revolution_4">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_41">
<property name="minimumSize">
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>1 - 10000</string>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
<widget class="QRadioButton" name="radioButton_falling_edge_4">
<property name="text">
<string> 下降沿</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_rising_edge_4">
<property name="text">
<string> 上升沿</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
@ -5386,5 +5510,6 @@
<connections/>
<buttongroups>
<buttongroup name="buttonGroup"/>
<buttongroup name="buttonGroup_2"/>
</buttongroups>
</ui>