4.7.3 PC处理部分
系统中PC处理部分包括以下几个模块:数据接收模块、数据解压缩模块、FBG波长计算和检测显示模块。
数据接收模块主要是为了和FBG解调仪进行通信,接收解调仪的数据,同时利用该模块也可以发送控制信号用于配置解调仪参数。数据接收模块在PC软件系统中,通过TCP/IP方式实现,利用SOCKET套接字和WinAPI函数实现在高速光纤光栅解调系统中通信,解调仪作为TCP服务器端,PC机作为TCP客户机主动请求连接,图4.51是客户机端连接流程图。

图4.51 上位机链接流程图
PC客户端链接流程是典型的TCP客户连接请求,当链接请求成功后,开辟新线程处理数据部分,是为了更好地体现实时性,请求失败返回主线程给出通知,新线程和主线程通过全局变量进行数据交换。本系统有两种接收数据类型:峰值数据和A/D釆样数据,对于这两种数据,使用不同标志头进行区分。下面是两种数据的标志头,如表4.6所示。
表4.6 两种数据类型区分表

数据解码是FBG 解调仪数据编码的逆向过程,数据解压缩流程图如图4.52所示。将解调后的原始数据输送到接收模块,在传输前,为了节约带宽资源和传输速度,本节将原始数据通过LZW 压缩方式进行压缩处理,为获得原始数据,解码模块需要将压缩后的原始数据进行解压,还原数据,对于解码,我们唯一需要知道的就是编码的长度了,每次从编码流中读取相应bit的长度,就形成一个编码,再通过该编码从编码表中找出相对应的串输出即可。
LZW 解压操作与压缩时基本相同,边读取数据边维护压缩字典,解码完成后LZW 字典与压缩时是一样的。具体解压缩过程是:初始化编码表,并置前一个编码为空;取一个编码,如果编码为结束,则结束,否则进行下一步;输出编码所代表的字符串,如果前一个编码不为空,将前一个编码的字符串与当前字符串的第一个字符作为新的串加入编码表中,置前一个编码为当前编码,并执行第二步。
波形显示模块是检测系统解调软件部分中的重要模块,会比较形象地展示FBG数据波形,波形显示模块部分设计如图4.53所示。
上位机显示界面主要区域有主标题域、采样时间、信号值、波形数据、波形峰值、存储路径选择、通信端口选择、波形显示以及控制区域。利用MFC画图,在波形显示过程中,当实际数据量很大时且要求实时显示时,波形由于图形的不停重新绘制容易出现闪屏现象,为了解决这些问题,本节釆用双缓冲技术来绘图。使用双缓冲解决闪烁显示的示意图如图4.54所示。

图4.52 数据解压缩流程图(https://www.daowen.com)
双缓冲的实现原理是在内存中创建一个与屏幕绘图区域一致的内存对象,先在内存中绘制图形,然后再一次性把图形拷贝到屏幕上,这样便加快了绘图的速度,实现的具体过程如下:在内存中创建一个与画布一致的缓冲区,将图形绘制在缓冲区中,一次性将缓冲区位图拷贝到当前画布上,释放内存缓冲区。
在MFC中,使用BitBlt函数拷贝内存图形到屏幕上,它可以支持图形块的复制,速度很快,使用此方法需要禁止背景刷新,以消除闪烁现象。
(1)峰值列表显示
峰值列表显示主要难点是列表类的实现,MFC有控件对应Clist类可以实现,List控件的Report属性可以实现列表形式,但是Clist只支持单行选中。CGrid类是开源类,可以实现类的支持单元选择,更新数据只需重新设置对应单元格的内容即可。CGrid类的初始化方法实例如图4.55所示。

图4.53 上位机界面

图4.54 双缓冲原理示意图

图4.55 CGrid类的初始化方法实例
(2)波形显示
频域波形显示,需要事先计算好波长数据的FFT变换。根据视窗图形的数据点的宽度和FFT 计算的方便,设计FFT 计算点分为256、512、1024、2048、4096、9182几个等级。根据标准FFT计算方法,FFT输入数据需要有实数序列和虚数序列对,而本系统数据只有实数点,故在计算FFT时进行了优化,输入数据不需输入虚数。在FFT计算之前需要去除数据的平均分量,这样不显示频率为零的点即不显示静态分量。在频域波形绘制时刷新频率同时域波形一样。为了方便分析波形特性,显示最高几个频率的频率值和能量值等特征量。