Assistente de depuração de rede e porta serial

Conteúdo Capítulo
1 Introdução1
1.1 Antecedentes do projeto1
1.2 Situação da pesquisa no país e no exterior1
1.3 Conteúdo principal da pesquisa2
1.4 Estrutura organizacional do papel2
Capítulo 2 Análise de requisitos de software3
2.1 Análise de viabilidade3
2.1.1 Viabilidade econômica3
2.1.2 Viabilidade técnica Desempenho 3
2.1.3 Viabilidade de operação 3
2.2 Requisitos visão geral 3
2.3 Análise de requisitos funcionais 6
2.3.1 Módulo de equipamento 6
2.3.2 Módulo de informações de equipamento 8
2.3.3 Módulo de envio de dados 9
2.3.4 Módulo de recebimento de dados 12
2.3.5 Módulo de configurações do sistema 13
2.3.5 Outros módulos funcionais 14
2.4 Não -análise de requisitos funcionais 21
2.4.1 Análise de requisitos de desempenho 21
2.4.2 Análise de confiabilidade 21
2.5 Resumo deste capítulo 21
Capítulo 3 Projeto de sistema de software 21
3.1 Projeto geral 21
3.1.1 Projeto de estrutura básica 21
3.1.2 Projeto de estrutura funcional 22
3.1. 3 Introdução às principais tecnologias 23
3.2 Projeto detalhado 24
3.2.1 Módulo de equipamento 24
3.2.2 Módulo de informações de equipamento 26
3.2.3 Módulo de envio de dados 27
3.2.4 Módulo de recebimento de dados 30
3.2.5 Módulo de configuração do sistema 31
3.2.6 Outros módulos funcionais 32
3.3 Resumo deste capítulo 36
Capítulo 4 Implementação de software 36
4.1 Interface geral 37
4.1.1 Design de interface 37
4.1.2 Design de arquitetura de software 37
4.2 Módulo de equipamento 38
4.2.1 Design da classe MyObject 38
4.2.2 Criação de dispositivo 40
4.2.3 Exclusão de dispositivo 42
4.3 Módulo de informações do dispositivo 44
4.4 Módulo de envio de dados 46
4.4.1 Envio único 46
4.4.2 Envio programado 47
4.4.3 Definir envio Modo 48
4.5 Módulo de recepção de dados 49
4.6 Módulo de configuração do sistema 49
4.7 Outros módulos funcionais 50
4.7.1 Limpar a caixa de recepção de dados 51
4.7.2 Limpar a caixa de envio de dados 51
4.7.3 Carregar arquivo 51
4.7.4 Exportar dados 52
4.7.5 Palavras exibidas Número de seções e contagem de reinicialização 52
4.7.6 Explicação detalhada das funções 53
4.8 Resumo deste capítulo 54
Capítulo 5 Teste de software 54
5.1 Princípios de teste 54
5.2 Ambiente de teste 55
5.3 Teste de módulo de equipamento 55
5.3.1 Criar dispositivo 55
5.3.2 Excluir dispositivo 56
5.4 Teste do módulo de informações do dispositivo 56
5.5 Teste do módulo de envio de dados 57
5.5.1 Teste de função de envio único 57
5.6.2 Teste de função de envio programado 58
5.6.3 Teste de função de configuração do modo de envio 58
5.6 Teste do módulo de recebimento de dados 60
5.7 Módulo de configuração do sistema 60
5.8 Outros testes de módulos funcionais 61
5.8.1 Teste de função de limpeza da caixa de recebimento
de dados 61 5.8.2 Teste de função de limpeza da caixa de envio de dados 62
5.8.3 Teste de função de carregamento de arquivo 63
5.8.4 Exportação de dados Funcional teste 63
5.8.5 Teste de função de exibição de número de byte 64
5.8.6 Teste de função de limpeza de contagem 64
5.8.7 Teste de função de exibição de número de dispositivo 65
Capítulo 6 Resumo e Outlook 66
6.1 Resumo 66
6.2 Outlook 66
Referências 67
Agradecimentos 68
2.3 Análise de requisitos funcionais
Análise de requisitos é um processo muito importante no ciclo de vida do software, pois determina a qualidade de todo o projeto de software e também determina o sucesso ou o fracasso de todo o projeto de software. É necessário que todas as funções do software possam ser usadas normalmente e que a interface seja bonita.
2.3.1 Módulo Equipamento
O módulo de dispositivo do assistente de depuração permite principalmente aos usuários criar e excluir dispositivos. Para criar dispositivos, os usuários podem optar por criar clientes e servidores do tipo TCP ou clientes e servidores do tipo UDP. O dispositivo serial é detectado e criado automaticamente. Para excluir um dispositivo, o dispositivo criado é excluído. O diagrama de atividades para criar o dispositivo é mostrado na Figura 2-2.
Insira a descrição da imagem aqui

