一种Adams载荷分解、处理方法及系统、计算机可读存储介质、电子设备与流程

专利2023-11-12  96


一种adams载荷分解、处理方法及系统、计算机可读存储介质、电子设备
技术领域
1.本发明计算机技术领域,具体涉及adams载荷分解、处理方法及系统、计算机可读存储介质、电子设备。


背景技术:

2.adams软件使用交互式图形环境和零件库、约束库、力库,创建完全参数化的机械系统几何模型,其求解器采用多刚体系统动力学理论中的拉格朗日方程方法,建立系统动力学方程,对虚拟机械系统进行静力学、运动学和动力学分析,输出位移、速度、加速度和反作用力曲线。adams软件的仿真可用于预测机械系统的性能、运动范围、碰撞检测、峰值载荷以及计算有限元的输入载荷等。
3.目前虚拟试验场耐久路面工况高达40多个,不同产品级别对应的路面工况不同,全路面载荷提取涉及车身、底盘、陈涛、螺栓、球铰等,零部件繁多前后处理复杂,通过adams仿真后的载荷数据全部输出到res文件中,高达数个g,而且该结果文件无法被疲劳分析软件直接识别并用于仿真,所以必须从res文件中筛选出需要的通道载荷,并输出特定的数据格式,所需的众多类型的载荷文件中,rsp文件最特殊且使用广泛读写速度快,由于它特殊的二进制编码方式,传统的做法是通过第三方后处理软件,每个通道逐个输出,第三方后处理软件获得的载荷数据,还需要进行人为的调整数据,做数据滤波、初始载荷截断等操作后才能用于车身及底盘的疲劳分析,效率低且容易出错,严重耽误整车的开发进度。


技术实现要素:

4.本发明的目的是提供一种adams载荷分解、处理方法及系统、计算机可读存储介质、电子设备,解决的技术问题:目前尚没有一种方式对adam载荷数据进行分解和处理,以便可精准的获得静态疲劳分析、动态疲劳分析以及连接件可靠性分析所需要的载荷文件。为解决上述技术问题,本发明采用的技术方案为:一种adams载荷分解、处理方法,包括的步骤为:s01,提取载荷的request名称;s02,判断是否存在adm文件;s03,如果否,则读取res文件;s04,获取时间列表和request的通道信息;s05,将载荷切割,获取指定通道载荷数据,获得request载荷字典;s06,基于request载荷字典判断初始段是否截断;s07,如果是,则获取截断时间t,进行载荷截断;s08,基于截断的载荷进行载荷填充;s09,判断是否滤波;s10,如果是,则获取滤波阶数和频率进行处理,得到处理后的载荷字典;
s11,输出指定格式载荷文件。
5.优选地,在所述s02中,如果是,则按照下述步骤得到request载荷字典,所述步骤为:a01,获取request的id和通道信息;a02,读取req文件;a03,获取所有request的id和载荷序号;a04,根据序号读取每个通道载荷,得到request载荷字典。
6.优选地,在所述s06中,如果否,则直接输出指定格式的载荷文件。
7.优选地,在所述s09中,如果否,则直接输出指定格式的载荷文件。
8.优选地,在所述s03中,python生成器以逐行方式读取res文件,识别一个组的开始关键字“entity name”及结束关键字“/entity”,entityname为request名字,其中,res文件的每一行信息还包括参数项enttype、objectid、comment,所述enttype为标识类型,objectid为对象编号,comment为对象文本描述。
9.优选地,在所述s04中,如果request为所需载荷request,获取对应通道信息,直到结束标志《/entity》之间的信息皆为request包含的所有通道,其中,参数项包括component name、unitsvalue、id,componet name为通道名,unitsvalue为对应通道的数据单位,id为对应通道的载荷位置;每个通道包含留个通道,其中,fx、fy、fz标识力,单位为newton;tx、ty tz为力矩,单位是newton-mm。
10.优选地,在所述s05中,request载荷字典以request名字为key,value是一个二维数组,数组的每一行表示一个通道数据,包括通道名、通道单位、通道id,并预留载荷列表load,时间列表time_list保存载荷的时间数据。
11.优选地,在所述s05中,获得所有request的通道信息后,继续执行遍历指令,直到读取到关键字“step”,关键字“step”之后为载荷数据区域,定位到《step type=〝initialconditions〞》,《step type=〝initialconditions〞》为整车模型的初始载荷,即载荷数据的开始,《step type=〝initialconditions〞》的下一行的数据为时间,时间单独占用一行,再下一行的数据没有固定分行,排列方式按照空格隔断,每个浮点数为一个通道的载荷,继续遍历至关键字《/step》出现代表时刻的载荷数据已经结束,载荷数据保留预设位的有效数字;获取所有对应时刻的载荷数据,split函数按照空格进行切割,得到对应时刻的所有载荷数据,数据个数即通道总数,根据request字典中的每个通道id,分别提取出相应位置的载荷存入通道载荷数组中,即完成对应时刻的载荷提取,依次获取对应时刻的载荷数据,即得到完整的request载荷字典。
12.优选地,
在所述a01中,每个request信息都是以request/1开头后面的数字表示request的编号,用数据保存,定位到每个request/,获取results_name,即request的名字,cnames为通道名字,用“,”隔开,cunits为通道单位也是用“,”隔开,使用六个通道,分别表示fx、fy、fz、tx、ty、tz。
13.优选地,在所述a02和a03中,依次读取每一行数据,识别到以预设值个空格开头的行,第一个数字表示request的编号,与adm中获取的编号一致,通过列表rid保存,依次读取到所有request的编号到rid中,知道识别到关键字“0.00000e+00”标志载荷数据的开始,0.00000e+00表示0时刻,时间数据独自占用一行,下一行数据表示一个request的预设值个通道载荷,request的顺序与rid的顺序一致;在所述a04中,判断对应request的编号是否是需要输出的request编号,找到载荷数据存入存入request载荷字典中,遍历完所有数据后,即可获取完整的request载荷字典。
14.本发明还提供一种adams载荷分解、处理系统,包括:提取模块,用于提取载荷的request名称;第一判断模块,用于判断是否存在adm文件;读取模块,如果是,用于读取res文件;获取模块,用于获取时间列表和request的通道信息;切割模块,用于将载荷切割,获取指定通道载荷数据,获得request载荷字典;第二判断模块,用于基于request载荷字典判断初始段是否截断;截断模块,如果是,则获取截断时间t,用于进行载荷截断;填充模块,用于基于截断的载荷进行载荷填充;第三判断模块,判断是否滤波;处理模块,如果是,用于获取滤波阶数和频率对填充后的载荷进行处理,得到处理后的载荷字典;输出模块,用于输出指定格式载荷文件。
15.优选地,在所述第一判断模块中,如果是,则按照下述步骤得到request载荷字典,所述步骤为;a01,获取request的id和通道信息;a02,读取req文件;a03,获取所有request的id和载荷序号;a04,根据序号读取每个通道载荷,得到request载荷字典。
16.本发明还提供一种计算机可读存储介质,所述可读存储介质中存储有程序,所述程序由硬件执行,以实现如上述的方法。
17.本发明还提供一种电子设备,其特征在于,所述电子设备包括处理器和存储器,所述存储器中存储有程序,所述程序由所述处理器执行,以实现如上述的方法。
18.通过采用上述发明,本发明可达到的有益技术效果:本发明应用于adams车辆动力学仿真后,对载荷的分解和处理,可精准获得静态疲劳分析、动态疲劳分析以及连接件可靠性分析所需要的载荷文件,效率较人工方式得到提升,可加快整车的开发进度。
附图说明
19.图1为从结果文件获取request载荷字典的流程图;图2为从request载荷字典输出所需载荷文件的流程图;图3为载荷截断2s后并填充2s数据后的载荷对比图;图4为载荷截断0.2s后并填充2s数据后的载荷对比图。
具体实施方式
20.下面结合附图对本发明作进一步说明。
21.本发明所涉及的adams道路分析的结果文件有:res文件:结果文件,里面包含了整车所有零部件及运动副的载荷、位移、加速度、角速度等信息,同时该文件还包含了整车多体模型中的全部信息,信息量十分庞大,一般的路面仿真结果文件占用内存高达3-10g,而实际车身、底盘的强度和耐久分析所需要的载荷只是其中的很小一部分,80%的数据是不需要的。
22.req文件:request文件,在整车多体动力学分析建模时,工程师会在底盘衬套处,或者在需要关注的运动副连接处建立request,类似于一个传感器,在建立了request的地方,仿真完成后将会输出这些request的载荷信息到res文件,同时也会输出到req文件,但req只包含载荷数据,不包含模型的详细信息,虽然占用内存小但没法直接使用。
23.adm文件:该文件产生于adams的仿真初期,里面包含了整车多体模型中的part信息、marker信息、graphics信息、joint信息、gforce信息、string信息、request信息等,包含通道序号,通道名字以及单位等信息。通过分析,该文件虽然是一个中间计算文件,但它包含的request信息,是囊括了所有工程师建立的request通道信息,对于本发明的载荷提取方法有重要作用。
24.本发明即是在上面的结果文件中快速的提取整车强度耐久所需的载荷数据。整车强度耐久分析包括车身、底盘、闭合件、螺栓的耐久分析,主要需要的载荷数据有:rsp数据,bdf数据、txt数据、tab数据,分别在不同的有限元求解器或者仿真平台上使用,并且上述载荷数据还需要进行预处理,包括载荷初始段的平滑处理,旨在模拟车辆平稳进入仿真路面;滤波处理,过滤载荷中的一些异常噪点,目前尚没有一个好的方法能实现从adams的结果直接到以上分析载荷的完美转换。
25.如图1和图2所示,本发明提供一种adams载荷分解、处理方法,提出了res载荷分解和req载荷分解两种方式,并运用多线程技术,能够高效率高精度的完成多个载荷的分解和处理,成功地解决了adams载荷自动分解机处理的工程难题。
26.批量处理adams载荷文件的前提是,所有的结果文件来自于同一个整车动力学模型,只是仿真路面不同而已,目的为了保证拥有相同的request信息。
27.该方法包括的步骤为:s01,提取载荷的request名称。工程师收集需要用于整车疲劳分析所需要的所有request名称,名称都是唯一的标识,再判断结果文件中是否有adm文件。
28.s02,判断是否存在adm文件。
29.s03,如果否,则读取res文件。python生成器以逐行方式读取res文件,识别一个组的开始关键字“entity name”及结束关键字“/entity”,entityname为request名字,其中,
res文件的每一行信息还包括参数项enttype、objectid、comment,所述enttype为标识类型,objectid为对象编号,comment为对象文本描述。若不存在adm文件,将从res提取载荷,由于res文件很大,必须使用python生成器读取大文件,逐行读入以避免内存溢出。识别关键字“entity name”代表一个组的开始,它的结束标志是《/entity》。比如下面一句,《entity name=〝force_subf_1034〞 entity=〝force_subf_1034〞 enttype=〝request〞objectid=〝0〞comment=〝force_subf_1034〞》,需要获取entity name,以及它所在的层级entity信息。enttype表示类型,本方法中仅关注request即可,其他的类型直接跳过,objectid是该对象的编号,不需要存储;comment是该对象的文本描述,一般和entityname一样不用单独存储,entityname即是request名字。
30.s04,获取时间列表和request的通道信息。如果request为所需载荷request,获取对应通道信息,直到结束标志《/entity》之间的信息皆为request包含的所有通道,其中,参数项包括component name、unitsvalue、id,componet name为通道名,unitsvalue为对应通道的数据单位,id为对应通道的载荷位置;每个通道包含留个通道,其中,fx、fy、fz标识力,单位为newton;tx、ty tz为力矩,单位是newton-mm。如果该request是需要获取载荷的request,那么接着获取它的每个通道信息,知道结束标志《/entity》之间的内容都是该request包含的所有通道,比如:《component name=〝fx_front〞unitsvalue=〝newton〞id=〝4765〞/》 component name表示通道名,unitsvalue表示该通道的数据单位,id表示该通道的载荷位置,用一个列表保存下这些信息,一个request包含六个通道,其中fx,fy,fz表示力,单位是newton;tx,ty,tz表示力矩,单位是newton-mm。
31.s05,将载荷切割,获取指定通道载荷数据,获得request载荷字典。request载荷字典以request名字为key,value是一个二维数组,数组的每一行表示一个通道数据,包括通道名、通道单位、通道id,并预留载荷列表load,时间列表time_list保存载荷的时间数据。建立一个request结果字典,以request名字为key,value是一个二维数组,数组的每一行表示一个通道数据,包括通道名、通道单位、通道id,并预留载荷列表load。建立时间列表time_list,用来保存载荷的时间数据。
32.获得所有request的通道信息后,继续执行遍历指令,直到读取到关键字“step”,关键字“step”之后为载荷数据区域,定位到《step type=〝initialconditions〞》,《step type=〝initialconditions〞》为整车模型的初始载荷,即载荷数据的开始,《step type=〝initialconditions〞》的下一行的数据为时间,时间单独占用一行,再下一行的数据没有固定分行,排列方式按照空格隔断,每个浮点数为一个通道的载荷,继续遍历至关键字《/step》出现代表时刻的载荷数据已经结束,载荷数据保留预设位的有效数字。通过遍历res文件所有component name后,就可以获得所有需要输出的request的通道信息。知道读取到关键字“step”为止,接下来是载荷数据区域,定位到《step type=〝initialconditions〞》,表示整车模型的初始载荷,也表示载荷数据的开始,方法中需要的request载荷也从这里开始提取。《step type=〝initialconditions〞》下面一行的数据表示时间,时间单独占用一行,存入time_list中,接下来的数据如下:2689.21043004436114643 0.75971272737303619
ꢀ‑
54.47408145480631703 1.03291646995728678e-04 0 0
……ꢀ
这些数据没有固定的分行,它们的排列方式是按照空格隔断,每个浮点数表示一个通道的载荷。一直读取数据知道关键字《/step》出现代表该时刻的载荷数据已经结束,载荷数据保留8位有效数字。
33.获取所有对应时刻的载荷数据,split函数按照空格进行切割,得到对应时刻的所有载荷数据,数据个数即通道总数,根据request字典中的每个通道id,分别提取出相应位置的载荷存入通道载荷数组中,即完成对应时刻的载荷提取,依次获取对应时刻的载荷数据,即得到完整的request载荷字典。获取所有该时刻的载荷数据,用split函数按照空格进行切割,得到该时刻的所有载荷数据,数据个数也就是通道总数。根据request字典中的每个通道id,分别提取出相应位置的载荷存入通道载荷数组中,即完成了该时刻的载荷提取,依次获取每个时刻的载荷数据,便可以得到完整的equest通道载荷字典。
34.在s02中,如果是,则按照下述步骤得到request载荷字典,步骤为:a01,获取request的id和通道信息。每个request信息都是以request/1开头后面的数字表示request的编号,用数据保存,定位到每个request/,获取results_name,即request的名字,cnames为通道名字,用“,”隔开,cunits为通道单位也是用“,”隔开,使用六个通道,分别表示fx、fy、fz、tx、ty、tz。若存在adm文件;先读取adm文件,每个request信息都是以request/1开头后面的数字表示request的编号,用数组保存下来,定位到每个request/,获取results_name表示request的名字。cnames表示通道名字用“,”隔开,cunits表示通道单位也是用“,”隔开。每个request自带八个通道,自建的request只使用了2、3、4、6、7、8这六个通道,分别表示fx、fy、fz、tx、ty、tz。读取完adm文件后便可建立request载荷字典和上面一样预留载荷数组。
35.a02,读取req文件。a03,获取所有request的id和载荷序号。依次读取每一行数据,识别到以预设值个空格开头的行,第一个数字表示request的编号,与adm中获取的编号一致,通过列表rid保存,依次读取到所有request的编号到rid中,知道识别到关键字“0.00000e+00”标志载荷数据的开始,0.00000e+00表示0时刻,时间数据独自占用一行,下一行数据表示一个request的预设值个通道载荷,request的顺序与rid的顺序一致。
36.a04,根据序号读取每个通道载荷,得到request载荷字典。然后读取req文件,依次读取每一行数据,识别到以8个空格开头的行,第一个数字表示request的编号,与adm中获取的编号一致。用一个列表rid保存,依次读取到所有request的编号到rid中,直到识别到关键字“0.00000e+00”标志载荷数据的开始,0.00000e+00表示0时刻,时间数据独自占用一行。后面的每一行数据表示一个request的六个通道载荷,request的顺序与rid的顺序一致。
37.判断对应request的编号是否是需要输出的request编号,找到载荷数据存入存入request载荷字典中,遍历完所有数据后,即可获取完整的request载荷字典。判断对应request的编号是否是需要输出的request编号,找到载荷数据存入request载荷字典中。遍历完所有数据后,即可获取完整的request载荷字典。
38.s06,基于request载荷字典判断初始段是否截断。如果否,则直接输出指定格式的载荷文件。s07,如果是,则获取截断时间t,进行载荷截断。s08,基于截断的载荷进行载荷填充。s09,判断是否滤波。如果否,则直接输出指定格式的载荷文件。s10,如果是,则获取滤波阶数和频率进行处理,得到处理后的载荷字典。s11,输出指定格式载荷文件。如图2所示,接着对载荷数据进行处理和输出相应格式。输入截断时间t,将t之前的载荷数据删除,用t时刻的载荷数据向前填充指定时间的数据。如图3所示,截断时间和填充时间均是2s的载荷对比曲线。虚线表示原始载荷,实线表示处理后的载荷。如图4所示,表示截断时间是0.2s,填
充时间是2s的载荷对比曲线,虚线表示原始载荷,实线表示处理后的载荷。处理后的载荷时间多1.8s,所以实线整体向后移动了1.8s。对于需要滤波的载荷,输入滤波参数自动滤波后再替换原来的载荷数据即可。最后根据需要输出指定格式的载荷文件。

