Qt在新能源行业应用,称重传感器数据上传MES案例,WebAPI接口

目录

1、项目需求        

2、软件工作流程

3、软件图片

 4、部分源码(主界面和配置页面代码)


运行环境:win7+Qt5.14+mingw32

1、项目需求

        1) 显示录入成功,未成功提示

        2) 列表列出每条录入数据

        3) 可调阅历史数据

        4) 调取 MES 系统编号数据以供扫描

        

        

2、软件工作流程

        产品放在测试工位---->首次扫码枪扫去产品SN---->读取传感器数据(测试设备数据)----->数据(json格式数据)上传致MES服务器------>服务器返回测试数据OK/NG---------->数据保存本地

3、软件图片

        

主界面扫码

历史数据浏览 

 4、部分源码(主界面和配置页面代码)

逻辑流程代码暂时不外发

#include "mainwidget.h"
#include "ui_mainwidget.h"

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

    connect(ui->lb_Wdt_Act, SIGNAL(setQlabel()), this, SLOT(setQalbelSlot()));

    connect(&Dev,SIGNAL(SendApiData()),this,SLOT(recvApiData()));

    InitCtl();
    connect(ui->btn_Set_Scan,&QPushButton::clicked,[=](){
        Dev.s_Scn.Port=ui->cbx_Scan_Port->currentText();
        Dev.s_Scn.BaudRate=ui->cbx_Scan_Bt->currentText().toInt();
        Cfg.WriteParam("Scan","Port",Dev.s_Scn.Port);
        Cfg.WriteParam("Scan","BaudRate",Dev.s_Scn.BaudRate);
    });
    connect(ui->btn_Set_Wdt,&QPushButton::clicked,[=](){
        Dev.s_Wdt.Port=ui->cbx_Wtd_Port->currentText();
        Dev.s_Wdt.BaudRate=ui->cbx_Wdt_Bt->currentText().toInt();
        Cfg.WriteParam("Wdt","Port",Dev.s_Wdt.Port);
        Cfg.WriteParam("Wdt","BaudRate",Dev.s_Wdt.BaudRate);
    });
    connect(ui->btn_Set_Mes,&QPushButton::clicked,[=](){
        Dev.MesAddr=ui->text_Mes_Addr->text();
        Dev.DevAddr=ui->text_Dev_Addr->text();
        Dev.isMes=ui->cBx_isMes->isChecked();
        Cfg.WriteParam("Mes","Http",Dev.MesAddr);
        Cfg.WriteParam("Mes","Sn",Dev.DevAddr);
        Cfg.WriteParam("Mes","UpMes",Dev.isMes);
    });
    connect(ui->btn_Set_Record,&QPushButton::clicked,[=](){
        //打开目录
        QString FileName = QFileDialog::getExistingDirectory(this,tr("请选择记录目录"),"");
        if(!FileName.isEmpty())
        {
            Dev.RecordPath=FileName;
            ui->lb_Record_Path->setText(Dev.RecordPath);
            Cfg.WriteParam("Record","Path",Dev.RecordPath);
        }
    });
    connect(ui->btn_Set_Title,&QPushButton::clicked,[=](){
        Title=ui->text_Title->text();
        Cfg.WriteParam("Title","Name",Title);
        setWindowTitle(Title);
    });

    ui->dateEdit_DayTime->setDate(QDate::currentDate());

    QTimer *RunTimer=new QTimer();
    connect(RunTimer,SIGNAL(timeout()),this,SLOT(slotTimer()));
    RunTimer->start(100);

    ui->tabWidget->setCurrentIndex(0);
}

MainWidget::~MainWidget()
{
    Dev.StopProcess();
    delete ui;
}

