LS自主研发项目上位机自检
状态机,父状态,子状态,子子状态
空白状态stIdle,主状态stMain,debug主状态sfDisplayOn,debug主状态sfDisplayOff,自子状态机stLoad有些功能检测起来比较复杂,要用三四个状态组合来检查。
步骤:1,定义状态机
头文件中包含状态机类,定义并新建一个状态机(一般为指针类型变量)machine = new StateMachine(this);
2,定义并新建状态,这些状态是级别最高状态,主要是空闲stIdle,检测状态stMain,并将这些状态加入到状态机当中。并且指定当前状态书的初始状态。 machine->setInitialState(stIdle);
为主状态stMain指定初始状态。
3.用addTransition为每一个状态写好状态跳转。
4.除了要靠路状态正确跳转,还要考虑如果此状态处理不及时的情况,所以还要设置超时的跳转。
5.顺序跳转和超时跳转都设置好了,可以添加跳转时的一些汉字提示。
代码:
QStateMachine *machine; //state machine
QState *stIdle, *stMain;
QState *stUpBumperPress;
QState *stUpBumperRelease;
QState *stUpBumperCheck;
QState *stUpBumper;
QFinalState *stUpBumperDone;
QTimer *upBumperPressTimer, *upBumperReleaseTimer;
machine = new QStateMachine(this);
stIdle = new QState;
stMain = new QState;
upBumperPressTimer = new QTimer(this);
upBumperReleaseTimer = new QTimer(this);
upBumperPressTimer->setInterval(keyInterval);
machine->addState(stMain);
machine->addState(stIdle);
machine->setInitialState(stIdle);//指定当前状态书的初始状态stMain->setInitialState(stLoad);
stUpBumper = new QState(stMain);
stUpBumperPress = new QState(stUpBumper);
stUpBumperRelease = new QState(stUpBumper);
stUpBumperCheck = new QState(stUpBumper);
stUpBumperDone = new QFinalState(stUpBumper);
stUpBumper->setInitialState(stUpBumperPress);
stIdle->addTransition(ui->startButton, SIGNAL(clicked()), stMain);
stMain->addTransition(stMain, SIGNAL(finished()), stIdle);
stMain->addTransition(ui->resetButton, SIGNAL(clicked()), stIdle);
stUpBumper->addTransition(stUpBumper, SIGNAL(finished()), stPowerKey);
stUpBumperPress->addTransition(this, SIGNAL(upBumperPressed()), stUpBumperRelease);
stUpBumperRelease->addTransition(this, SIGNAL(upBumperReleased()), stUpBumperCheck);
stUpBumperCheck->addTransition(this, SIGNAL(upBumperTested()), stUpBumperDone);
stUpBumper->assignProperty(ui->statusLabel,"text","请按下顶部碰撞后松开");
connect(stUpBumperPress, SIGNAL(entered()), upBumperPressTimer, SLOT(start()));
connect(stUpBumperPress, SIGNAL(exited()), upBumperPressTimer, SLOT(stop()));
connect(stUpBumperRelease, SIGNAL(entered()), upBumperReleaseTimer, SLOT(start()));
connect(stUpBumperRelease, SIGNAL(exited()), upBumperReleaseTimer, SLOT(stop()));
connect(stUpBumperCheck, SIGNAL(entered()), this, SLOT(testUpBumper()));
connect(upBumperPressTimer, SIGNAL(timeout()), this, SLOT(testUpBumperPress()));
connect(upBumperReleaseTimer, SIGNAL(timeout()), this, SLOT(testUpBumperRelease()));
delete stUpBumperPress;
delete stUpBumperRelease;
delete stUpBumperCheck;
delete stUpBumperDone;
delete stUpBumper;
界面初始化的时候这些定时器要new 要给定定时器的计时时间,当线程结束时要记得timer.stop();
本文介绍在LS自主研发项目上位机自检过程中,如何利用QT框架构建状态机进行复杂功能检测。主要步骤包括定义状态机、创建不同状态(如stIdle, stMain, sfDisplayOn, sfDisplayOff等)、设置状态转换、处理超时情况及添加状态切换提示。通过这种方式,可以有效地组织和管理检测流程。"
113192867,10548412,SpringBoot整合SpringMVC、MyBatis与MySQL数据库实战,"['SpringBoot', 'SpringMVC', 'MyBatis', '数据库开发', 'JavaWeb']
526

被折叠的 条评论
为什么被折叠?



