labview串口助手

今天,用labview做一个串口助手demo,参考视频手把手带你用LabVIEW做一个串口助手;我基本上跟着视频学习了一遍,现做个整理,此流程是按照程序执行流程的思路构建的程序

第一个功能初始化

初始化,就是提供串口通讯的环境,包括设置串口,打开关闭串口,设置参数如波特率,接受方式等等

实现的功能为,在面板上创建一个选择串口的窗口,一个打开关闭串口的按钮,一个指示串口状态的指示灯

要求是点击打开按钮,能打开对应的串口,如果无法打开,就弹出窗口,显示异常;再选择串口窗口处,如果更改了串口,自动打开,指示灯和打开按钮显示对应串口状态,ex若该串口已经打开,灯为绿色,按钮处显示为关闭操作;

该流程为,先创建了两个变量,一个是指示灯的状态state,另一个为按钮“打开串口”的状态,然后进入while循环,点击stop结束;在循环中,有两个触发时间,一个是点击”打开串口“按钮的事件,一个是更换串口的事件,更换后会自动打开,右边也会显示对应状态

构建程序状态

做到这儿,我们已经实现了一个小功能,但是却发现,这个时候要进行下一步,好像不知道如何下去了,这个时候引入一个枚举类型,枚举了程序不同的状态,就能更清晰的表达程序执行的流程,相当于c语言的switch语句,不同的case,执行不同语句

程序的流程可以归纳如下

首先,对面板进行配置,初始化完成后就去等待,等待接串口的数据或往串口发数据,这些都执行完后就退出

所以程序的状态可以归纳为:

  • 初始化(init)
  • 等待(wait)
  • 接受数据(receive)
  • 发送数据(send)
  • 退出(exit)

五个状态

创建自定义枚举类型,并把元素(枚举与循环的连点)替换为移位寄存器,相当于为每个枚举的操作创建了程序入口和出口

枚举类型转换成常量,就能在后面板标选了

用一个枚举连接一个判断条件,然后为所有状态创建分支,分别给所有分支设置出口

入口应该是init,执行完后等待wait,初始化四个值,分别是指示灯状态,串口开关状态,清空输入输出框

wait时候应该检测事件是否发生:是否点击打开按钮,是否更换串口,是否点击发送,是否点击接收,分别执行不同操作五个事件,由枚举配合事件完成

然后是不同的操作,send后进入等待,receive后进入等待

最后检测到stop进入exit结束,关闭占用资源,退出程序

程序的框架有了,后面就是完善各个模块了

等待wait

发送数据send

发送数据需要一个串口,直接用局部变量到前面取就可以了,还要一个缓冲池,这个就是我们的输入框

接受数据receive

接受的话同样也需要一个缓冲池来缓存,引入一个VISA串口字节数(仪器I/O->串口->VISA串口字节数)来判断缓冲区是否取完,然后不断的添加到输出框就行了

退出exit

退出关闭串口,清空缓存,恢复按键状态

最后整理一下面板

测试