配方指纹的设计
配方指纹的设计
在电解液配方传递的过程中, 如何验证一个配方在传递过程是没有发生变化,或者说,两个形式上不同的配方,它们是否属于同一个配方,我们该怎么检验呢?
之前我们最常用的方法,就是针对每个成分,针对它的含量,一个一个进行检查,两者是否一致.比如有以下两个配方
配方1 EC:DMC:EMC=3:2:4, 1%VC, 12.5%LIPF6
配方2 EC:EMC:DMC=3:4:2, 12.5% LIPF6, 1%VC
这两个配方,如果仅仅是文字对比,它存在着显著的差异. 但从配方的实际来看,它们有相同的组分,相同的含量,实际是上属于同一个配方.
这种配方的快速对比,我有一个办法,先统一转换文本为各组分的含量百分比,写到一个2*X的矩形单元格区域, 各组分预先指定一个固定的排序值,将它排序好之后,组分与含量一一组合成特定格式的文本串,相当于把文本重新规范编写,再对比二串文本就非常简单了,在文本编辑器中快速看一下长短,再看看字母上下行是否一样就可以看出来了.但不便之处是要拆解各组分并转化成一个数据块,需要一点编程. 如果没有这样的工具,一个一个的相互检查,就比较费劲了.
还有一种情况,如果一个配方表述为 各个物质的含量百分比, 但实际生产这个配方时,为了提高效率,我们使用了液态锂盐, 那需要加入的物质名称和含量都发生了变量.比如下面
配方3 LIPF6: 12%, EC:25%, DMC:15%, EMC:40%, FEC: 5%, VC: 1%, DTD: 2%
配方4 30%LIPF6-EMC溶液: 40%, EC:25%, DMC:15%, EMC:12%, FEC:5%, DTD:2%, VC:1%
配方3和配方4, 这两个配方,从所用的物质上有了不同,含量上也有至少两种物质不同. 但混合之后,得到的电解液又实际上是同一个配方. 这种配方是否判断是同一个配方,比较起来就更复杂,更加耗费脑力了.
有什么好的办法来快速又简单的对比两个配方是否 属于同一种配方吗?
其实是有的, 我们可以采用类似计算机上用过的办法,针对各个配方分别计算出一个代表其本质特征的参数出来,它能反映出成分的变化,也能反映出含量的变化(甚至是其它指标的变化). 而且这个参数具有可比性,这样我们就可以得到一个类似人的指纹一样的数值,用于比较两个配方是否相同.
于是, 我设计了这样一个指纹值,做法如下:
0)先将配方进行归一化计算, 使用物质的英文缩写和百分比值(不含%的值)进行计算
1)给每个纯净物质, 定义一个唯一的正的数值,就像物质的身份证号一样,比如指定它的不重复的缩写对应着某一个不重复值.这个值始终保持不变.
2)将上面这个物质的数值,与它的百分含量相乘,得到一个针对该物质及其含量的数值,不妨称为它的特征值.
2.1)为了取整数, 还可以将这个特征值乘以某个固定的系数(这个系数也可以直接乘到到第1步的值之内)
3)将配方中所有物质对应的特征值相加, 得到最终的数值,作为这个配方的指纹码.
4)如果使用的原料是混合物,这个混合物只要组成稳定,根据各成分的权重与含量也可以算出来一个系数作为特征系数,就像纯净物一样对待,得到它的特征值.
这样子计算出来的数值,即包含了它的成分变化时的影响,也包含了含量变化时的影响, 如果任何一个参数发生了变化,结果上就可以看到它的变化.用这样的参数来对比两个配方是否相同,是可行的 ,也是简洁的.
可以看到,由于各组分之间是相加的关系,所以打乱了组分的顺序并不会影响到结果;
看起来这种计算并不会减少工作量,但由于计算的结果最终是以一个简单的指纹值来表达其特征(多个成分+含量),在比较时就非常简单.
而且前面计算和转换的工作量完全可以用程序代码来执行, 避免人工眼睛扫描对比的对比方式, 效率就会好得多.
以下是我用一个随便编的配方, 生成的配方指纹(或称配方水印)的演示效果.

还有一个好处是,虽然我们通过对比数值来判断配方是否相同,但反过来并不能根据这个数值倒推出配方的成分和含量.因此即使分享这个指纹值,也不会泄露配方的具体内容.它只是一个特征值,计算过程中已经丢掉了具体的成分信息.
为了使用上方便,我将上述概念及操作的代码放到一个EXCEL的XLSM文件中, 打开这个文件即可使用. 如果愿意折腾,也还可以用加载宏、VSTO插件、DLL、XLL等其它文件形式封装. 用WPS的JS宏来写可以做到同样效果。
最后分享一下不含保密编码的 指纹计算工具. xlsm文件使用需要启用VBA运行的权限. 只有一个CalcFP函数,将按行排列的配方区域作为参数传入即可。代码公开。
链接: https://pan.baidu.com/s/10PI234sSBZJ2hJbgcTtrwQ?pwd=abcd

浙公网安备 33010602011771号