Пример #1
0
void MainWindow::on_testButton_clicked()
{
//   int flag= Utils::add_data("test_id","test_name","test_type","test_value","test_value_min","test_value_max");
//   if(flag==Utils::SUCCESS)
//   {
//       qDebug()<<"add_ok";
//   }
//   else
//   {
//       qDebug()<<"add_failed";
//   }
//    QString cmd="open_the_light";
    //发射开灯信号
    emit send_cmd_to_node(Utils::OPEN_THE_LIGHT+"\n");
//    if(Utils::update_value("101","ff"))
    {
        qDebug()<<"ok";
    }
}
Пример #2
0
void Motor::queryAsyncVel()
{
    send_faulhaber_cmd_to_node(FAULHABER_GET_ACUTAL_VELOCITY,0,ID);
    send_cmd_to_node(CMD_OPENCAN_TPDO2_REQ,5,FAULHABER_GET_ACUTAL_VELOCITY,ID);
}
Пример #3
0
void Motor::enable()
{
    send_cmd_to_node(CMD_OPENCAN_SWITCHON, ID);
    send_cmd_to_node(CMD_OPENCAN_ENABLEOP, ID);
    //send_faulhaber_enable_to_node(ID);
}
Пример #4
0
void Motor::emergencyStop()
{
    send_cmd_to_node(CMD_OPENCAN_DISABLE_VOLTAGE,ID);
    //send_NMT_to_node(CMD_OPENCAN_NMT_STOP, ID);
}
Пример #5
0
void Motor::init(int phase) {

    switch(phase){
    case INIT_BOOTUP_DEV:
        send_NMT_to_node(CMD_OPENCAN_NMT_RSTCOMM, ID);
        break;

    case INIT_START_DEV:
        send_NMT_to_node(CMD_OPENCAN_NMT_START, ID);
        break;

    case INIT_SHUTDOWN_DEV:
        send_cmd_to_node(CMD_OPENCAN_SHUTDOWN, ID);
        break;

    case INIT_SWITCH_ON_DEV:
        send_cmd_to_node(CMD_OPENCAN_SWITCHON, ID);
        break;

    case INIT_ENABLE_OP_DEV:
        send_cmd_to_node(CMD_OPENCAN_ENABLEOP, ID);
        break;

    case INIT_ENABLED:
        send_cmd_to_node(CMD_OPENCAN_SET_FAULHABER_MODE, ID);
        break;

    case INIT_TRACE_CONF:
        // setting trace CMD_OPENCAN_SET_TPDO3_TRACE_CONF
        setMaxVel(MaxVel);	//#Set standard max Speed

        setMaxAcc(MaxAcc);	//#Set standard max Acceleration

        setMaxDeacc(MaxDeacc);	//#Set standard max Deceleration

        setMaxPeakCurr(MaxPeakCurr); //#Set max Peak Current
        setMaxContCurr(MaxContCurr); //#Set max Continuous Current

        send_cmd_to_node(CMD_OPENCAN_SET_RPDO2_SYNC_CONF, ID); // configure acyclic FAULHABER command feedback
        send_cmd_to_node(CMD_OPENCAN_SET_TPDO3_TRACE_CONF, ID);
        break;
    case INIT_SYNC_CONF:
        //configuring TxPDO3 to response on sync CMD_OPENCAN_SET_TPDO3_SYNC_CONF
        send_cmd_to_node(CMD_OPENCAN_SET_TPDO3_SYNC_CONF, ID);
        break;
    case INIT_TPDO1_CONF:
        //configuring TxPDO1 to response on change
        send_cmd_to_node(CMD_OPENCAN_TPDO1_REQ_ON_CHANGE, ID);
        Operational = true;
        break;
    case INIT_FAULHABER_CONF:
        //enable all
        //for(unsigned int i=0; i < DOF_ ; i++) if(ID != 0)
        send_cmd_to_node(CMD_OPENCAN_SET_FAULHABER_ENABLE, ID);
        break;
    case INIT_FAULT:
        //device is in fault state CMD_OPENCAN_FAULTRESET
        send_cmd_to_node(CMD_OPENCAN_FAULTRESET, ID);
        reset();
        break;

    case INIT_CLOSE:	//exit condition
    default:
        break;
    }
}
Пример #6
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//    setCentralWidget(ui->tabWidget);
    //设置编码,可用于国际化
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));

    //此定时器为轮询串口缓存数据
    serial_read_fresh_t=new QTimer(this);
    //设置定时器刷新周期
    serial_read_fresh_t->setInterval(400);
    //对串口进行初始化
    if(ser_serial_port_init()==Utils::SUCCESS)
    {
        ui->infoPad->append("Ser : Found Serial Device");
        th.start();
    }
    else
    {
        ui->infoPad->append(("Ser : No Serial Device Found"));
    }
    //初始化tcp服务器端
    tcpServer =new QTcpServer(this);
    //初始化udp发送套接字对象
    udpSendSocket = new QUdpSocket(this);
    //初始化udp接收套接字对象
    udpReceiveSocket = new QUdpSocket(this);
    //绑定本地udp套接字监听//8904
    udpReceiveSocket->bind(Utils::SER_UDP_RCV_PORT, QUdpSocket::ShareAddress);
    //绑定本地udp套接字的readyRead信号到processPendingDatagrams槽函数
    connect(udpReceiveSocket, SIGNAL(readyRead()),this, SLOT(processPendingDatagrams()));
    //初始化客户端默认地址对象
    addr = new QHostAddress("192.168.1.1");

    //设置按钮的初始化状态
    ui->startBtn->setEnabled(true);
    ui->stopBtn->setEnabled(false);
    //绑定tcpServer的newConnection信号到newConnectionComing槽函数
    connect(tcpServer,SIGNAL(newConnection()),this,SLOT(newConnectionComing()));
    //绑定startBtn的clicked信号到listenBtnClicked槽函数
    connect(ui->startBtn,SIGNAL(clicked()),this,SLOT(listenBtnClicked()));
     //绑定stopBtn的clicked信号到listenBtnClicked槽函数
    connect(ui->stopBtn,SIGNAL(clicked()),this,SLOT(stopBtnClicked()));
    //子节点将会发送的命令
    //在下一个迭代版本中将分离出去
    //
    // 将公用数据移入Utils工具类
    //  2014,03,15 已完成

    //温度传感器子节点发送的命令头
    // TEMP ="temp_data_is:";
    //湿度传感器子节点发送的命令头
    // HUMI ="humi_data_is:";

    table_fresh_t=new QTimer(this);
    table_fresh_t->setInterval(1000);
    connect(table_fresh_t,SIGNAL(timeout()),this,SLOT(view_data()));
    table_fresh_t->start();
    //将信号send_cmd_to_node与槽函数sendSerCom绑定
    connect(this,SIGNAL(send_cmd_to_node(QString)),this,SLOT(sendSerCom(QString)));
    //将信号send_data_to_thread与槽函数setData绑定
    connect(this,SIGNAL(send_data_to_thread(QString)),&th,SLOT(setData(QString)));
}
Пример #7
0
//(tcp)命令解析器函数
//输入:QString 类型的命令
//输出:int 类型的状态标识
int MainWindow::Ser_cmd_parser(QString cmd)
{
    //判断输入命令是否为空
    if(cmd=="")
    {
        //调试信息
        qDebug()<<"SER:empty cmd";
        //返回值
        return Utils::FAIL;
    }
    //判断是否为客户端请求温度数据
    else if(cmd==(Utils::ASK_TEMP_DAT))
    {
        //调试信息
        qDebug()<<"SER:client ask for temp dat";
        //组合响应数据请求指令
        //包括命令头和数据
        QString t=QString(Utils::TEMP_DAT_TO_CLIENT).append(QString(Utils::get_value(Utils::TEMP_ID)));
        //调试信息
        qDebug()<<"Ser:"<<t;
        //发送响应指令
        bool flag=Ser_sendDat(t);
        //判断操作返回码
        if(flag==Utils::SUCCESS)
        {
            //调试信息
            qDebug()<<"Ser:reply to client ok";
        }
        else
        {
            //调试信息
            qDebug()<<"Ser:reply to client fail";
        }
        //
         //返回解析结果状态
        return Utils::SUCCESS;

    }
    //判断是否为客户端请求湿度数据
    else if(cmd==(Utils::ASK_HUMI_DAT))
    {
        //调试信息
        qDebug()<<"SER:client ask for humi dat";
        ////组合响应 数据请求 指令
        //包括命令头和数据
        QString t=QString(Utils::HUMI_DAT_TO_CLIENT).append(QString(Utils::get_value(Utils::HUMI_ID)));
        //调试信息
        qDebug()<<"Ser:"<<t;
        //发送响应指令
        bool flag=Ser_sendDat(t);
        //判断操作返回码
        if(flag==Utils::SUCCESS)
        {
            //调试信息
            qDebug()<<"Ser:reply to client ok";
        }
        else
        {
            //调试信息
            qDebug()<<"Ser:reply to client fail";
        }
        //
         //返回解析结果状态
        return Utils::SUCCESS;
    }
    else if(cmd.startsWith(Utils::SET_HUMI_MIN))
    {
        //调试信息:表明信息类型
        //qDebug()<<"set humi min";
        //调试信息:打印信息内容
        //qDebug()<<cmd;
        //调试信息:输出信息长度
        //qDebug()<<cmd.length();
        //调试信息:输出比对命令头长度
        //qDebug()<<Utils::SET_HUMI_MIN.length();

        //另一种获取有效数据索引值的方式
        //获取命令中“:”所在的位置
        //int offset =cmd.indexOf(":");
        //通过整个命令的长度计算出有效数据的长度
        //offset =cmd.length()-offset-1;

         //当前使用的获取有效数据的索引的方式
        int offset =cmd.length()-Utils::SET_HUMI_MIN.length();
        //调试信息:输出有效数据索引值
        // qDebug()<<offset;
        //在此处使用临时变量保存获取到的有效数据
        float value =cmd.right(offset).toFloat();
         //调试信息:输出有效数据的值
        qDebug()<<"SER:the humi set low value is "<<value;
        //
        bool flag=Utils::update_value_min(Utils::HUMI_ID,QString::number(value));
//        boolean flag=Utils::update_value_min(Utils::HUMI_ID,cmd.right(offset));
        if(flag==Utils::SUCCESS)
        {
            //调试信息
            qDebug()<<"Ser:update humi min ok";
        }
        else
        {
            //调试信息
            qDebug()<<"Ser:update humi min fail";
        }
        //
         //返回解析结果状态
        return Utils::SUCCESS;
    }
    else if(cmd.startsWith(Utils::SET_HUMI_MAX))
    {
        //调试信息:表明信息类型
        //qDebug()<<"set humi max";
        //调试信息:打印信息内容
        //qDebug()<<cmd;
        //调试信息:输出信息长度
        //qDebug()<<cmd.length();
        //调试信息:输出比对命令头长度
        //qDebug()<<Utils::SET_HUMI_MAX.length();

        //另一种获取有效数据索引值的方式
        //获取命令中“:”所在的位置
        //int offset =cmd.indexOf(":");
        //通过整个命令的长度计算出有效数据的长度
        //offset =cmd.length()-offset-1;

         //当前使用的获取有效数据的索引的方式
        int offset =cmd.length()-Utils::SET_HUMI_MAX.length();
        //调试信息:输出有效数据索引值
        // qDebug()<<offset;
        //在此处使用临时变量保存获取到的有效数据
        float value =cmd.right(offset).toFloat();
         //调试信息:输出有效数据的值
        qDebug()<<"SER:the humi set high value is "<<value;
        //

        bool flag=Utils::update_value_max(Utils::HUMI_ID,QString::number(value));
//        boolean flag=Utils::update_value_max(Utils::HUMI_ID,cmd.right(offset));
        if(flag==Utils::SUCCESS)
        {
            //调试信息
            qDebug()<<"Ser:update humi max ok";
        }
        else
        {
            //调试信息
            qDebug()<<"Ser:update humi max fail";
        }
        //
         //返回解析结果状态
        return Utils::SUCCESS;
    }
    //此处可以添加对其它命令的解析
    else if(cmd.startsWith(Utils::SET_TEMP_MIN))
    {
        //调试信息:表明信息类型
        //qDebug()<<"set temp min ";
        //调试信息:打印信息内容
        //qDebug()<<cmd;
        //调试信息:输出信息长度
        //qDebug()<<cmd.length();
        //调试信息:输出比对命令头长度
        //qDebug()<<Utils::SET_TEMP_MIN.length();

        //另一种获取有效数据索引值的方式
        //获取命令中“:”所在的位置
        //int offset =cmd.indexOf(":");
        //通过整个命令的长度计算出有效数据的长度
        //offset =cmd.length()-offset-1;

         //当前使用的获取有效数据的索引的方式
        int offset =cmd.length()-Utils::SET_TEMP_MIN.length();
        //调试信息:输出有效数据索引值
        // qDebug()<<offset;
        //在此处使用临时变量保存获取到的有效数据
        float value =cmd.right(offset).toFloat();
         //调试信息:输出有效数据的值
        qDebug()<<"SER:the temp set low value is "<<value;
        //
        bool flag=Utils::update_value_min(Utils::TEMP_ID,QString::number(value));
//        boolean flag=Utils::update_value_min(Utils::TEMP_ID,cmd.right(offset));
        if(flag==Utils::SUCCESS)
        {
            //调试信息
            qDebug()<<"Ser:update temp min ok";
        }
        else
        {
            //调试信息
            qDebug()<<"Ser:update temp min fail";
        }
        //
         //返回解析结果状态
        return Utils::SUCCESS;
    }
    //判断输入命令是否为TEMP相关
    else if(cmd.startsWith(Utils::SET_TEMP_MAX))
    {
        //调试信息:表明信息类型
        //qDebug()<<"set temp max";
        //调试信息:打印信息内容
        //qDebug()<<cmd;
        //调试信息:输出信息长度
        //qDebug()<<cmd.length();
        //调试信息:输出比对命令头长度
        //qDebug()<<Utils::SET_TEMP_MAX.length();

        //另一种获取有效数据索引值的方式
        //获取命令中“:”所在的位置
        //int offset =cmd.indexOf(":");
        //通过整个命令的长度计算出有效数据的长度
        //offset =cmd.length()-offset-1;

        //当前使用的获取有效数据的索引的方式
        int offset =cmd.length()-Utils::SET_TEMP_MAX.length();
        //调试信息:输出有效数据索引值
        // qDebug()<<offset;
        //在此处使用临时变量保存获取到的有效数据
        float value =cmd.right(offset).toFloat();
        //调试信息:输出有效数据的值
        qDebug()<<"SER:the temp set high value is "<<value;
        //
        bool flag=Utils::update_value_max(Utils::TEMP_ID,QString::number(value));
//        boolean flag=Utils::update_value_max(Utils::TEMP_ID,cmd.right(offset));
        if(flag==Utils::SUCCESS)
        {
            //调试信息
            qDebug()<<"Ser:update temp max ok";
        }
        else
        {
            //调试信息
            qDebug()<<"Ser:update temp max fail";
        }
        //
        //返回解析结果状态
        return Utils::SUCCESS;
    }
    else if(cmd==(Utils::OPEN_THE_LIGHT))
    {
        qDebug()<<"Ser:client request open the light";
        emit send_cmd_to_node(Utils::OPEN_THE_LIGHT+"\n");
        return Utils::SUCCESS;
    }
    else if(cmd==(Utils::CLOSE_THE_LIGHT))
    {
        qDebug()<<"Ser:client request close the light";
        emit send_cmd_to_node(Utils::CLOSE_THE_LIGHT+"\n");
        return Utils::SUCCESS;
    }
    //此处处理对未定义指令进行处理
    else
    {
         //返回解析结果状态
        return Utils::FAIL;
    }
}