基于Python的车灯动画效果数据化技术

2022-08-03 06:51孙瑜
汽车零部件 2022年7期
关键词:数据表赋值时序

孙瑜

常州星宇车灯股份有限公司,江苏常州 213000

0 引言

LED凭借着亮度高、颜色饱和度高、低功耗、寿命长的特点逐渐取代卤素灯成为车灯行业的主流。同时随着车灯开始朝着智能化、个性化和人性化的方向发展,车灯上LED使用数量越来越多,对LED的控制要求也越来越高,这也无疑增加了软件的工作量以及工作难度。因此,本文设计了一种基于Python的车灯动画效果数据化技术,结合Excel及Python的特点,将车灯动画效果数据化。从而实现车灯效果可视化配置以及快速修改更新,大大减小了软件的工作量以及工作难度,适用于以后更加设计复杂、难度更高的LED车灯项目。

1 Excel动画效果时序图设计

1.1 灯组分布简图制作

根据结构设计将灯组简图通过Excel进行绘制,并进行编号。图1为灯组分布简图。

图1 灯组分布简图

如图1所示,灰色部分为后组合1灯组,黑色为后组合灯2灯组,浅灰色为后组合2的侧标部分。其中,1~36号灯组只需要点亮熄灭功能,37~51号灯组带呼吸效果,因此需要使用PWM进行控制。本文示例后组合灯共包含51组LED灯,将详细呈现该后组合灯动画效果数据化的过程。

1.2 动画效果时序图制作

动画效果时序图如图2所示,按照灯组分布简图编号制作动画效果时序图,纵坐标为灯组编号及灯名,横坐标为下一帧动画的时间。图中数字0表示灯组关灯,100表示完全点亮,1~99则用于需要控制灯组。此外可附上不同的颜色用于更直观体现开关灯效果,使用颜色深浅表示值。此方案灯名命名规则如图3所示。

图2 动画效果时序图

图3 灯名命名规则

图3中,字符为灯具功能名称(此方案为位置灯,故命名为tail),数字1为该灯组所在后组合灯位置(后组合灯1用数字1表示,后组合2用数字2表示),数字2为该灯组所在IC驱动地址,处于相同IC地址使用同一数字表示,数字3在32位数据类型无法满足数据存储时进行补充。

2 Excel动画效果时序表参数导入

Jupyter Notebook是基于网页的用于交互计算的应用程序,可被应用于全过程计算,包括开发、文档编写、运行代码和展示结果等。Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。

文中将通过Jupyter Notebook工具演示车灯动画效果数据化过程。

如图4所示,首先调用Openpyxl库和NumPy库,再通过Openpyxl库导入Excel中数据存储于Js_sheet中。

图4 库导入

之后通过Np.dtype定义数据类型,即Open_Type表示后组合灯动画效果类型;Tail2_Type表示后组合灯2动画效果类型;Tail1_Type表示后组合灯1动画效果类型。其中“Name”为数据名,“Formates”为对应数据类型。灯组1~36号只有开关状态,故每个灯组使用0.125 B;37~51号灯组为控制,故每个灯组需要0.875 B。数据“Time”表示下一帧动画开始时间。初始化配置如图5所示。

图5 初始化配置

根据Excel中动画效果时序图,设置动画效果总帧数(Frames_number),时间轴所在行(Time_row),动画效果起始行(Time_start_col)以及每个数据起始行及行数。并通过Np.array创建后组合灯动画效果矩阵(Open_Data),填充值为0。如下所示:

Open_Data=np.array([0]*frames_number,dtype=Open_Type)

3 动画效果数据处理

按照数据名及数据类型定义各个数据缓存值并初始化,如图6所示。

图6 缓存数据初始化

利用For语句遍历每帧动画效果,同时将数据赋值相应数据中。

(1)“Time”值可以直接读取Js_sheet中第Time_row行数值。

Open_Data[i][’time’]=js_sheet.cell(time_row,time_start_col+i).value

(2)灯组1~36号通过判断读取值是否为0,根据灯组在该数据中位号进行赋值并做相应位移。例如Tail21赋值方式如下:

#tail21数据获取

for j in range(tail21_row_number):

if js_sheet.cell(tail21_row_start+j,time_start_col+i).value==0:

