目前在用labview读串口数据并且想绘制强度图。
串口读到的数据类似为(A1:5,B2:10,C3:15,D4:5),
需要把这四个不断变化的数据存入一个2*2的数组才能绘制强度图。
但不知道怎么才能将串口实时读到的数据写入数组中。
你可以通过使用LabVIEW的FIFO来实现将串口数据实时写入数组。下面是一个简单的实现过程:
1.首先,创建一个包含两个2x2的数组的全局变量。这些数组将用于存储最新的4个数据。
2.然后,创建一个FIFO,用于存储串口读取到的数据。FIFO的数据类型应该是一个包含4个元素的聚合类型(例如一个Cluster,包含4个元素:A1,B2,C3,D4)。
3.在读取串口数据的代码中,将读取到的数据打包成一个聚合类型,然后将其写入FIFO中。
4.接下来,在主程序中创建一个while循环,该循环不断地从FIFO中读取数据,并将其写入全局变量中。
5.最后,你可以在主程序中使用绘图模块,将2x2的数组作为输入,实时绘制强度图。
下面是一个伪代码,供你参考:
// 全局变量
Global Variable: 2x2 Array of Int32: RecentData
// 创建FIFO
Create New FIFO: MyFIFO, Data Type: Cluster(A1:Int32, B2:Int32, C3:Int32, D4:Int32)
// 串口读取数据
While (True)
Read Serial Port: MySerialPort
Parse Data: A1, B2, C3, D4
Create Cluster: MyData, Elements: A1, B2, C3, D4
Write to FIFO: MyFIFO, Data: MyData
End While
// 从FIFO中读取数据
While (True)
Read from FIFO: MyFIFO, Data: MyData
Unbundle Elements: A1, B2, C3, D4, from Cluster: MyData
Update Global Variable: RecentData, Elements: A1, B2, C3, D4
End While
// 绘制强度图
Plot 2D Array: RecentData
需要注意的是,由于这个方案使用了全局变量和循环,因此你需要小心处理并发问题和资源管理问题。
可以将串口读到的数据进行解析,提取出每个传感器的强度值,然后将这些值存入一个2*2的数组中。
1.首先,将串口读到的字符串进行分割,得到每个传感器的数据。
2.使用字符串函数(如Substring)提取每个传感器的强度值,并将其转换为数值类型。
3.将这些值存入一个2*2的数组中。可以使用一个计数器来记录已经存储了多少个传感器的数据,然后根据计数器的值来确定要存储到哪个位置。
4.绘制强度图。将2*2的数组作为数据源,使用LabVIEW自带的绘图函数(如Intensity Graph)来绘制实时变化的强度图。
以下是一个简单的LabVIEW程序示例,实现了将串口读到的数据存入2*2的数组,并绘制强度图。注意:此示例仅为演示目的,实际使用时需要根据实际情况进行修改。
配置串口是进入串口通讯的门槛,只有配置成功了,才能进行正确的通讯。首先我们看下 VISA 配置串口函数:
这里有个小技巧,配置串口时最好是在对应的参数端口那里,右键,新建常量或者输入控件,然后再在新建出来的常量或者输入控件上面修改。因为,新建出来的数据类型,肯定是对的。接下来解释下主要的输入参数:
(1) 启用终止符: 目的是使串行设备做好识别终止符的准备,默认值为TRUE, VI_ATTR_ASRL_END_IN属性设置为识别终止符;如值为FALSE,VI_ATTR_ASRL_END_IN属性设置为0(无)且串行设备不识别终止符。
(2)终止符:通过调用终止读取操作。从串行设备读取终止符后读取操作终止。 0xA是换行符( \n )的十六进制表示。消息字符串的终止符由回车( \r )改为0xD。
终止符的设置如下所示:
(3) 超时:指定读/写操作的时间,以毫秒为单位。 默认值为10000ms,即10s。如果你设置了超时,等待超时时间到了,程序就不执行了,错误输出会输出错。
(4)VISA资源名称:指定要打开的资源。VISA资源名称控件也可指定会话句柄和类。
(5)波特率是传输速率。 默认值为9600。
(6) 数据位是输入数据的位数。 数据位的值介于5和8之间。默认值为8。
(7)奇偶指定要传输或接收的每一帧使用的奇偶校验。