void MainWidget::InitCtl()
{
    QStringList BaudRateList{"9600","19200","38400","115200"};
    ui->cbx_Scan_Bt->addItems(BaudRateList);
    ui->cbx_Wdt_Bt->addItems(BaudRateList);

    //主表格
    ui->table_Main->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->table_Main->setEditTriggers(QAbstractItemView::NoEditTriggers);



    QTableWidgetItem *headerItemM;
    QStringList headerText;

    headerText << tr("SN") << tr("重量")<<tr("结果")<<tr("时间");
    ui->table_Main->setColumnCount(headerText.count());  //设置列数

    QFont font;
    font.setFamily("Microsoft YaHei");
    font.setPixelSize(18);

    for (int i = 0; i < ui->table_Main->columnCount(); i++)
    {
        headerItemM = new QTableWidgetItem(headerText.at(i));
        headerItemM->setFont(font);
        headerItemM->setFont(headerItemM->font());
        ui->table_Main->setHorizontalHeaderItem(i, headerItemM);
    }

    //查询页面
    ui->table_Q->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->table_Q->setEditTriggers(QAbstractItemView::NoEditTriggers);
    QTableWidgetItem *headerItemQ;

    ui->table_Q->setColumnCount(headerText.count());     //设置列数
    for (int i = 0; i < ui->table_Main->columnCount(); i++)
    {
        headerItemQ = new QTableWidgetItem(headerText.at(i));
        headerItemQ->setFont(font);
        headerItemQ->setFont(headerItemQ->font());
        ui->table_Q->setHorizontalHeaderItem(i, headerItemQ);
    }
    for (int i = 0; i < ShowRows; i++)
    {
        ui->table_Main->insertRow(i);
        ui->table_Main->setRowHeight(i,25);

        ui->table_Q->insertRow(i);
        ui->table_Q->setRowHeight(i,25);
    }

    QStringList ComInfor;
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        //添加信息
        //if(info.manufacturer().contains("FTDI"))
        ComInfor.append(info.portName());
    }
    ui->cbx_Scan_Port->addItems(ComInfor);
    ui->cbx_Wtd_Port->addItems(ComInfor);

    Dev.s_Scn.Port=Cfg.ReadParam("Scan","Port").toString();
    Dev.s_Scn.BaudRate=Cfg.ReadParam("Scan","BaudRate").toInt();
    ui->cbx_Scan_Port->setCurrentText(Dev.s_Scn.Port);
    ui->cbx_Scan_Bt->setCurrentText(QString("%1").arg(Dev.s_Scn.BaudRate));

    Dev.s_Wdt.Port=Cfg.ReadParam("Wdt","Port").toString();
    Dev.s_Wdt.BaudRate=Cfg.ReadParam("Wdt","BaudRate").toInt();
    ui->cbx_Wtd_Port->setCurrentText(Dev.s_Wdt.Port);
    ui->cbx_Wdt_Bt->setCurrentText(QString("%1").arg(Dev.s_Wdt.BaudRate));

    Dev.MesAddr=Cfg.ReadParam("Mes","Http").toString();
    ui->text_Mes_Addr->setText(Dev.MesAddr);
    Dev.DevAddr=Cfg.ReadParam("Mes","Sn").toString();
    ui->text_Dev_Addr->setText(Dev.DevAddr);
    Dev.isMes=Cfg.ReadParam("Mes","UpMes").toBool();
    ui->cBx_isMes->setChecked(Dev.isMes);


    Dev.RecordPath=Cfg.ReadParam("Record","Path").toString();
    ui->lb_Record_Path->setText(Dev.RecordPath);

    Title=Cfg.ReadParam("Title","Name").toString();
    ui->text_Title->setText(Title);
    setWindowTitle(Title);
}

//开始停止按钮
void MainWidget::on_pBtn_Start_clicked()
{
    if(!isStarted)
    {
        ui->pBtn_Start->setText("停止");
        Dev.StartProcee();
        isStarted=true;
    }
    else
    {
        ui->pBtn_Start->setText("开始");
        Dev.StopProcess();
        isStarted=false;
    }
}

void MainWidget::slotTimer()
{
    //状态显示
    switch (Dev.ProcessStep)
    {
    case eSTEP::Init:
        ui->label_Step->setText("初始化……");
        break;
    case eSTEP::Scan:
        ui->label_Step->setText("扫码枪就绪");
        break;
    case eSTEP::ReadF:
        ui->label_Step->setText("读取重量");
        break;
    case eSTEP::GetHttp:
        ui->label_Step->setText("等待MES反馈");
        break;
    case eSTEP::SaveCsv:
        ui->label_Step->setText("数据保存");
        break;
    default:
        break;
    }
    //数值显示
    ui->Scan_Num->setText(Dev.s_Pdt.ID);
    ui->lb_Wdt->setText(Dev.s_Pdt.F);
    ui->lb_Wdt_Act->setText(Dev.FAct+"Kg");
    ui->lb_Count->setText(QString("%1").arg(Dev.PdtCount));
    //故障显示
    ui->lb_ErrState->setText(Dev.ErrInfor);
}


//webApi信息
void MainWidget::recvApiData()
{
    //显示结果
    ui->label_MES_Result->setText(Dev.s_Pdt.Rlt);
    if(Dev.s_Pdt.Rlt=="OK")
    {
        ui->label_MES_Result->setStyleSheet("background-color: rgb(0, 255, 0);");
    }
    else if (Dev.s_Pdt.Rlt.contains("NG"))
    {
        ui->label_MES_Result->setStyleSheet("background-color: rgb(255, 0, 0);");
    }
    else
    {
        ui->label_MES_Result->setStyleSheet("background-color: rgb(255, 255, 127);");
    }
    //插入表
    ui->table_Main->insertRow(0);
    ui->table_Main->setItem(0, 0, new QTableWidgetItem (Dev.s_Pdt.ID));
    ui->table_Main->item(0,0)->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
    ui->table_Main->setItem(0, 1, new QTableWidgetItem (Dev.s_Pdt.F));
    ui->table_Main->item(0,1)->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
    ui->table_Main->setItem(0, 2, new QTableWidgetItem (Dev.s_Pdt.Rlt));
    ui->table_Main->item(0,2)->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
    if(Dev.s_Pdt.Rlt=="OK")
    {
        ui->table_Main->item(0,2)->setBackgroundColor(QColor("#00FF00"));
    }
    else
    {
        ui->table_Main->item(0,2)->setBackgroundColor(QColor("#FF0000"));
    }

    ui->table_Main->setItem(0, 3, new QTableWidgetItem (Dev.s_Pdt.TimeAt));
    ui->table_Main->item(0,3)->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);

    if(ui->table_Main->rowCount()>100)
        ui->table_Main->removeRow(100);
}

