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"; } }
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); }
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); }
void Motor::emergencyStop() { send_cmd_to_node(CMD_OPENCAN_DISABLE_VOLTAGE,ID); //send_NMT_to_node(CMD_OPENCAN_NMT_STOP, ID); }
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; } }
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))); }
//(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; } }