Asistente de depuración de red y puerto serie

Contenido Capítulo
1 Introducción1
1.1 Antecedentes del proyecto1
1.2 Estado de la investigación en el país y en el extranjero1
1.3 Contenido principal de la investigación2
1.4 Estructura de organización del papel2
Capítulo 2 Análisis de requisitos de software3
2.1 Análisis de viabilidad3
2.1.1 Viabilidad económica3
2.1.2 Viabilidad técnica Desempeño 3
2.1.3 Viabilidad de operación 3
2.2 Requisitos descripción general 3
2.3 Análisis de requisitos funcionales 6
2.3.1 Módulo de equipo 6
2.3.2 Módulo de información del equipo 8
2.3.3 Módulo de envío de datos 9
2.3.4 Módulo de recepción de datos 12
2.3.5 Módulo de configuración del sistema 13
2.3.5 Otros módulos funcionales 14
2.4 No -análisis de requisitos funcionales 21
2.4.1 Análisis de requisitos de desempeño 21
2.4.2 Análisis de confiabilidad 21
2.5 Resumen de este capítulo 21
Capítulo 3 Diseño de sistemas de software 21
3.1 Diseño general 21
3.1.1 Diseño del marco básico 21
3.1.2 Diseño de estructura funcional 22
3.1. 3 Introducción a las tecnologías clave 23
3.2 Diseño detallado 24
3.2.1 Módulo de equipo 24
3.2.2 Módulo de información del equipo 26
3.2.3 Módulo de envío de datos 27
3.2.4 Módulo de recepción de datos 30
3.2.5 Módulo de configuración del sistema 31
3.2.6 Otros módulos funcionales 32
3.3 Resumen de este capítulo 36
Capítulo 4 Implementación del software 36
4.1 Interfaz general 37
4.1.1 Diseño de interfaz 37
4.1.2 Diseño de arquitectura de software 37
4.2 Módulo Equipo 38
4.2.1 Diseño de la clase MyObject 38
4.2.2 Creación de dispositivo 40
4.2.3 Eliminación de dispositivo 42
4.3 Módulo de información del dispositivo 44
4.4 Módulo de envío de datos 46
4.4.1 Envío único 46
4.4.2 Envío programado 47
4.4.3 Envío configurado Modo 48
4.5 Módulo de recepción de datos 49
4.6 Módulo de configuración del sistema 49
4.7 Otros módulos funcionales 50
4.7.1 Borrar el cuadro de recepción de datos 51
4.7.2 Borrar el cuadro de envío de datos 51
4.7.3 Cargar archivo 51
4.7.4 Exportar datos 52
4.7.5 Palabras en pantalla Número de secciones y recuento de reinicios 52
4.7.6 Explicación detallada de las funciones 53
4.8 Resumen de este capítulo 54
Capítulo 5 Pruebas de software 54
5.1 Principios de prueba 54
5.2 Entorno de prueba 55
5.3 Pruebas del módulo de equipo 55
5.3.1 Crear dispositivo 55
5.3.2 Eliminar dispositivo 56
5.4 Prueba del módulo de información del dispositivo 56
5.5 Prueba del módulo de envío de datos 57
5.5.1 Prueba de función de envío único 57
5.6.2 Prueba de función de envío programado 58
5.6.3 Establecer prueba de función del modo de envío 58
5.6 Prueba del módulo de recepción de datos 60
5.7 Módulo de configuración del sistema 60
5.8 Otras pruebas del módulo funcional 61
5.8.1 Prueba de función de borrar la caja de recepción de datos 61
5.8.2 Prueba de función de borrar la caja de envío de datos 62
5.8.3 Prueba de función de cargar archivo 63
5.8.4 Exportar datos funcionales prueba 63
5.8.5 Prueba de función de visualización de número de bytes 64
5.8.6 Prueba de función de borrado de conteo 64
5.8.7 Prueba de función de visualización de número de dispositivo 65
Capítulo 6 Resumen y Outlook 66
6.1 Resumen 66
6.2 Outlook 66
Referencias 67
Agradecimientos 68
2.3 Análisis de requisitos funcionales Análisis de
requisitos Es un proceso muy importante en el ciclo de vida del software, determina la calidad de todo el proyecto de software y también es el éxito o el fracaso de todo el proyecto de software. Se requiere que todas las funciones del software se puedan utilizar normalmente y que la interfaz sea hermosa.
2.3.1 Módulo de equipo
El módulo de dispositivo del asistente de depuración permite principalmente a los usuarios crear y eliminar dispositivos. Para crear dispositivos, los usuarios pueden optar por crear clientes y servidores de tipo TCP o clientes y servidores de tipo UDP. El dispositivo serie se detecta y crea automáticamente. Para eliminar un dispositivo, se elimina el dispositivo creado. El diagrama de actividades para crear el dispositivo se muestra en la Figura 2-2.
Insertar descripción de la imagen aquí

#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);
        }
    }
}

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Supongo que te gusta

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