#include "common.h"
#include <QDebug>
common::common(QWidget *parent) : QTextEdit(parent)
{
    
    
    connect(this,&QTextEdit::cursorPositionChanged,this,&common::changePosSLOT);
}

QString common::getCurrTime()
{
    
    
    return QTime::currentTime().toString();
}

QByteArray common::hexStrToByteArray(const QString &str)
{
    
    
    /*qDebug()<<"hexStrToByteArray::str="<<str;
    QByteArray senddata;
    int hexdata, lowhexdata;
    int hexdatalen = 0;
    int len = str.length();
    senddata.resize(len / 2);
    char lstr, hstr;

    for (int i = 0; i < len;) {
        hstr = str.at(i).toLatin1();

        if (hstr == ' ') {
            i++;
            continue;
        }
        i++;
        if (i >= len) {
            break;
        }

        lstr = str.at(i).toLatin1();
        hexdata = convertHexChar(hstr);
        lowhexdata = convertHexChar(lstr);
        qDebug()<<"hexStrToByteArray::hexdata="<<str;
        qDebug()<<"hexStrToByteArray::lowhexdata="<<str;
        if ((hexdata == 16) || (lowhexdata == 16)) {
            break;
        } else {
            hexdata = hexdata * 16 + lowhexdata;
        }

        i++;
        qDebug()<<"hexStrToByteArray::data="<<(char)hexdata;
        senddata[hexdatalen] = (char)hexdata;
        hexdatalen++;
    }

    senddata.resize(hexdatalen);
    */
        bool ok;
        QByteArray ret;
        QString str1;
        QStringList sl;
        QString str2;
        qDebug()<<"str.length="<<str.length();
        for(int i=1;i<=str.length();i++)
        {
    
    
            qDebug()<<"i="<<i;
            str2.append(str.at(i-1));
            qDebug()<<"str2="<<str2;
            if(i%2==0)//每两个字符放一起
            {
    
    
                sl.append(str2);
                str2.clear();
            }
        }

        foreach (QString s, sl) {
    
    
            if(!s.isEmpty())
            {
    
    
                //byte类型的数字要&0xff再赋值给int类型,其本质原因就是想保持二进制补码的一致性。
                char c = s.toInt(&ok,16)&0xFF;//任何一个数&0xFF都是它本身,这里为了保持补码的一致性(由byte(8位)-》int(32位))
                char d= 10;
                qDebug()<<"d="<<d;
                if(ok){
    
    
                    ret.append(c);
                }else{
    
    
                    qDebug()<<"非法的16进制字符:"<<s;
                }
            }
        }
    return ret;
}

/*char common::convertHexChar(char ch)
{
    if ((ch >= '0') && (ch <= '9')) {
        return ch - 0x30;
    } else if ((ch >= 'A') && (ch <= 'F')) {
        return ch - 'A' + 10;
    }else {
        return (-1);
    }
}*/

//只能输入16进制数和回退符
void common::keyPressEvent(QKeyEvent *event)
{
    
    
    if(event->key()==Qt::Key_0||event->key()==Qt::Key_1||event->key()==Qt::Key_2||event->key()==Qt::Key_3||event->key()==Qt::Key_4||event->key()==Qt::Key_5||event->key()==Qt::Key_6||event->key()==Qt::Key_7||event->key()==Qt::Key_8||event->key()==Qt::Key_9||event->key()==Qt::Key_A||event->key()==Qt::Key_B||event->key()==Qt::Key_C||event->key()==Qt::Key_D||event->key()==Qt::Key_E||event->key()==Qt::Key_F)
    {
    
    
        QString str=this->toPlainText();//保存已经有的
        str.append(event->text().toUpper());//添加新传来的
        this->clear();
        this->append(str);
    }
    else if(event->key()==Qt::Key_Backspace) {
    
    
        QString str=this->toPlainText();
        QString str1=str.remove(str.length()-1,1);
        this->clear();
        this->append(str1);
    }
}

//限制中文输入
void common::changePosSLOT()
{
    
    
    QString str=this->toPlainText();
    if(str=="")
        return;
    QString ch=str.at(str.length()-1);
    QChar ch1=str.at(str.length()-1);
    char ch2=ch1.toLatin1();
    qDebug()<<"str="<<str<<"  ch="<<ch;
    if((ch2>='A')&&(ch2<='F'))
    {
    
    
        //ch正常AF";
    }
    else if ((ch2>='0')&&(ch2<='9')) {
    
    
        //正常09";
    }
    else {
    
    
        //ch错误";
        if(!isFile)
        {
    
    
            str.remove(str.length()-1,1);
            this->clear();
            this->append(str);
        }
    }
}

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/newlw/article/details/133064664
Recomendado
Clasificación