用QT实现同仪器通信的完整项目

该项目使用QT实现对灯箱仪器的控制,包括串口通信、设备通信协议和界面设计。通过Dialog类进行人机交互,LampCtrl类处理设备通信,CLogManager类记录日志。通信协议涉及色温、亮度、频率和开关控制的设置与查询。
摘要由CSDN通过智能技术生成

本项目为了实现对灯箱仪器的控制,自动从系统查找串口,并设置固定的通讯参数。

1、类关系

类之间的关系如下:
在这里插入图片描述
Dialog为界面类,主要完成人机交互。LampCtrl为设备控制类,主要完成同仪器的通信。CLogManager为日志记录,记录通信的状态等。

2、设备的通信协议

1.色温设定:
发送格式:
<ID,C=数值>(数值范围:0100,ID:19)
例:对 2 号设备设定 50%色温
<2,C=50>
正确返回:<ID,B=OK> 例: <2,B=OK>
错误返回:无返回

2.亮度设定:
发送格式:
<ID,L=数值>(数值范围(只能带 1 位小数):0.0~ 100.0,ID:1~ 9)
例:对 3 号设备设定 100%亮度
< 3,L=100.0>
正确返回:<ID,B=OK> 例: < 3,B=OK>
错误返回:无返回

3.频率设定:
发送格式:
<ID,F=数值>(数值范围 :ID:1~9)
数值范围为:000~999HZ 时,数值直接输,
例:对 5 号设备设定 666HZ 频率
<5,F=666>
正确返回:<ID,B=OK>例: <5,B=OK>
错误返回:无返回

4.开关控制:
开灯发送格式:
<ID,S=ON>
例:关闭 5 号设备灯
<5,S=OFF>
正确返回:<ID,B=OK>例: <5,B=OK>
错误返回:无返回

5.查询设备状态:
发送格式:
<ID,I=INFO>
例:对 6 号设备查询状态
<6,I=INFO>
正确返回状态:<ID,C=数值,L=数值,F=数值,S=ON/OFF>
错误返回:无返回

3、界面设计

在这里插入图片描述

4、Dialog类

#ifndef DIALOG_H
#define DIALOG_H

#include
#include “lampctrl.h”

namespace Ui {
class Dialog;
}
class CFormula;

class Dialog : public QDialog
{
Q_OBJECT

public:
explicit Dialog(QWidget *parent = 0);
virtual ~Dialog();

public:
void keyPressEvent(QKeyEvent *event);

private:
void InitUI();
void UpdateStatus(bool bIsConnected );
void SpaceLCDDisplay( double dbVal );
void TempLCDDisplay( double dbVal );
void FreqLCDDisplay( double dbVal );
void UpdateTurn( bool bOpen );

private slots:
void on_ptOK_clicked();
void on_ptConnect_clicked();
void OnFreqSpinValueChanged( double dbVal );
void OnFreqSliderValueChanged( int iVal );
void OnTempSpinValueChanged( double dbVal );
void OnTempSliderValueChanged( int iVal );
void OnSpaceSpinValueChanged( double dbVal );
void OnSpaceSliderValueChanged( int iVal );
void OnAutoValueChanged(bool bVal );
void on_ptSave_clicked();
void OnFormulaIndexChanged(int index);
void on_btnTurn_clicked();

private:
Ui::Dialog ui;
LampCtrl theCtrl;
QString m_strCfgFile;
QList<CFormula
> m_Formula;
bool m_bTurn;
};

#endif // DIALOG_H

=============================================

#include “dialog.h”
#include “ui_dialog.h”
#include
#include “Log/LogManager.h”
#include
#include
#include “cformula.h”

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);

m_bTurn = false;
m_strCfgFile = QCoreApplication::applicationDirPath().append("/config.ini");

InitUI();
theCtrl.Startup();

}

Dialog::~Dialog()
{
theCtrl.StopRun();
ILog.StopRun();

m_Formula.clear();
delete ui;

}

void Dialog::InitUI()
{
double dbFreqVal = 1500.0f, dbSpaceVal=10.0f, dbTempVal=10.0f;
//频率-滑动条==================================
int nMin = 0;
int nMax = 15000;
ui->FreqSlider->setMinimum(nMin); // 最小值
ui->FreqSlider->setMaximum(nMax); // 最大值
ui->FreqSlider->setSingleStep(1); // 步长
//频率-微调框
double dbMin = 0;
double dbMax = 15000;
ui->FreqSpin->setMinimum(dbMin); // 最小值
ui->FreqSpin->setMaximum(dbMax); // 最大值
ui->FreqSpin->setSingleStep(1); // 步长
//频率-连接信号槽
connect(ui->FreqSpin, SIGNAL(valueChanged(double)), this, SLOT(OnFreqSpinValueChanged(double)));
connect(ui->FreqSlider, SIGNAL(valueChanged(int)), this, SLOT(OnFreqSliderValueChanged(int)));
ui->FreqSpin->setValue( dbFreqVal );

//色温-滑动条==================================
nMin = 0;
nMax = 100;
ui->TempSlider->setMinimum(nMin);  // 最小值
ui->TempSlider->setMaximum(nMax);  // 最大值
ui->TempSlider->setSingleStep(1);  // 步长
//色温-微调框
dbMin = 0;
dbMax = 100;
ui->TempSpin->setMinimum(dbMin);  // 最小值
ui->TempSpin->setMaximum(dbMax);  // 最大值
ui->TempSpin->setSingleStep(1);   // 步长
//色温-连接信号槽
connect(ui->TempSpin,   SIGNAL(valueChanged(double)), this, SLOT(OnTempSpinValueChanged(double)));
connect(ui->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

atuexe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值