我的研发成果(35)手提式水果糖酸度检测机__SubVI详解
之前的文章提到这台机器的程式中用到SubVI相当多,有参考光谱仪原厂附的范例改写的的读取资料用SubVI,有参考TSC标签机Visual Basic程式码改写自制的SubVI,也有使用免费外挂的OpenG程式,更有大量自创的SubVI程式
其中光谱仪和TSC标签机的程式在部落格内已有文章说明,用到的OpenG程式是别人的著作也不另外说明,这篇文章只针对前面文章没有提到的SubVI做说明
首先要说的是LabVIEW中的特殊档案格式TDMS,TDMS这个档案格式几乎没有任何书籍提到如何使用,我是从大陆购买的书中才看到一本有大概简介的资料。知道了大概使用方法后,还是试了多次才有办法把我要的资料存入
TDMS这个档案格式的好处大概就是每一笔资料可以对应一个频道,而多个频道则可以整合成一个群组。频道和群组可以使用自定名称,在有很多资料要分类个别读写处理时很好用
TDMS档案还是可以靠程式来读出内含的所有频道和群组的数量名称,以资料保密的观点来看似乎不是好选择
读取TDMS档案内频道和群组的程式
程式中用到的TDMS档是另外写程式写入资料建立的,从LabVIEW的Help档中,可以知道有支援各类格式资料的写入。我程式中写入的资料当然不会那么直接,我把布林、文字、数字这些资料,全部以一定方法转成数字格式再写入。就算有办法读到资料内容,没有经过还原处理也只会看到数字资料,绝对猜不出原本是什么内容
写入程式其实不会很复杂,基本上是先创建或打开TDMS档,再来就是按照频道和群组一一写入资料,最后再关闭档案
写入程式的程式面板
写入程式的程式码
检测机内读取TDMS档案的地方有几个;暗电流TDMS是单独一个档案,里面只有一个群组和2个频道。另一个TDMS档案则包含了所有操作参数和检量线资料,到停产前为止这个档案内已有52个群组和348个频道,总计有45种水果的检测资料
以下是水果检测资料部分的读取程式,操作参数部分会牵扯到资料的解码不在这里揭露
再来说的是程式的核心部分,糖酸度量测SubVI,就是上一篇文章中连续取样21次回圈内靠右边的那个
这个SubVI实际上是很复杂的,从程式面板就可以看出有多少笔资料进出
程式码分成2个动作部分:
"白板校正"模式,在回圈前20次时是累积光谱资料
回圈处理到第21次时,将累计的光谱资料处理后再输出
白板光谱资料的处理是只取出需要的部分,删除多余的资料,再平均化处理
"糖度量测"模式是按照一定顺序算出糖、酸度
其中光谱资料的前处理"吸收光谱计算"、"平滑化处理"和"标准化处理"这3个SubVI的程式码早已发布在部落格内,不再重复说明
糖度和酸度计算的SubVI程式码相同,分成2个顺序执行是避免资料同时跑时会计算错误
计算出的糖、酸度接下来是去除偏差较大的10笔资料,这部分交给回圈自动处理
去除资料后,在接著是对剩下的资料做温度偏差修正
其中糖、酸度补偿修正SubVI原本是像之前部落格内文章写的,是使用Interpolate 1D Array这个元件加上取样数据来处理。但这个方法是有缺点的,超出取样数据外的最高、最低值时,还有不是刚好符合取样数据时,较大的偏差是无法避免的
这缺点是经过北部XX农会和南部XX农会的洗礼,才发现问题严重;北部XX农会仓库平均温度在-5度到2度之间,南部XX农会则是相反在进仓库前都在烈日下。于是一个是极端低温,另一个是极端高温,这2种状态要回复到室温通常约需1到2小时。农会当然不可能等水果回复到室温再使用机器,所以这是很大的问题
要解决这个缺点是有可能做到的,但公司的设备无法完全模拟那样极端的环境,没有农会仓库配合的话根本就无解;鉴于没有学术单位辅助很难寻求农会帮忙,大量取样需要更多成本,只好寻找其他解决方法
最后这修正用的SubVI改用的是函数式,程式不复杂,下的参数则是每种水果都不同,不过已可有效解决偏差问题。修正后的糖度平均偏差约误差在0.2度上下,修正后的酸度平均偏差约误差在0.02度上下
温度偏差修正后再来是计算糖酸比;关于糖酸比的计算我有很多想抱怨的地方,向老板提出要增加这一项的教授居然也不知道怎么算?身为农学教授都不知道那我要问谁?最后在网路搜寻良久,找到2个公式。实际验算结果,糖、酸度达到某一范围时2个公式都会出现明显不合理的结果。最后是选用容许范围较大的公式来用
糖酸比计算完成后,再来是若有启用"多点检测"模式时,会再进行累计数值平均计算,输出最后计算结果
收到最后计算结果后的SubVI是将结果判断是否达到选别标转,并输出判断结果,完成整个量测程序
最后一个较复杂的SubVI是把计算结果处理,按照列印设定合成列印参数输出
列印标签的字串组合有6种
主要SubVI到此解说完毕,下一篇是解说手提式水果糖酸度检测机的取样和问题