//查询数据
void MainWidget::on_dateEdit_DayTime_userDateChanged(const QDate &date)
{
    QString csvFile=QString("%1/%2.csv").arg(Dev.RecordPath).arg(date.toString("yyyy-MM-dd"));
    QFile file(csvFile);
    if (!file.open(QIODevice::ReadOnly|QIODevice::Text))
    {
        qDebug() <<csvFile+" open failed";
        ui->lb_Q_Count->setText("--");
        ui->lb_OK_Count->setText("--/--");
        ui->table_Q->clearContents();
        HisList.clear();
    }
    else
    {
        HisList.clear();
        int OKCount=0;
        int NGCount=0;
        // 文本流模式读取文件
        QTextStream in(&file);
        while (!in.atEnd())
        {
            QString strline = in.readLine();
            if (!strline.contains(','))
                continue;
            QStringList _lst = strline.split(",");
            if(_lst.count()!=4)
                continue;
            HisList.append(SProduct(_lst[0],_lst[1],_lst[2],_lst[3]));
            if(_lst[2]=="OK") OKCount++; else NGCount++;
        }
        //设置数量
        ui->lb_Q_Count->setText(QString("%1").arg(OKCount+NGCount));
        ui->lb_OK_Count->setText(QString("%1/%2").arg(OKCount).arg(NGCount));

        //展示第一页
        TablePageS=HisList.count()/ShowRows;  //总页数
        if(HisList.count()%ShowRows>0) TablePageS++;
        DisHistList();
    }
    file.close();
}

void MainWidget::on_btn_Up_Page_clicked()
{
    TablePage--;
    if(TablePage<0) TablePage=0;
    DisHistList();
}

void MainWidget::on_btn_Dn_Page_clicked()
{
    TablePage++;
    if(TablePage>=TablePageS) TablePage=TablePageS-1;
    DisHistList();
}

void MainWidget::setQalbelSlot()
{
    Dev.isClearWdt=true;
}
void MainWidget::DisHistList()
{
    if(HisList.count()==0) return;

    int leng=(TablePage*ShowRows+ShowRows>=HisList.count())? HisList.count():TablePage*ShowRows+ShowRows;
    QFont font;
    font.setFamily("Microsoft YaHei");
    font.setPixelSize(13);
    ui->table_Q->clearContents();
    ui->lb_Pages->setText(QString("%1/%2").arg(TablePageS).arg(TablePage+1));
    for (int i=TablePage*ShowRows;i<leng;i++)
    {
        QColor bcolor;
        if(i%2==0)
            bcolor=Qt::cyan;
        else
            bcolor=Qt::white;
        QTableWidgetItem *item0 = new QTableWidgetItem();
        item0->setText(HisList.at(i).ID);
        item0->setFont(font);
        item0->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
        item0->setBackground(bcolor);
        ui->table_Q->setItem(i-TablePage*ShowRows, 0, item0);

        QTableWidgetItem *item1 = new QTableWidgetItem();
        item1->setFont(font);
        item1->setText(HisList.at(i).F);
        item1->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
        item1->setBackground(bcolor);
        ui->table_Q->setItem(i-TablePage*ShowRows, 1, item1);

        QTableWidgetItem *item2 = new QTableWidgetItem();
        item2->setFont(font);
        item2->setText(HisList.at(i).Rlt);
        item2->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
        item2->setBackground(HisList.at(i).Rlt=="OK"? QColor("#00FF00"):QColor("#FF0000"));
        ui->table_Q->setItem(i-TablePage*ShowRows, 2, item2);

        QTableWidgetItem *item3 = new QTableWidgetItem();
        item3->setFont(font);
        item3->setText(HisList.at(i).TimeAt);
        item3->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
        item3->setBackground(bcolor);
        ui->table_Q->setItem(i-TablePage*ShowRows, 3, item3);
    }

}
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

莫听穿林打叶声儿

感觉有用的,一毛两毛不嫌少

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

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

打赏作者

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

抵扣说明:

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

余额充值