#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); combt[0]=ui->com0;combt[1]=ui->com1;combt[2]=ui->com2;combt[3]=ui->com3;combt[4]=ui->com4; combt[5]=ui->com5;combt[6]=ui->com6;combt[7]=ui->com7;combt[8]=ui->com8;combt[9]=ui->com9; combps[0]=ui->selectcombps0;combps[1]=ui->selectcombps1;combps[2]=ui->selectcombps2;combps[3]=ui->selectcombps3;combps[4]=ui->selectcombps4; combps[5]=ui->selectcombps5;combps[6]=ui->selectcombps6;combps[7]=ui->selectcombps7;combps[8]=ui->selectcombps8;combps[9]=ui->selectcombps9; comen[0]=ui->comen0;comen[1]=ui->comen1;comen[2]=ui->comen2;comen[3]=ui->comen3;comen[4]=ui->comen4; comen[5]=ui->comen5;comen[6]=ui->comen6;comen[7]=ui->comen7;comen[8]=ui->comen8;comen[9]=ui->comen9; cmden[ 0]=ui->cmden00;cmden[ 1]=ui->cmden01;cmden[ 2]=ui->cmden02;cmden[ 3]=ui->cmden03;cmden[ 4]=ui->cmden04; cmden[ 5]=ui->cmden05;cmden[ 6]=ui->cmden06;cmden[ 7]=ui->cmden07;cmden[ 8]=ui->cmden08;cmden[ 9]=ui->cmden09; cmden[10]=ui->cmden10;cmden[11]=ui->cmden11;cmden[12]=ui->cmden12;cmden[13]=ui->cmden13;cmden[14]=ui->cmden14; cmden[15]=ui->cmden15;cmden[16]=ui->cmden16;cmden[17]=ui->cmden17;cmden[18]=ui->cmden18;cmden[19]=ui->cmden19; cmdline[ 0]=ui->cmd00; cmdline[ 1]=ui->cmd01; cmdline[ 2]=ui->cmd02; cmdline[ 3]=ui->cmd03; cmdline[ 4]=ui->cmd04; cmdline[ 5]=ui->cmd05; cmdline[ 6]=ui->cmd06; cmdline[ 7]=ui->cmd07; cmdline[ 8]=ui->cmd08; cmdline[ 9]=ui->cmd09; cmdline[10]=ui->cmd10; cmdline[11]=ui->cmd11; cmdline[12]=ui->cmd12; cmdline[13]=ui->cmd13; cmdline[14]=ui->cmd14; cmdline[15]=ui->cmd15; cmdline[16]=ui->cmd16; cmdline[17]=ui->cmd17; cmdline[18]=ui->cmd18; cmdline[19]=ui->cmd19; enen[ 0]=ui->isEN00;enen[ 1]=ui->isEN01;enen[ 2]=ui->isEN02;enen[ 3]=ui->isEN03;enen[ 4]=ui->isEN04; enen[ 5]=ui->isEN05;enen[ 6]=ui->isEN06;enen[ 7]=ui->isEN07;enen[ 8]=ui->isEN08;enen[ 9]=ui->isEN09; enen[10]=ui->isEN10;enen[11]=ui->isEN11;enen[12]=ui->isEN12;enen[13]=ui->isEN13;enen[14]=ui->isEN14; enen[15]=ui->isEN15;enen[16]=ui->isEN16;enen[17]=ui->isEN17;enen[18]=ui->isEN18;enen[19]=ui->isEN19; cmddly[ 0]=ui->cmddly00;cmddly[ 1]=ui->cmddly01;cmddly[ 2]=ui->cmddly02;cmddly[ 3]=ui->cmddly03;cmddly[ 4]=ui->cmddly04; cmddly[ 5]=ui->cmddly05;cmddly[ 6]=ui->cmddly06;cmddly[ 7]=ui->cmddly07;cmddly[ 8]=ui->cmddly08;cmddly[ 9]=ui->cmddly09; cmddly[10]=ui->cmddly10;cmddly[11]=ui->cmddly11;cmddly[12]=ui->cmddly12;cmddly[13]=ui->cmddly13;cmddly[14]=ui->cmddly14; cmddly[15]=ui->cmddly15;cmddly[16]=ui->cmddly16;cmddly[17]=ui->cmddly17;cmddly[18]=ui->cmddly18;cmddly[19]=ui->cmddly19; for(quint8 i=0;i<10;i++){combt[i]->setText("COM"+QString::number((i+3),10,0));} combs[0]=ui->textBrowser0;combs[1]=ui->textBrowser1;combs[2]=ui->textBrowser2;combs[3]=ui->textBrowser3;combs[4]=ui->textBrowser4; combs[5]=ui->textBrowser5;combs[6]=ui->textBrowser6;combs[7]=ui->textBrowser7;combs[8]=ui->textBrowser8;combs[9]=ui->textBrowser9; for(quint8 i=0;i<10;i++){combs[i]->clear();} ui->pbstart->setText("开始"); connect(ui->pbstart, SIGNAL(clicked()), this, SLOT(startstop())); connect(ui->logclr10, SIGNAL(clicked()), this, SLOT(logclrall())); connect(ui->isCOMALL, SIGNAL(stateChanged(int)), this, SLOT(COMSelect(int))); connect(ui->isCMDALL, SIGNAL(stateChanged(int)), this, SLOT(CMDSelect(int))); connect(ui->isENTERALL, SIGNAL(stateChanged(int)), this, SLOT(ENTERSelect(int))); TimeInit(); setWindowTitle("tencom V1.00 by pm9gzy@163.com on " __DATE__ " - " __TIME__ ); QSignalMapper *pMap = new QSignalMapper(); for(quint8 i=0;i<10;i++) { connect(&COM[i], SIGNAL(readyRead()), pMap, SLOT(map())); pMap->setMapping(&COM[i], i); } connect(pMap, SIGNAL(mapped(int)), this, SLOT(COMRead(int))); InitFile = "data.ini"; settingRead(InitFile); } MainWindow::~MainWindow() { delete ui; } void sleep(unsigned int msec) { QTime dieTime = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() < dieTime ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } void MainWindow::startstop() { switch (mode) { case IDLE: mode=INIT;ui->pbstart->setText("停止");break; case WORK: mode=STOP;ui->pbstart->setText("开始");break; default: break; } } void MainWindow::logclrall() { for(quint8 i=0;i<10;i++){combs[i]->clear();} } void MainWindow::COMSelect(int state) { bool set=true; if (state == Qt::Checked){set=true;}else{set=false;} for(quint8 i=0;i<10;i++){comen[i]->setChecked(set);} } void MainWindow::CMDSelect(int state) { bool set=true; if (state == Qt::Checked){set=true;}else{set=false;} for(quint8 i=0;i<20;i++){cmden[i]->setChecked(set);} } void MainWindow::ENTERSelect(int state) { bool set=true; if (state == Qt::Checked){set=true;}else{set=false;} for(quint8 i=0;i<20;i++){enen[i]->setChecked(set);} } void MainWindow::TimeInit() { QTimer *timer=new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(TimeOutslot())); timer->start(10);//启动timer定时器 // qDebug()<<"TimeInit()"; } void MainWindow::SerialClose(void) { for(quint8 i=0;i<10;i++){COM[i].close();} } void MainWindow::TimeOutslot() { switch (mode) { case INIT: SerialInit() ;mode=WORK; break; case WORK: for(quint8 j=0;j<20;j++) { if(!cmd[j].isEmpty()) { for(quint8 i=0;i<10;i++) { COMWrite(&COM[i],cmd[j]); if(comen[i]->isChecked()) { if(ui->isSEND->isChecked()) { if(ui->isTIME->isChecked()) { QDateTime date_time =QDateTime::currentDateTime(); QString time ='['+date_time.toString("hh:mm:ss.zzz")+']'; combs[i]->append(time); combs[i]->insertPlainText(cmd[j]); } else {combs[i]->insertPlainText(cmd[j]);} combs[i]->moveCursor(QTextCursor::End); } combs[i]->append("\n"); } } bool ok;sleep(cmddly[j]->displayText().toInt(&ok, 10)); } } mode=STOP;ui->pbstart->setText("开始"); break; case STOP: SerialClose();mode=IDLE;settingSave(InitFile); break; case IDLE: break; default: break; } } /*(1)枚举与当前设备连接的所有串口,如果发现是所需要的串口 ( COM5 ),则将串口接收数据的信号与自定义的槽函数SerialRead()进行绑定, * 在槽函数SerialRead()中处理接收到的数据。*/ void MainWindow::SerialInit() { for(quint8 i=0;i<10;i++) { QString com="COM"+QString::number(i+3,10,0); //获取串口名 COM[i].setPortName(com); // qDebug()<< com << COM[i].portName(); if((COM[i].open(QIODevice::ReadWrite))&&(comen[i]->isChecked())) { QString str=combps[i]->currentText(); //获取波特率 bool ok;quint32 baudrate= str.toInt(&ok, 10); //qDebug()<< str << baude; COM[i].setBaudRate (baudrate); //(QSerialPort::Baud115200); COM[i].setDataBits (QSerialPort::Data8); COM[i].setParity (QSerialPort::NoParity); COM[i].setStopBits (QSerialPort::OneStop); COM[i].setFlowControl (QSerialPort::NoFlowControl); COM[i].clearError(); COM[i].clear(); combt[i]->setText(com); //qDebug()<<"open "+com; } else { QString str=" ";COM[i].setPortName(str);combt[i]->setText(str); } } for(quint8 i=0;i<20;i++) { if(cmden[i]->isChecked()) { cmd[i]=cmdline[i]->displayText(); //qDebug()<< cmd[i]; if(enen[i]->isChecked()){cmd[i]+="\r\n";} } else{cmd[i].clear();} } } /*(2)处理收到的数据。*/ void MainWindow::COMRead(int com) { QByteArray temp=COM[com].readAll(); if(!temp.isEmpty()) { if(ui->isRECV->isChecked()) { QString strDisplay = QString(temp); if(ui->isTIME->isChecked()) { QDateTime date_time =QDateTime::currentDateTime(); QString time ='['+date_time.toString("hh:mm:ss.zzz")+']'; combs[com]->insertPlainText(time); } combs[com]->insertPlainText(strDisplay); combs[com]->moveCursor(QTextCursor::End); } COMArray[com].append(temp); if(!QString::localeAwareCompare(COMArray[com], "OK")) { COMArray[com].clear(); } } } /*(3)发送数据 */ void MainWindow::COMWrite(QSerialPort *com,QString str) { if(com->isOpen()) { char *ch=str.toLocal8Bit().data();com->write(ch); } else { //qDebug()<<"COM not open"; } } void MainWindow::settingRead(QString filename) { QFile file(filename); if (file.open(QIODevice::ReadOnly)) { QDataStream in(&file); for(quint8 i=0;i<10;i++){QString str; in >> str; combps[i]->setEditText(str); } for(quint8 i=0;i<10;i++){bool check; in >> check; comen[i]->setChecked(check); } for(quint8 i=0;i<20;i++){bool check; in >> check; cmden[i]->setChecked(check); } for(quint8 i=0;i<20;i++){QString str; in >> str; cmdline[i]->setText(str); } for(quint8 i=0;i<20;i++){bool check; in >> check; enen[i]->setChecked(check); } for(quint8 i=0;i<20;i++){QString str; in >> str; cmddly[i]->setText(str); } bool check; in >> check;ui->isCOMALL->setChecked(check); in >> check;ui->isSEND->setChecked(check); in >> check;ui->isRECV->setChecked(check); in >> check;ui->isTIME->setChecked(check); in >> check;ui->isCMDALL->setChecked(check); in >> check;ui->isENTERALL->setChecked(check); file.close(); } else {QMessageBox::critical(this, tr("读取参数失败"), tr("未能打开") + InitFile + tr("配置文件") + tr("\n请重新配置"), QMessageBox::Ok);} } void MainWindow::settingSave(QString filename) { QFile file(filename); if (file.open(QIODevice::ReadWrite)) { QDataStream out(&file); for(quint8 i=0;i<10;i++){out << combps[i]->currentText(); } for(quint8 i=0;i<10;i++){out << comen[i]->isChecked(); } for(quint8 i=0;i<20;i++){out << cmden[i]->isChecked(); } for(quint8 i=0;i<20;i++){out << cmdline[i]->text(); } for(quint8 i=0;i<20;i++){out << enen[i]->isChecked(); } for(quint8 i=0;i<20;i++){out << cmddly[i]->text(); } out << ui->isCOMALL->isChecked(); out << ui->isSEND->isChecked(); out << ui->isRECV->isChecked(); out << ui->isTIME->isChecked(); out << ui->isCMDALL->isChecked(); out << ui->isENTERALL->isChecked(); file.close(); } else {QMessageBox::critical(this, tr("保存参数失败"), tr("未能打开") + InitFile + tr("配置文件") + tr("\n请重新尝试"), QMessageBox::Ok);} } void MainWindow::mouseMoveEvent(QMouseEvent *event) { if(event->buttons() & Qt::LeftButton) { // qDebug()<<"LeftButton"; } } void MainWindow::mousePressEvent(QMouseEvent *event) { // int x = event->x(); // int y = event->y(); // qDebug()<< x << y; if(event->button() == Qt::LeftButton) { // qDebug()<<"mousePressEvent"; } }