技术特征:
1.一种adams载荷分解、处理方法,其特征在于,包括的步骤为:s01,提取载荷的request名称;s02,判断是否存在adm文件;s03,如果否,则读取res文件;s04,获取时间列表和request的通道信息;s05,将载荷切割,获取指定通道载荷数据,获得request载荷字典;s06,基于request载荷字典判断初始段是否截断;s07,如果是,则获取截断时间t,进行载荷截断;s08,基于截断的载荷进行载荷填充;s09,判断是否滤波;s10,如果是,则获取滤波阶数和频率进行处理,得到处理后的载荷字典;s11,输出指定格式载荷文件。2.根据权利要求1所述的方法,其特征在于,在所述s02中,如果是,则按照下述步骤得到request载荷字典,所述步骤为:a01,获取request的id和通道信息;a02,读取req文件;a03,获取所有request的id和载荷序号;a04,根据序号读取每个通道载荷,得到request载荷字典。3.根据权利要求1所述的方法,其特征在于,在所述s06中,如果否,则直接输出指定格式的载荷文件。4.根据权利要求1所述的方法,其特征在于,在所述s09中,如果否,则直接输出指定格式的载荷文件。5.根据权利要求1所述的方法,其特征在于,在所述s03中,python生成器以逐行方式读取res文件,识别一个组的开始关键字“entity name”及结束关键字“/entity”,entityname为request名字,其中,res文件的每一行信息还包括参数项enttype、objectid、comment,所述enttype为标识类型,objectid为对象编号,comment为对象文本描述。6.根据权利要求1所述的方法,其特征在于,在所述s04中,如果request为所需载荷request,获取对应通道信息,直到结束标志</entity>之间的信息皆为request包含的所有通道,其中,参数项包括component name、unitsvalue、id,componet name为通道名,unitsvalue为对应通道的数据单位,id为对应通道的载荷位置;每个通道包含留个通道,其中,fx、fy、fz标识力,单位为newton;tx、ty tz为力矩,单位是newton-mm。7.根据权利要求1所述的方法,其特征在于,在所述s05中,request载荷字典以request名字为key,value是一个二维数组,数组的每一行表示一个通道数据,包括通道名、通道单位、通道id,并预留载荷列表load,时间列表time_list保存载荷的时间数据。8.根据权利要求1所述的方法,其特征在于,在所述s05中,获得所有request的通道信息后,继续执行遍历指令,直到读取到关键字