u16Tail21=u16Tail21&(~(0x01<

else:

u16Tail21=u16Tail21|(0x01<

Open_Data[i][tail21]=u16Tail21

(3)灯组37~51号直接将读取数据赋值,因值占0.875 B,为方便读取故每次读取之后位移8位。例如Tail51赋值方式如下:

#tail151数据获取

for j in range(tail151_row_number):

u8value=js_sheet.cell(tail151_row_seq[j],time_start_col+i).value

if u8value<=100:

u32Tail151=u32Tail151&(~(0xff<<(j*8)))

u32Tail151=u32Tail151|(u8value<<(j*8))

Open_Data[i][tail151]=u32Tail151

按照上述步骤,即可将Excel中数据全部导入Open_Data矩阵中。

4 动画效果数据表生成

动画效果数据表生成步骤为:

(1)定义后组合灯1(Tail1_Data)和后组合灯2(Tail2_Data)数据矩阵以及用于存放后组合1和后组合2的重复数据的数组(list_tail1_del,list_tail2_del)。

Tail1_Data=np.array([0]*frames_number,dtype=Tail1_Type)

Tail2_Data=np.array([0]*frames_number,dtype=Tail2_Type)

list_tail2_del=[]

list_tail1_del=[]

(2)从Open_Data数据矩阵中后组合1和后组合2数据分别存储在Tail1_Data和Tail2_Data中。

(3)通过遍历方式将Tail1_Data和Tail2_Data中重复数组序号分别存放在list_tail1_del和list_tail2_del中。

(4)删除Tail1_Data和Tail2_Data重复数组,生成后组合灯1最终数据矩阵(Tail1)和后组合灯2最终数据矩阵(Tail1)。

Tail2=np.delete(Tail2_Data,list_tail2_del,0)

Tail1=np.delete(Tail1_Data,list_tail1_del,0)

(5)将最终生成的动画效果数据打印出,并将灯组数据转换为十六进制便于灯具软件调用生成数据表。

后组合2动画效果数据打印方式如下:

tail2_num=Tail2.size

print(’尾二动画数据量:%i%tail2_num)

print(*************尾二动画数据表*************)

for cell in Tail2:

print({%i%(cell[time]-offset_time),end=,)

print(0x%04x%cell[tail21],end=,)

print(0x%02x%cell[tail22],end=,)

print(0x%08x%cell[tail231],end=,)

print(0x%02x%cell[tail232],end=)

print(},)

后组合1动画效果数据打印方式如下:

tail1_num=Tail1.size

print(尾一动画数据量:%i%tail1_num)

print(*************尾一动画数据表*************)

for cell in Tail1:

print({%i%(cell[time]-offset_time),end=,)

print(0x%02x%cell[tail11],end=,)

print(0x%02x%cell[tail12],end=,)

print(0x%02x%cell[tail13],end=,)

print(0x%02x%cell[tail14],end=,)

print(0x%08x%cell[tail151],end=,)

print(0x%08x%cell[tail152],end=,)

print(0x%04x%cell[tail153],end=)

print(},)

最终生成动画效果数据表如图7和图8所示。

图7 后组合2动画效果数据表

图8 后组合1动画效果数据表

将生成数据导入相应灯具软件之中,并根据Tail1和Tail2数据类型编写对应解析代码,即可直接使用动画效果数据表。

5 结束语

本文基于Python和Excel设计了一种可以将车灯动画效果数据化的技术,利用Excel可以更加直观地设计修改动画效果,之后生成的数据也能确保正确性和有效性。后期动画效果更新或者维护,仅需调整Excel中动画效果图以及相应配置参数,即可实时生成最新动画效果参数表,直接导入灯具软件中编译即可,这大大节省软件工程师的工作量及项目时间。对于目前越来越复杂的LED车灯设计,该技术也有极大的优势。该技术方案已应用于实际车灯项目,测试及使用表现良好,表明了该设计具有实用性和可靠性。

猜你喜欢
数据表赋值时序
顾及多种弛豫模型的GNSS坐标时序分析软件GTSA
清明
基于GEE平台与Sentinel-NDVI时序数据江汉平原种植模式提取
你不能把整个春天都搬到冬天来
湖北省新冠肺炎疫情数据表(2.26-3.25)
湖北省新冠肺炎疫情数据表
湖北省新冠肺炎疫情数据表
算法框图问题中的易错点
抽象函数难度降 巧用赋值来帮忙
利用赋值法解决抽象函数相关问题オ