void CProtocolDemo::GetRand(CPointDemoBase *pPoint_)
{
//    qDebug()<<"xxxxxxxxxxxxxxxxxxxxxxx"<<pPoint_->m_nFunction<<pPoint_->m_strRTDBName;
    QVariant Value;
    int nType = pPoint_->m_nFunction;
    int nMax = pPoint_->m_nPara1;
    int nMin = pPoint_->m_nPara2;
    int nStep = pPoint_->m_nPara3;
    CTagI *pTempTagI = pPoint_->m_pTag;
//    qDebug()<<__func__<<"pTempTagI ="<<pTempTagI;
//    qDebug()<<"pPoint_->m_pTag"<<pPoint_->m_pTag->GetName();
    if (pTempTagI)
    {
        QString strValue;
        if (pTempTagI->GetPointCollection())
        {
            strValue = pTempTagI->GetProjectValue()->GetVarValue().toString();
        }
        int m_nLastValue = strValue.toInt();
        //功能:生成各种随机数据
        //参数:nType生成数据的方式
        //返回值:
        double fValue=0.0;
        //	srand(time(NULL));
        switch(nType)
        {
        case 70://常量   参数为:70 常量值
            fValue = nMax;
            break;
        case 72://一定范围内的随机量 参数为:72 最大值 最小值
            fValue=  rand()%(nMax-nMin)+nMin;
            break;
        case 74://单调增加 参数为:74 初值  终值 步长(<0 为单调递减)
            {
                int nStartValue = nMax;
                int nEndValue = nMin;
                Q_ASSERT(nStartValue <= nEndValue);

                m_nLastValue += nStep;
                if(m_nLastValue>nEndValue) //不在有效值范围内)
                {
                    m_nLastValue = nStartValue;
                }
                else if(m_nLastValue<nStartValue)
                {
                    m_nLastValue = nEndValue;
                }
            }
            fValue=  m_nLastValue;
            break;
        case 76://正弦变量 参数为:76 基值 幅值 步长(角度)
            {
                int nBaseValue = nMax;
                int nK = nMin;
                fValue = nBaseValue + nK * sin(m_nLastValue*3.14/180.0);
                m_nLastValue += nStep;
                if(m_nLastValue>360)
                {
                    m_nLastValue -= 360;
                }
            }
            break;
        case 78://方波  参数为:78 高值,低值(扫描周期就是方波长度)
            if(m_nLastValue>0)
            {
                fValue = nMax;
            }
            else
            {
                fValue = nMin;
            }
            m_nLastValue = 1 - m_nLastValue;
            break;
        case 80://遥信量 参数为:80 (扫描周期就是变位周期)
//            qDebug()<<"AAAAAAAAAAAAAAAAAAAAAAAAAAAAA"<<pPoint_->m_nFunction<<pPoint_->m_strRTDBName;
            m_nLastValue = 1 - m_nLastValue;
            fValue=m_nLastValue;
            break;
        case 82://遥信量  参数为:82 每次变位的可能性(0-100)
            {
                int nRand= rand()%101;//0--100
//                qDebug()<<"ZZZZZZZZz"<<m_nLastValue<<nRand;
                if(nRand<nMax)
                {
                    m_nLastValue = 1 - m_nLastValue;
                }
                fValue=m_nLastValue;
            }
            break;
        default:
            Q_ASSERT(false);//("IO变量定义无效:未定义的随机变量取值方式 funcno=100 param1=%d\n",nType);
            break;
        }
        Value.setValue(fValue);
//        qDebug()<<"Value_.setValue(fValue);"<<Value;
        pTempTagI->SetValue(pPoint_,Value,Value);
    }

//    return true;
}
void CProtocolDemo::GetMemoryInfo(CPointDemoBase *pPoint_)
{
    CTagI *pTempTagI = pPoint_->m_pTag;
    if (pTempTagI)
    {
        double fValue=0.0;
        switch(pPoint_->m_nFunction)
        {
        case 20://物理内存总数
        {
            QString strTitle_("MemTotal");
            QFile file(PROC_MEMINFO);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        fValue = m.total;
                        break;
                    }
                }
                file.close();
            }
        }
            break;
        case 22://物理内存空闲
        {
            QString strTitle_("MemFree");
            QFile file(PROC_MEMINFO);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        fValue = m.total;
                        break;
                    }
                }
                file.close();
            }
        }
            break;
        case 24://物理内存使用
        {
            QString strTitle_1("MemTotal");
            QString strTitle_2("MemFree");
            double value1 = 0.0;
            double value2 = 0.0;
            QFile file(PROC_MEMINFO);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_1))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        value1 = m.total;
                        break;
                    }else if (lineList.at(i).contains(strTitle_2))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        value2 = m.total;
                        break;
                    }
                }
                file.close();
                fValue = value1 - value2;
            }
        }
            break;
        case 26://虚内存总数
        {
            QString strTitle_("VmallocTotal");
            QFile file(PROC_MEMINFO);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        fValue = m.total;
                        break;
                    }
                }
                file.close();
            }
        }
            break;
        case 28://虚内存空闲
        {
            QString strTitle_1("VmallocTotal");
            QString strTitle_2("VmallocUsed");
            double value1 = 0.0;
            double value2 = 0.0;
            QFile file(PROC_MEMINFO);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_1))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        value1 = m.total;
                        break;
                    }else if (lineList.at(i).contains(strTitle_2))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        value2 = m.total;
                        break;
                    }
                }
                file.close();
                fValue = value1 - value2;
            }
        }
            break;
        case 30://虚内存占用
        {
            QString strTitle_("VmallocUsed");
            QFile file(PROC_MEMINFO);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        fValue = m.total;
                        break;
                    }
                }
                file.close();
            }
        }

            break;
        case 32://文件页总数
            break;
        case 34://文件页空闲
            break;
        case 36://文件页占用
            break;
        case 38://内存占用率
            break;
        case 40://当前程序占用空间
        {
            uid_t current_pid = getpid();   //获取进程ID
            QString strTitle_("VmallocUsed");
            QString filename = QString("/proc/%1/stat").arg(QString::number(current_pid));
            qDebug()<<"current pid="<<current_pid;
            QFile file(filename);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        fValue = m.total;
                        break;
                    }
                }
                file.close();
            }


        }
            break;
        case 42://内存使用峰值
        {
            QString strValue;
            if (pTempTagI->GetPointCollection())
            {
                strValue = pTempTagI->GetProjectValue()->GetVarValue().toString();
            }
            int m_nLastValue = strValue.toInt();
            QString strTitle_1("MemTotal");
            QString strTitle_2("MemFree");
            double value1 = 0.0;
            double value2 = 0.0;
            QFile file(PROC_MEMINFO);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_1))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        value1 = m.total;
                        break;
                    }else if (lineList.at(i).contains(strTitle_2))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        value2 = m.total;
                        break;
                    }
                }
                file.close();
                if (m_nLastValue < value1-value2)
                {
                    fValue = value1 - value2;
                }
            }
        }
            break;
        case 44://占用的虚拟内存大小
        {
            QString strTitle_("VmallocUsed");
            QFile file(PROC_MEMINFO);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        fValue = m.total;
                        break;
                    }
                }
                file.close();
            }
        }
            break;
        case 46://占用的虚拟内存峰值
        {
            QString strValue;
            if (pTempTagI->GetPointCollection())
            {
                strValue = pTempTagI->GetProjectValue()->GetVarValue().toString();
            }
            int m_nLastValue = strValue.toInt();
            QString strTitle_("VmallocUsed");
            QFile file(PROC_MEMINFO);
            MEM_OCCUPY m;
            if (file.open(QIODevice::ReadOnly| QIODevice::Text))
            {
                QTextStream in(&file);
                QString data = in.readAll();
                QStringList lineList = data.split('\n');
                for (int i = 0; i < lineList.count(); ++i)
                {
                    if (lineList.at(i).contains(strTitle_))
                    {
                        sscanf (lineList.at(i).toStdString().data(), "%s %lu %s", m.name, &m.total, m.name2);
                        if (m_nLastValue < (int)m.total)
                        {
                            fValue = m.total;
                        }
                        break;
                    }
                }
                file.close();
            }
        }
            break;
        default:
            Q_ASSERT(false);//("IO变量定义无效:未定义的随机变量取值方式 funcno=100 param1=%d\n",nType);
            break;
        }
        QVariant Value(fValue);
//        qDebug()<<"Value_.setValue(fValue);"<<Value;
        pTempTagI->SetValue(pPoint_,Value,Value);
    }
}