step”,关键字“step”之后为载荷数据区域,定位到<step type=〝initialconditions〞>,<step type=〝initialconditions〞>为整车模型的初始载荷,即载荷数据的开始,<step type=〝initialconditions〞>的下一行的数据为时间,时间单独占用一行,再下一行的数据没有固定分行,排列方式按照空格隔断,每个浮点数为一个通道的载荷,继续遍历至关键字</step>出现代表时刻的载荷数据已经结束,载荷数据保留预设位的有效数字;获取所有对应时刻的载荷数据,split函数按照空格进行切割,得到对应时刻的所有载荷数据,数据个数即通道总数,根据request字典中的每个通道id,分别提取出相应位置的载荷存入通道载荷数组中,即完成对应时刻的载荷提取,依次获取对应时刻的载荷数据,即得到完整的request载荷字典。9.根据权利要求2所述的方法,其特征在于,在所述a01中,每个request信息都是以request/1开头后面的数字表示request的编号,用数据保存,定位到每个request/,获取results_name,即request的名字,cnames为通道名字,用“,”隔开,cunits为通道单位也是用“,”隔开,使用六个通道,分别表示fx、fy、fz、tx、ty、tz。10.根据权利要求2所述的方法,其特征在于,在所述a02和a03中,依次读取每一行数据,识别到以预设值个空格开头的行,第一个数字表示request的编号,与adm中获取的编号一致,通过列表rid保存,依次读取到所有request的编号到rid中,知道识别到关键字“0.00000e+00”标志载荷数据的开始,0.00000e+00表示0时刻,时间数据独自占用一行,下一行数据表示一个request的预设值个通道载荷,request的顺序与rid的顺序一致;在所述a04中,判断对应request的编号是否是需要输出的request编号,找到载荷数据存入存入request载荷字典中,遍历完所有数据后,即可获取完整的request载荷字典。11.一种adams载荷分解、处理系统,其特征在于,包括:提取模块,用于提取载荷的request名称;第一判断模块,用于判断是否存在adm文件;读取模块,如果是,用于读取res文件;获取模块,用于获取时间列表和request的通道信息;切割模块,用于将载荷切割,获取指定通道载荷数据,获得request载荷字典;第二判断模块,用于基于request载荷字典判断初始段是否截断;截断模块,如果是,则获取截断时间t,用于进行载荷截断;填充模块,用于基于截断的载荷进行载荷填充;第三判断模块,判断是否滤波;处理模块,如果是,用于获取滤波阶数和频率对填充后的载荷进行处理,得到处理后的载荷字典;输出模块,用于输出指定格式载荷文件。12.根据权利要求11所述的系统,其特征在于,在所述第一判断模块中,如果是,则按照下述步骤得到request载荷字典,所述步骤为;a01,获取request的id和通道信息;a02,读取req文件;
a03,获取所有request的id和载荷序号;a04,根据序号读取每个通道载荷,得到request载荷字典。13.一种计算机可读存储介质,其特征在于,所述可读存储介质中存储有程序,所述程序由硬件执行,以实现如权利要求1至10任一项所述的方法。14.一种电子设备,其特征在于,所述电子设备包括处理器和存储器,所述存储器中存储有程序,所述程序由所述处理器执行,以实现如权利要求1至10任一项所述的方法。

技术总结
本发明涉及一种Adams载荷分解、处理方法及系统、计算机可读存储介质、电子设备,该方法包括的步骤为:S01,提取载荷的request名称;S02,判断是否存在adm文件;S03,如果否,则读取res文件;S04,获取时间列表和request的通道信息;S05,将载荷切割,获取指定通道载荷数据,获得request载荷字典;S06,基于request载荷字典判断初始段是否截断;S07,如果是,则获取截断时间t,进行载荷截断;S08,基于截断的载荷进行载荷填充;S09,判断是否滤波。本发明应用于Adams车辆动力学仿真后,对载荷的分解和处理,可精准获得静态疲劳分析、动态疲劳分析以及连接件可靠性分析所需要的载荷文件,效率较人工方式得到提升,可加快整车的开发进度。可加快整车的开发进度。可加快整车的开发进度。


技术研发人员:黄道军 曾庆强 熊晨曦 黄永旺
受保护的技术使用者:重庆长安汽车股份有限公司
技术研发日:2022.07.06
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-6339.html

最新回复(0)