前面操作的整体逻辑是初始化-》然后等待指令-》根据指令进入不同事件改变状态(3 封私信 / 2 条消息) 介绍一个超级实用的编程思想——状态机 - 知乎一、状态机模式串口助手的功能中串口打开关闭只是基础现在打好了地基要实现收发数据等的话需要用到状态机思想不同功能放到不同的状态分支中然后用串口开关控制作为前提条件根据不同条件判断跳转到想要功能的状态分支中。然后保存该控件状态机到一个新建文件夹命名SubVI以后新建的控件可以放着里面先简单分为初始化init、等待wait、获取消息命令GetData、退出Exit四个状态就可以把前面的枚举控件删掉直接把我们刚做的拖进去了连接到while循环并替换成移位寄存器。添加一层条件结构把枚举的四个分支都添加上去现在把程序框图按照这四个状态放进去输入init后下一个状态是wait然后依次连接。如果串口打开失败就又返回wait状态打开成功再进入到GetData状态关闭串口后也回到wait状态在while循环内即倒数第二个节点创建显示控件这样可以随时观测到此时进入的是什么状态然后初步验证此时会出现打开一个串口后就卡死只能中止重新运行才能还原。是因为在GetData陷入了死循环所以GetData应该回到wait状态一直处于等待命令毕竟串口助手要一直工作不能实现一个打开就死机了。但又陷入了另外一种状态灯频繁亮灭串口快速打开关闭程序无法固定在一个状态所以在wait状态的超时事件中加一个状态的判断读取①创建一个指示灯的局部变量放入超时事件中变为读取并添加一个条件结构。②当指示灯状态为真证明打开了串口进入下一步为假回到wait状态再运行验证此时打开关闭串口和灯都正常但枚举状态一直显示wait③想要验证是否进入到了GetData状态就在GetData分支里加个延时1000ms。运行验证目前逻辑是“初始化——串口打开——收数据——等待——收数据1s——等待一瞬间——收数据1s·········所以运行后打开串口枚举状态栏会有闪一下就是正常的。验证完没问题就可以把定时删掉。④可以把超时时间设的短一点让他不用等直接进超时事件判断串口状况打开还是关闭然后是要进wait分支还是GetData分支所以这里设置为0。只是设置为0后前面板状态那里会闪的快一点因为还没写收数据部分所以很快会进入wait分支。至此搭好了状态机的框架后面开始写GetData部分代码。