×

汽车电子中的自动编码及测试自动化技术

消耗积分:1 | 格式:rar | 大小:0.4 MB | 2017-11-24

分享资料个

汽车制造商们一直致力于将工业自动化不断推向新的高度。现在,他们在设计进程自动化领域更花功夫。随着软件复杂性的增强,他们将致力于在不牺牲稳定性的前提下,将研发重心向自动代码生成(ACG)和缩短量产时间转移。
  在现在这个时代,最复杂的汽车可能拥有超过100个微处理器、超过1亿的编码行数(LOC)。而且目前我们还没看到任何迹象表明:这种不断增长的软件发展势头未来会受到遏制。令人惊讶地是,甚至许多资金短缺的公司,也在试图用机器而不是人类来解决这项技术挑战。其实自动代码生成很久以前就应用于这个行业了,现在看来,它正处于迫切需要突破的临界点。自动代码生成工具,有利于使设计原形进入量产。它们创造了易于维护的编码,也有助于工程师创建复合系统,快速进入市场。
  “当人们将注意力转向较大型项目、更复杂的运算法则以及32位浮点芯片时,自动编码将成为主流,”MathWorks公司汽车行业部经理Wensi Jin说;“对于混合动力车相关项目而言,这种方式很适用,不需要和海量的修改代码打交道。”
  新兴技术领域对自动代码生成特别感兴趣—绝大多数的设计团队都采用编码发生器,进行免修改编程,比如为主动安全和电动转向系统设计编码。现在,汽车制造商们在高级人机界面上应用此技术的机会也越来越多。
  “随着越来越多的汽车采用图形显示和人机界面,汽车工业将采用更多工具手段,集中在图形用户界面设计、在实际设备上生成代码,”微软汽车组项目经理Walter Sullivan说。
  自动编码的好处
  软件技术日益成为促进汽车制造商差异化的关键—他们可以用软件添加特色和功能。对于动力传动系统而言,编程也很关键。适当的编程能够提高性能参数、燃料经济性,降低排放。自动代码生成的最大好处就是:机器编码比人类快得多。“显著降低开发时间,”天合汽车公司电动转向系统高级软件开发工程师Jon Chalmers说:“虽然开始时比较费时间,但是到项目收尾时,成效明显。“
  众多观察家认为:手动编程已经不再能够满足行业需求。多年前,汇编语言就开始给C语言让位了。C语言将编程提高到一个更抽象的高度,让开发者能够在同一时间生成更多软件,错误更小。“基于模型的开发将超越C语言迈出一大步,”dSpace公司北美产品经理DirkFleischer说。“更抽象就意味着更不复杂,”自动代码生成工具,在最大程度上消除了一些普通编程错误,比如上溢。
  采用模型和编码器,还有助于提高稳定性。因为软件能够在硬件功能完善前获得严格审核及修改。“在电子设备硬件完备之前,设计师可以将自动编码软件放在dSpace盒子中,进行硬件在环测试,”Chalmer说:“还可以尽早调整运算法则—这样当我们把盒子装到汽车上时,对其性能更有信心。”
  业内对此技术的信心越来越强,已经将其进一步扩展到提高编码效率的应用上了。曾经有负面观点称:编码器会使软件无法承受、力不从心,占用更大内存和处理功能,超出汽车制造商的预期。
  但是现在情况有所改变。“随着自动代码生成工具日益完善,将逐渐接近手动编码实现的效果,”Vector CANtech公司内嵌软件高级项目工程师Ralf Fritz说。
  许多程序员称:机器生成代码的效率仅比优秀的手动编码高几个百分点。对于许多在其新项目上用自动代码生成技术的公司而言,这个结果还算令人满意。
  自动代码生成不会产生额外工作。但是像许多新技术一样,开始时比传统项目需要花费的时间长,也需要一定的培训或较高的实践经验。
  “设定一项自动编码项目是比较复杂的,”天合汽车公司产品总工程师Richard Blachford说;“先确定一个项目,然后用工具以你想要的确定方式生成代码。在此过程中,还需要一两个对自动编码工具没有抵触情绪的软件专家。”
  挑战随之而来
  随着自动编码在新领域得到更大应用、在大多数系统设计里应用更广泛,免修改代码也出现了—毕竟,没人喜欢改来改去。将机器生成和手工编写结合,对于那些在这个要求高可靠性工业工作的人而言,是一大挑战。
  只要在这个领域工作,就需要提高效率、尽快修改不合适的编码。工具供应商承认:在此领域还有很多工作需要去做,“今天我们所面对的重要障碍,就是在免修改环境下的自动代码生成工具集成,”Etas公司产品市场经理VivekJaikamal说。
  还有一些挑战比较简单,只要求尽可能减少耗费时间。但是在复杂领域(比如动力传动和安全领域),数据价值变动频繁,程序员必须想法子找到解决之道。
  “必须搞清楚如何实现这样的功能,这相对较简单,”MathWorks公司内嵌应用经理Tom Erkkinen说:“如果拥有大量的、还未清楚传送出去的全球数据,很难洞悉未来走向。”
  在设计进程中,设计师们还必须面对一个挑战,即:需要程序员修改软件。通常,程序员能够找到容易修改的方式。但是绝大多数观察家认为:很少有人回应这种需求,通过手动编码修改软件。
  “如果要消费者自己修改,有时他们会觉得手动的速度更快,”Vector CANtech公司内嵌软件产品线经理Robert Miller说:“但是当你在整个生命周期内做修改,就需要重新生成代码。如果采用手动生成的话,这些变革通常不会实现。
  当编码随着供应链移动时,这点特别重要。如果卖方手动修改编码,当OEM商通过同一种编码器查阅编码时,会改变其中记录的信息,卖方对编码的改动可能丢失。
  如果用人工进行此类改动,原模型将不再呈现量产时的代码信息。那么在后续项目中,软件工程师就得不断更新手动修改过的软件,还要决定是否使用原始模块或修改过的原代码。
  “如果选择质量已经过检验的修改过的原代码,功能模块的价值将逐步消退,”Etas公司的市场副总裁Jeff Kessen说:“代码生成后的修改,可能不会传递到新项目上。”
  修改自动生成代码,会扰乱进程持续性,为重新使用带来障碍。现在,越来越多公司在整个开发周期均采用自动编码软件。“但是还有很多公司不信任自动编码,所以他们用它作原型模块,用手动编码量产,”美国国家仪器公司硬件在环(HIL)和动态测试产品经理Chris Washington说:“随着工具公司日益优化代码生成方式,这种情况将越来越少。”
  自动编码带动测试自动化
  绝大多数自动代码生成(ACG)的拥趸者,都致力于降低开发时间、增加软件的再利用率。但是对于许多人来说,自动代码生成的一大关键好处,就是可以使开发者更容易地测试,确保耐用性。在建模过程中,自动代码生成使工程师更容易持续验证其理念和完成情况。
  “所采用的实施方案越高级,就越能持续验证,”Chris Washington说:“这是获得最大好处的关键。”自动代码生成的好处,会在设计和测试过程中一直保持下去。设计团队希望节省时间,对创造成果再加工。能够采用已经考验证明成效的测试,对于手动设计团队非常重要。
  “用自动编码来证明效用,是非常容易的,”MathWorks的WensiJin说:“还能再次利用自己的测试案例,大大提高生产率。”
  自动代码生成能够满足的各种需求中,验证软件可靠性是非常重要的一项。消费者希望其寿命能够远超其他消费类产品。在这个汽车开始决定乘客生死的时代,性能可靠有效的软件,意义非常重要。“对于安全类系统,我们更关注验证进程,而机器生成的代码非常好用,”MathWork公司内嵌应用经理Tom Erkkinen说。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'汽车电子中的自动编码及测试自动化技术',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);