• 一旦被发达国家“卡脖子”,就有可能会产生国民经济的“窒息”

    本文来源:中制智库 如何扎实有效地增强产业链供应链自主可控能力,事关我国经济安全和高质量发展,应从多方面抓紧研究和探索。我国产业链具有较好的基础和条件,但在全球产业链重构和大国博弈的背景下也隐忧凸显,需要引起高度重视。 全面提升我国产业链现代化水平是一个综合性任务,需区分轻重缓急,重点是要增强产业链供应链自主可控能力。产业链供应链安全稳定是构建新发展格局的基础,应紧紧依托构建新发展格局增强产业链供应链自主可控能力。 “十四五”时期经济社会发展主要目标之一是“经济发展取得新成效”,其中包括“产业基础高级化、产业链现代化水平明显提高”。《中共中央关于制定国民经济和社会发展第十四个五年规划和二〇三五年远景目标的建议》对“提升产业链供应链现代化水平”进行了全面部署,要求“坚持自主可控、安全高效,分行业做好供应链战略设计和精准施策,推动全产业链优化升级”。 中央经济工作会议部署了我国2021年要抓好的重点任务,要求“增强产业链供应链自主可控能力”。可见,如何扎实有效地增强产业链供应链自主可控能力、提升产业链供应链现代化水平,已成为当前事关我国经济安全和高质量发展的重要课题,应从多个方面抓紧研究和探索。 全球产业链呈现分散化多中心化新趋势 全球产业链的布局对各国参与国际分工的难度和收益、国际经济增长的效率、各国的产业安全等都有重要影响。从经济发展史看,全球产业链布局大致有集中化和分散化两种。 过去的全球产业链是往高度集中的方向发展的,背后主要是基于效率优先的逻辑。20世纪90年代以来,受益于不断减少的贸易成本、不断加快的运输效率和总体安全的国际秩序,许多产品的生产不再像以前那样主要在一国或一个经济区内部完成,而是将生产的各个环节在全球进行布局。 这种高度分工、全球密切联系的模式推动了全球经济增长,我国也受益于这种分工逻辑,依靠拥有大量高素质劳动力、较低的综合成本等优势,迅速成为制造业的重要中心。但这种模式也存在一些潜在风险,比如一旦某一国的生产中断,可能会造成全球工业停摆。 新冠肺炎疫情的暴发,使不少国家都经历了生产中断、供应链停摆的问题,开始警惕“把鸡蛋放在同一个篮子”的供应链风险,对产业链配置正从以前主要考虑生产效率转向兼顾效率和产业安全的逻辑上来。对多数商品供给来源进行“备份”,以有效降低断供风险,将是不少国家的优先选择,全球产业链布局呈现分散化多中心化的新趋势。 我国产业链既有良好基础也有安全隐忧 总的来看,我国很多产业具有基础较好、配套程度较高等优势。2020年,在其他很多国家因新冠肺炎疫情影响面临生产能力大幅度下降、全球产业链供应链遭受重创的情况下,我国能够很快恢复生产能力,并为很多国家提供防疫用品和日常用品,为稳定全球经济作出了贡献。 我国生产快速恢复的背后,是国内产业发展具有坚实的基础条件。改革开放以来,我国很多产业都实现了突飞猛进的发展。经过多年的积累,我国已成为全球产业链供应链的重要节点,涌现出了一批具有全球影响力的制造基地和产业集群,成为全球重要的生产制造中心。 但也要看到,在全球产业链重构和大国博弈的背景下,我国产业链不稳、不强、不安全的隐忧也显现出来。 全球产业链分散化多中心化的趋势加大了我国产业链“不稳”的挑战。这一趋势有可能会提升其他国家的生产能力,减少我国的出口需求,并显著加大我国产业对外转移的压力。 同时,面对个别发达国家的打压,我国产业链“不强”的问题也凸显出来。近年来,我国出口产品在国际市场上的份额稳定提高,说明我国产品的综合国际竞争力仍然较强。 但深入分析可以发现,我国产品的竞争优势主要源自于规模经济和效率优势,而真正拥有核心技术、其他国家不能生产的产品却相对较少,也尚缺乏特别具有品牌优势的产品。因此在新的形势下,我国亟需提升产业链现代化水平,以保障国家经济安全。 而且,近年来产业竞争成为大国博弈的重点领域,我国产业链供应链面临着“不安全”的新问题。随着我国产业开始向中高端升级,一些发达国家认为我国产业与他们的产业关系正从“互补型”向“竞争型”转变,开始对我国高技术产业发展进行围追堵截,采取了包括限制供应、技术脱钩等一系列手段,使我国不少产业的供应链安全面临新挑战。 重点是增强产业链供应链自主可控能力 全面提升我国产业链现代化水平,解决不稳、不强、不安全的问题是一个综合性任务,需要区分轻重缓急、突出重点。其中,增强自主可控能力无疑是“十四五”时期较为紧迫的任务。 产业链供应链自主可控指的是,在面临外部(主要是国外)产品、零部件、技术等供应受限时(疫情、地震或贸易摩擦等多种原因都可能导致出现这种情况),还能够依靠国内稳定运行的产业链供应链提供相应产品和服务,从而能够满足国民经济运转的基本需要。 而若重要产品的产业链供应链不能自主可控,一旦被发达国家“卡脖子”,就有可能会产生国民经济的“窒息”,那么整个经济社会的发展就会处于不安全的境地。 增强产业链供应链自主可控能力,不能眉毛胡子一把抓,需要重点关注对国民经济稳定运行有重要影响的关键产业。国民经济产业门类众多,对国民经济安全性的影响有很大差别,各产业链供应链受限的短期和长期影响也不一样。我们最应关注的是一旦受限就会影响国民经济安全运行的核心和关键产业,不需要也不能够将产业范围泛化。 另外,产业链供应链的自主可控重在强调“能力”,重在外部供应受限时还能依靠国内的力量保障经济的基本运行,因此自主可控并不等于全部国产化。以集成电路为例,如果实现技术突破达到自主可控以后,很大的可能是我国还会进口一部分,也出口一部分,也就是说,自主可控与更高水平的对外开放并不矛盾。 依托构建新发展格局增强自主可控能力 我国在绝大多数产业的中低端环节都具有很强的生产能力,目前的短板主要体现在高端环节上。产业链高端产品的发展规律与中低端产品有很大不同。 一般来说,中低端产品技术成熟,主要竞争点在成本和价格上,而高端产品往往对价格不敏感,核心竞争力主要体现在技术上。 因此,增强产业链供应链自主可控能力,特别是发展高端产品,必须探索新路子。构建以国内大循环为主体、国内国际双循环相互促进的新发展格局,恰恰有与之相契合之处,应紧紧依托构建新发展格局增强产业链供应链自主可控能力。 一方面,以国内大循环为主体,可以为增强产业链供应链自主可控能力提供重要的市场需求空间。 许多高端技术和产品,在刚研发出来的时候都需要有实际应用的机会,才能不断迭代提升。坚持扩大内需这个战略基点,使生产、分配、流通、消费更多依托国内市场,意味着关键需求要能够以国内供应来满足,无疑可以为高端技术和关键产品提供市场需求空间。 产业链中的大企业也应增强备份意识,释放一部分需求,采购使用国内生产的零部件、原材料,给国内产品应用和提升的机会。 另一方面,全面提高对外开放水平,实现国内国际双循环相互促进,使国内市场和国际市场更好联通,更好利用国内国际两个市场、两种资源,同样有利于增强产业链供应链自主可控能力。关键产品、高端技术往往市场空间有限,虽然我国是制造业大国,但也不可能实现全部产品都自主生产。 这既不必要,也不经济。在扩大对外开放中,引导关键产品的国际供应进一步分散化,多来源化,同样有利于提高我国产业链的自主可控能力。 还要看到,产业链供应链安全稳定是构建新发展格局的基础,在构建新发展格局中要把提升产业链供应链自主可控能力作为重要的目标之一。 否则,一旦遇上重大突发事件导致国内产业链中断,无论是国内大循环还是国际大循环都可能会受到严重冲击。只有切实提高产业链供应链自主可控能力,确保安全稳定,才能更好构建新发展格局。 作者系国务院发展研究中心产业经济研究部副部长、研究员 文章来源:《经济日报》2021年2月18日,原题为《坚持自主可控 确保安全稳定》

    物联传媒 零部件 智能制造

  • 索斯科M5 磁性门吸引领工业新时尚

    索斯科M5 磁性门吸引领工业新时尚

    中国香港 - Media OutReach - 2021年3月11日 - 全球领先的工程硬件解决方案供应商索斯科再推新品,全新版本的磁性门吸是强度与时尚的完美结合。新产品M5 磁性门吸由耐腐蚀不锈钢材料制成,表面经过高度抛光处理,其稀土磁铁拥有强大的吸持力,可轻易地将各种门板和面板保持在打开或关闭状态。 M5 磁性门吸 作为门支撑杆的可靠替代品,索斯科 M5 磁性门吸通过配置提供 50-118 N的标称吸持力,能够承受较大的错位公差,适应多种门板尺寸和重量规格,以及强振动环境。高光泽不锈钢外观充满时尚感,不但展现出高强吸力且性能优秀,适用于各种应用领域的柜和门板使用。 M5 磁性门吸以简便的按压和拉动开启操作,提供多种旋转门吸高度选项,可配合水平安装或垂直安装,或埋入式或表面安装,以适应不同门板、面板和窗口尺寸。旋转门吸可通过简单调节任何角度进行固定,其橡胶减震器可减少关闭和振动产生的噪音,并防止与门配件产生刮擦。 全球产品经理 Cindy Bart 表示:"作为消闲车、轨道交通、巴士和船舶设备等应用的补充方案,索斯科 M5 磁性门吸能够提供使门板固定到位所需的强度,并可通过一系列配置来实现灵活的安装和校准。M5 采用高度抛光的不锈钢结构,其出色的耐腐蚀性足以应对各种严苛的环境。"

    索斯科 索斯科 磁性门吸 M5

  • 在线研讨会 | 为电气机柜装配加速——魏德米勒工作场所解决方案

    在线研讨会 | 为电气机柜装配加速——魏德米勒工作场所解决方案

    德国斯图加特大学机床和制造控制工程研究所进行的“装配机柜4.0”研究结果显示,传统装配机柜过程中最耗时的阶段为规划和安装阶段。其中,项目规划和电路图构建占据了规划阶段的50%以上,而机械装配和线束加工占据了安装阶段的70%以上的时间。 那么,如何高效安装制造电气柜呢?魏德米勒推出了工作场所解决方案,可在装配机柜的所有阶段,从规划到安装再到运行阶段为您的车间提供支持,优化机柜装配流程,加速装配速度,提升产品质量。 2021年3月11日,魏德米勒技术专家将为大家深入讲解工作场所解决方案是如何为为电气机柜装配加速的,同时更有参会精美礼品等您赢取,赶紧扫码海报二维码提前注册报名吧!

    魏德米勒 魏德米勒 在线研讨会 电气机柜

  • 喜贺!首个全国产NB-IoT通信模组百万级大单,助力表计行业加速数字化转型升级

    本文来源:中国移动OneMO模组 “国产化方案”是物联网行业的新锐热点话题,自主可控国产化是大势所趋。在复杂的国际环境下,能自主研发、生产、销售的国产化方案,能够为客户带来更优秀的性价比和更稳定的供应保障。 中国移动OneMO作为国内出货量排名前列的专业通信模组厂商,始终秉承“向客户稳定供应高可靠性、高性价比的通信模组”的品牌信念,近年来一直围绕“国产化方案”进行探索,邀请并联合多个行业伙伴参与“国产化方案“的研发和应用落地。 本次,中国移动OneMO与中国领先的物联网企业——金卡智能就全国产化NB-IoT通信模组MN316达成百万级合作,这也是国内首个百万级“国产化方案”的应用落地! 本次项目的成功落地,标志表计行业“国产化”迈上了一个新台阶,同时也掀起了表计行业向“国产化”发展的新的风向标。 MN316——全国产化NB-IoT通信模组 MN316是中国移动OneMO联合芯翼信息以及多个元器件供应商共同打造的全国产化NB-IoT通信模组,其使用了芯翼信息XY1100通信芯片,其相比其他NB-IoT模组最主要的优势是极低的功耗、更高的灵敏度和超高的性价比。 全网通:支持Band3/Band5/Band8频段,支持接入移动、电信、联通三家运营商NB-IoT网络 小尺寸:尺寸仅为16mm×18mm×2.2mm,能最大限度满足终端设备对小尺寸模块产品的需求 超低功耗:PSM状态下功耗1uA以内,相比其他NB-IoT模组PSM功耗降低70% 支持内置eSIM卡:MN316支持内置2*2mm贴片M2M芯片,将SIM卡焊接在模组内部,可降低产品尺寸、免去SIM卡外围电路,进一步降低用户产品尺寸和成本的同时,可有效增加SIM卡安全性 主流云平台全支持:内嵌OneNET、CTWing等主流物联网平台协议,真正实现无缝对接,快速开发 LCC封装:采用更易于焊接的LCC封装,可通过标准SMT设备实现模块的快速生产 LiteOS系统:内置LiteOS轻量级开源物联网操作系统,物联网终端开发更简单、互联更容易、业务更智能、体验更顺畅、数据更安全 严格的产品验证测试流程和7省市外场测试 金卡智能作为中国领先的物联网企业,对产品质量的要求异常严格,对产品中所使用的通信模组同样有非常高的审核标准,包括弱网络信号下功耗监测、高低温PSM功耗测试、高低温压力测试、功能稳定性测试、模组RF发射功率、接收灵敏度、模组射频一致性等一系列产品验证测试流程。 同时,中国移动OneMO针对金卡表计行业业务,使用MN316通信模组完成了7省市外场测试,包括MN316对不同网络场景的适配情况,以及定点ping包、TCP、UDP、CTWing、OneNET连接收发数据情况,以确保MN316能够满足实际业务需求。 深耕智能抄表,助力行业加速数化转型升级! 中国移动OneMO深耕智能表计行业多年,打造了多款智能表计领域应用广泛的NB-IoT通信模组产品,在天津、河北、山东等十余个省市打造了数十个标杆应用案例。未来,中国移动OneMO愿携手更多行业合作伙伴,共同探索“国产化”的将来,打造更优质、更高性价比的“国产化方案”,助力行业加速数字化转型升级! ~END~

    物联传媒 NB-IoT 通信模组

  • 全国首例高空抛物罪判了!AI引领百亿安防大戏上演,能警醒世人否?

    本文来源:物联网智库 关于高空抛物引发的大量公共安全事件在近几年频频发生,已经成为全社会关注的重点。据OpenLaw网站筛选的结果显示,高空抛物相关诉讼案件从2009年开始几乎呈现每年递增的趋势,笔者在查阅后发现,2020年处理相关案件数量更是达到了454起。 突出的社会问题,自然引发了相关法律制定、监管、执行部门的担忧,政府开始马不停蹄地出台、修改相应的法律法规,以适应新的犯罪。本月初起,最新刑法修正案生效,备受关注的 “高空抛物罪”等新罪名也正式开始施行。这意味着国家从法律上对“高空抛物”等不良行为的约束力正愈加完善。 不过,回到现实中高空抛物仍存在取证困难、锁定对象困难等一系列痛点,因而还需要一些辅助手段帮助高空抛物取证,进而助力法律践行。 近日,上海松江区中山街道莱顿小城试点部署了“AI云卫士”机器人高空抛物抓拍报警系统,引发了网络上大量讨论。视频显示,有居民从10楼阳台抛下一根小小的烟头,也能立马被机器人抓到现行。物业通过视频溯源,能快速地锁定抛物楼层及对象,进行责任落实和教育引导。 1、法律规劝,技术补充 万丈高楼平地起,安防是个大问题。针对屡次发生在全国各地的“高空抛物”危险事件,早在2019年最高人民法院就已经印发了《关于依法妥善审理高空抛物、坠物案件的意见》加以应对,明确指出:对于故意高空抛物者,根据具体情形按照以危险方法危害公共安全罪、故意伤害罪或故意杀人罪论处,同时明确物业服务企业责任。《民法典》中也明文规定“禁止从建筑物中抛掷物品”,将高空抛物列为法律明文禁止的行为。 2020年12月,刑法修正案(十一)在十三届全国人大常委会第二十四次会议上被表决通过,定于2021年3月1日起施行。2021年2月,《最高人民法院最高人民检察院关于执行,确定罪名的补充规定(七)》规定高空抛物罪罪名。从法律角度来讲,一套完整的针对“高空抛物”等不良行为造成的严重危害结果的法律追溯体系和依据已经越来越完善。 不过,法律法规毕竟只能作为约束“高空抛物”等不良行为的手段,并不能在实际的案件处理中对这一类行为的调查取证起到帮助性作用。比如,2016年在四川遂宁发生了一起“天降铁球砸死女婴案”,当时婴儿车中被砸致死的女婴还尚不满一周岁,大千世界还未曾一瞥。事后孩子父母也尝试寻找扔铁球的人到底是谁,但由于缺乏相应的证据,时隔四年有余也未找到。最后孩子父母将整栋楼的业主告上法庭,判决结果为:除家中确实无人居住的房屋外,所有业主均被判补偿受害者3000元。 从立法角度而言,如此判罚正当适用“公平原则”,即难以确定侵权人时,由“可能加害的建筑物使用人”进行补偿。重点考量在法律对受害者的同情,以及对公共安全的保障。但是,从另一方面来讲,这一判罚也牵连到了建筑物中其他的无辜者。法律法规是出于目的性的规劝和引导大家在主观上消除这一不良行为发生的念头,然而实际情况中往往还需要其他手段来加以辅助。 2、新基建,显生机 视频监控系统经过近二十年的发展,在安防产业中发挥了不可替代的作用。按产品分类来看,视频监控产品在安防产业拥有绝对的占有率,大约可占48%的份额,而出入口控制(包括楼宇对讲)产品、防盗报警(包括车辆防盗防劫)产品、实体防护产品、防爆安检设备以及其他产品总共才52%,足见视频监控地位极其重要。不过,视频监控系统虽然被安防行业所倚重,但从目前高空抛物面临的几大困境来看,功能也尚待进一步的完善。 首先,据统计,99.9%的高空抛物行为在没有造成实际伤害的情况下,是不会被主动发现的;其次,高空抛物发生的过程往往在短时间内即可完成,事发时没有主动报警,事后处理无疑又将面临问题根源无从寻起的局面;再者,高空抛物取证将极大的考验物业管理水平,即便是视频取证可能也需要在数量众多、时长几十小时的录像中进行定位,将大大加重物业的人力、物力成本压力。 因而,未来智能视频监控需要针对高空抛物满足实时检测警告、责任溯源以及取证储证全链条的需求。物联网、人工智能、云计算等新兴技术的兴起和新基建的加速部署,依靠高清的视频处理能力、通信传输能力、深度识别能力等,视频监控系统在安防中将有望爆发更强劲的生命力和活动。 从功能上来看,智能视频监控系统运用深度的人工智能算法和强大的算力,有望解决无法智能监控高空抛物的行为和及时响应、报警等问题;高像素、高帧率的画像拍摄有望解决摄像机误拍率高的问题,并能对抛物物体进行准确定位,精准检测高速下落的物体;强大的传输以及5G的运用,将有效解决数据的传输问题,提升证据的采集和存储能力。 3、方案频出,市场爆发 近日引发关注的上海松江区试点运行的“AI云卫士”,就是面向物联网时代的典型的智能视频监控系统。据悉,“AI云卫士”由上海天覆信息科技有限公司根据社区管理需求定制开发,是一款可不断自我深度学习的软件机器人。基于图像、视频智能分析计算,可自动识别高空抛物现象,并清晰记录物体坠落轨迹,在第一时间通过云平台将报警图片发送到物业工作人员的微信上。 天覆科技“AI云卫士”架构 它的价值在于,在已建设的大量监控设备的基础上,无需再另外大刀阔斧的重新投入建设,只需通过“AI云卫士”,便可以使每一路监控都能成为一双自主发现问题的眼睛,让每一路监控,都能发挥其独特的价值,物尽其用。 当然,“AI云卫士”并不是第一款针对高空抛物的智能视频监控系统,去年5月,重庆九龙坡区公安分局就用上了被称为国内首个高空抛物智能预警系统的“瞭望者号”。 “瞭望者号”由深圳研超科技有限公司研发,该系统利用底层区域安装的“上仰式”摄像头,拍摄楼宇正面全貌。在拍摄到抛物行为开始的7到10秒后,系统将运用算法锁定行为人的位置,直接将抓取的抛物行为及定位信息推送给九龙坡分局的系统后台。涉事区域的民警会走访行为人,对其依法作出教育、训诫等处理。 日前,华为也在其官方微博上发布了“华为好望”高空抛物解决方案。华为SDC D系列相机搭载的是深圳天感智能有限公司旗下的万里眼高空抛物智能追溯系统。 天感智能万里眼高空抛物智能追溯系统 这套方案通过万里眼超脑连接到小区监控设备,即可对高空抛物行为进行实时智能监测,当系统检测到高空抛物的行为时,会生成告警信息并通过电脑端或移动端设备通知相关人员第一时间前往现场处理。该系统监测物体的精度非常高,能检测到4*4像素级别的下坠物体(配置华为SDC D系列相机可以有效检测6*6像素级别及以上的坠落物体),同时,系统还能将抛物物体准确的标注显示出来,方便事后追溯。 4、小结 3月1日,《刑法修正案(十一)》正式实行首日,江苏溧阳法院就审理了一起高空抛物案,被告人徐某某从高处抛下两把菜刀,法院以高空抛物罪,判决被告人有期徒刑六个月。这也成为全国首例高空抛物罪案例。 事实上,法律法规并不是为了惩罚而做惩罚,它只是一种约束力的手段。同样,高空抛物监控系统也是一种手段,它们最后的目的都是希望减少悲剧的发生,珍爱生命,珍爱他人生命!希望法律和科技的双管齐下,可以让高空抛物相关的诉讼变得少之又少。 参考资料: 1.《17年至少造成全国85人伤亡 高空抛物倒逼智能摄像头上线 》,南方都市报 2.《莱顿小城社区治理用上了“AI云卫士”机器人“智慧眼”让高空抛物无所遁形》,上海松江区政府 3.《鸡蛋从25楼抛下便可致死,华为/海康/宇视…如何解决悬在城市上空的痛?》,物联网智库 ~END~

    物联传媒 机器人 安防 AI

  • 干货 | 嵌入式软件定时/超时机制程序设计

    嵌入式大杂烩 嵌入式 超时机制

  • 实用 | GitHub上一位老外的嵌入式C编码规范(收藏细读)

    英文原文:https://github.com/MaJerle/c-code-style#structures-enumerations-typedefs 译文来源:嵌入式大杂烩 最重要的一条规则 编写代码时最重要的一条规则是:检查周围的代码并尝试模仿它。 作为维护人员,如果收到的补丁明显与周围代码的编码风格不同,这是令人沮丧的。这是不尊重人的,就像某人穿着泥泞的鞋子走进一间一尘不染的房子。 因此,无论本文推荐的是什么,如果已经编写了代码并且您正在对其进行修补,请保持其当前的样式一致,即使它不是您最喜欢的样式。 一般规则 这里列出了最明显和最重要的一般规则。在你继续阅读其他章节之前,请仔细检查它们。 使用C99标准 不使用制表符,而是使用空格 每个缩进级别使用4个空格 在关键字和左括号之间使用一个空格 在函数名和左括号之间不要使用空格 int32_t a = sum(4, 3); /* OK */ int32_t a = sum (4, 3); /* Wrong */ 不要在变量/函数/宏/类型中使用__或_前缀。这是为C语言本身保留的 对于严格的模块私有函数,使用prv_ name前缀 对于包含下划线_ char的变量/函数/宏/类型,只能使用小写字母 左花括号总是与关键字(for, while, do, switch, if,…)在同一行 size_t i; for (i = 0; i < 5; ++i) { /* OK */ } for (i = 0; i < 5; ++i){ /* Wrong */ } for (i = 0; i < 5; ++i) /* Wrong */ { } 在比较操作符和赋值操作符之前和之后使用单个空格 int32_t a; a = 3 + 4; /* OK */ for (a = 0; a < 5; ++a) /* OK */ a=3+4; /* Wrong */ a = 3+4; /* Wrong */ for (a=0;a<5;++a) /* Wrong */ 每个逗号后用单空格 func_name(5, 4); /* OK */ func_name(4,3); /* Wrong */ 不要初始化静态和全局变量为0(或NULL),让编译器为您做 static int32_t a; /* OK */ static int32_t b = 4; /* OK */ static int32_t a = 0; /* Wrong */ void my_func(void) { static int32_t* ptr;/* OK */ static char abc = 0;/* Wrong */ } 在同一行中声明所有相同类型的局部变量 void my_func(void) { char a; /* OK */ char b; /* Wrong, variable with char type already exists */ char a, b; /* OK */ } 按顺序声明局部变量 i.自定义结构和枚举 ii.整数类型,更宽的无符号类型优先 iii.单/双浮点 int my_func(void) { /* 1 */ my_struct_t my; /* First custom structures */ my_struct_ptr_t* p; /* Pointers too */ /* 2 */ uint32_t a; int32_t b; uint16_t c; int16_t g; char h; /* ... */ /* 3 */ double d; float f; } 总是在块的开头声明局部变量,在第一个可执行语句之前 在for循环中声明计数器变量 /* OK */ for (size_t i = 0; i < 10; ++i) /* OK, if you need counter variable later */ size_t i; for (i = 0; i < 10; ++i) { if (...) { break;     } } if (i == 10) { } /* Wrong */ size_t i; for (i = 0; i < 10; ++i) ... 避免在声明中使用函数调用来赋值变量,除了单个变量 void a(void) { /* Avoid function calls when declaring variable */ int32_t a, b = sum(1, 2); /* Use this */ int32_t a, b;     b = sum(1, 2); /* This is ok */ uint8_t a = 3, b = 4; } 除了char、float或double之外,始终使用stdint.h标准库中声明的类型。例如,8位的uint8_t等 不要使用stdbool.h库。分别使用1或0表示真或假 /* OK */ uint8_t status; status = 0; /* Wrong */ #include bool status = true; 永远不要与真实相比较。例如,使用if(check_func()){…}替换if (check_func() == 1) 总是将指针与空值进行比较 void* ptr; /* ... */ /* OK, compare against NULL */ if (ptr == NULL || ptr != NULL) { } /* Wrong */ if (ptr || !ptr) { } 总是使用前增量(和递减),而不是后增量(和递减) int32_t a = 0; ... a++; /* Wrong */ ++a; /* OK */ for (size_t j = 0; j < 10; ++j) {} /* OK */ 总是使用size_t作为长度或大小变量 如果函数不应该修改指针所指向的内存,则总是使用const作为指针 如果不应该修改函数的形参或变量,则总是使用const /* When d could be modified, data pointed to by d could not be modified */ void my_func(const void* d) { } /* When d and data pointed to by d both could not be modified */ void my_func(const void* const d) { } /* Not required, it is advised */ void my_func(const size_t len) { } /* When d should not be modified inside function, only data pointed to by d could be modified */ void my_func(void* const d) { } 当函数可以接受任何类型的指针时,总是使用void *,不要使用uint8_t *。函数在实现时必须注意正确的类型转换 /*  * To send data, function should not modify memory pointed to by `data` variable  * thus `const` keyword is important  *  * To send generic data (or to write them to file)  * any type may be passed for data,  * thus use `void *`  */ /* OK example */ void send_data(const void* data, size_t len) { /* OK */ /* Do not cast `void *` or `const void *` */ const uint8_t* d = data;/* Function handles proper type for internal usage */ } void send_data(const void* data, int len) { /* Wrong, not not use int */ } 总是使用括号和sizeof操作符 不要使用变长数组。使用动态内存分配代替标准C malloc和自由函数,或者如果库/项目提供了自定义内存分配,使用它的实现 看看LwMEM,一个自定义内存管理库。 /* OK */ #include void my_func(size_t size) { int32_t* arr;     arr = malloc(sizeof(*arr) * n); /* OK, Allocate memory */ arr = malloc(sizeof *arr * n); /* Wrong, brackets for sizeof operator are missing */ if (arr == NULL) { /* FAIL, no memory */ } free(arr); /* Free memory after usage */ } /* Wrong */ void my_func(size_t size) { int32_t arr[size]; /* Wrong, do not use VLA */ } 总是将variable与0进行比较,除非它被视为布尔类型 永远不要将布尔处理的变量与0或1进行比较。用NOT(!)代替 size_t length = 5; /* Counter variable */ uint8_t is_ok = 0; /* Boolean-treated variable */ if (length) /* Wrong, length is not treated as boolean */ if (length > 0) /* OK, length is treated as counter variable containing multi values, not only 0 or 1 */ if (length == 0) /* OK, length is treated as counter variable containing multi values, not only 0 or 1 */ if (is_ok) /* OK, variable is treated as boolean */ if (!is_ok) /* OK, -||- */ if (is_ok == 1) /* Wrong, never compare boolean variable against 1! */ if (is_ok == 0) /* Wrong, use ! for negative check */ 对于注释,总是使用/* comment */,即使是单行注释 在头文件中总是包含带有extern关键字的c++检查 每个函数都必须包含doxygen-enabled注释,即使函数是静态的 使用英文名称/文本的函数,变量,注释 变量使用小写字母 如果变量包含多个名称,请使用下划线。force_redraw。不要使用forceRedraw 对于C标准库的包含文件,请始终使用<和>。例如,# include < stdlib.h > 对于自定义库,请始终使用""。例如,# include“my_library.h” 当转换为指针类型时,总是将星号与类型对齐,例如。uint8_t* t = (uint8_t*)var_width_diff_type 始终尊重项目或库中已经使用的代码风格 注释 不允许以//开头的注释。总是使用/* comment */,即使是单行注释 //This is comment (wrong) /* This is comment (ok) */ 对于多行注释,每行使用空格+星号 /*  * This is multi-line comments,  * written in 2 lines (ok)  */ /**  * Wrong, use double-asterisk only for doxygen documentation  */ /* * Single line comment without space before asterisk (wrong) */ /*  * Single line comment in multi-line configuration (wrong)  */ /* Single line comment (ok) */ 注释时使用12个缩进(12 * 4个空格)偏移量。如果语句大于12个缩进,将注释4-空格对齐(下面的例子)到下一个可用缩进 void my_func(void) { char a, b;     a = call_func_returning_char_a(a); /* This is comment with 12*4 spaces indent from beginning of line */ b = call_func_returning_char_a_but_func_name_is_very_long(a); /* This is comment, aligned to 4-spaces indent */ } 函数 每个可以从模块外部访问的函数都必须包含函数原型(或声明) 函数名必须小写,可以用下划线_分隔 /* OK */ void my_func(void); void myfunc(void); /* Wrong */ void MYFunc(void); void myFunc(); 当函数返回指针时,将星号对齐到返回类型 /* OK */ const char* my_func(void); my_struct_t* my_func(int32_t a, int32_t b); /* Wrong */ const char *my_func(void); my_struct_t * my_func(void); 对齐所有的功能原型(使用相同/相似的功能)以提高可读性 /* OK, function names aligned */ void set(int32_t a); my_type_t get(void); my_ptr_t* get_ptr(void); /* Wrong */ void set(int32_t a); const char * get(void); 函数实现必须在单独的行中包含返回类型和可选的其他关键字 /* OK */ int32_t foo(void) { return 0; } /* OK */ static const char* get_string(void) { return "Hello world!\r\n"; } /* Wrong */ int32_t foo(void) { return 0; } 变量 使变量名全部小写,下划线_字符可选 /* OK */ int32_t a; int32_t my_var; int32_t myvar; /* Wrong */ int32_t A; int32_t myVar; int32_t MYVar; 按类型将局部变量分组在一起 void foo(void) { int32_t a, b; /* OK */ char a; char b; /* Wrong, char type already exists */ } 不要在第一个可执行语句之后声明变量 void foo(void) { int32_t a;     a = bar(); int32_t b; /* Wrong, there is already executable statement */ } 你可以在下一个缩进级别中声明新的变量 int32_t a, b; a = foo(); if (a) { int32_t c, d; /* OK, c and d are in if-statement scope */ c = foo(); int32_t e; /* Wrong, there was already executable statement inside block */ } 用星号声明指针变量与类型对齐 /* OK */ char* a; /* Wrong */ char *a; char * a; 当声明多个指针变量时,可以使用星号对变量名进行声明 /* OK */ char *p, *n; 结构、枚举类型定义 结构名或枚举名必须小写,单词之间有下划线_字符 结构或枚举可以包含typedef关键字 所有结构成员都必须小写 所有枚举成员必须是大写的 结构/枚举必须遵循doxygen文档语法 在声明结构体时,它可以使用以下三种不同的选项之一: 1、当结构体仅用名称声明时,它的名称后不能包含_t后缀。 struct struct_name { char* a; char b; }; 2、当只使用typedef声明结构时,它的名称后面必须包含_t后缀。 typedef struct { char* a; char b; } struct_name_t; 3、当结构用name和typedef声明时,它不能包含_t作为基本名称,它必须在它的名称后面包含_t后缀作为typedef部分。 typedef struct struct_name { char* a; char b; char c; } struct_name_t; 错误声明的例子及其建议的纠正: /* a and b must be separated to 2 lines */ /* Name of structure with typedef must include _t suffix */ typedef struct { int32_t a, b; } a; /* Corrected version */ typedef struct { int32_t a; int32_t b; } a_t; /* Wrong name, it must not include _t suffix */ struct name_t { int32_t a; int32_t b; }; /* Wrong parameters, must be all uppercase */ typedef enum {     MY_ENUM_TESTA,     my_enum_testb, } my_enum_t; 在声明时初始化结构时,使用C99初始化风格 /* OK */ a_t a = {     .a = 4,     .b = 5, }; /* Wrong */ a_t a = {1, 2}; 当为函数句柄引入new typedef时,使用_fn后缀 /* Function accepts 2 parameters and returns uint8_t */ /* Name of typedef has `_fn` suffix */ typedef uint8_t (*my_func_typedef_fn)(uint8_t p1, const char* p2); 复合语句 每个复合语句必须包括左花括号和右花括号,即使它只包含1个嵌套语句 每个复合语句必须包含单个缩进;嵌套语句时,每个嵌套包含1个缩进大小 /* OK */ if (c) {     do_a(); } else {     do_b(); } /* Wrong */ if (c)     do_a(); else do_b(); /* Wrong */ if (c) do_a(); else do_b(); 在if或if-else-if语句的情况下,else必须与第一条语句的右括号在同一行 /* OK */ if (a) { } else if (b) { } else { } /* Wrong */ if (a) { } else { } /* Wrong */ if (a) { } else { } 在do-while语句的情况下,while部分必须与do部分的右括号在同一行 /* OK */ do { int32_t a;     a = do_a();     do_b(a); } while (check()); /* Wrong */ do { /* ... */ } while (check()); /* Wrong */ do { /* ... */ } while (check()); 每一个开括号都需要缩进 if (a) {     do_a(); } else {     do_b(); if (c) {         do_c();     } } 不要做没有花括号的复合语句,即使是单个语句。下面的例子展示了一些不好的做法 if (a) do_b(); else do_c(); if (a) do_a(); else do_b(); 空while循环、do-while循环或for循环必须包含花括号 /* OK */ while (is_register_bit_set()) {} /* Wrong */ while (is_register_bit_set()); while (is_register_bit_set()) { } while (is_register_bit_set()) { } 如果while(或for、do-while等)为空(嵌入式编程中也可能是这种情况),请使用空的单行括号 /* Wait for bit to be set in embedded hardware unit uint32_t* addr = HW_PERIPH_REGISTER_ADDR; /* Wait bit 13 to be ready */ while (*addr & (1 << 13)) {} /* OK, empty loop contains no spaces inside curly brackets */ while (*addr & (1 << 13)) { } /* Wrong */ while (*addr & (1 << 13)) { /* Wrong */ } while (*addr & (1 << 13)); /* Wrong, curly brackets are missing. Can lead to compiler warnings or unintentional bugs */ 尽量避免在循环块内递增变量,参见示例 /* Not recommended */ int32_t a = 0; while (a < 10) {     .     ..     ...     ++a; } /* Better */ for (size_t a = 0; a < 10; ++a) { } /* Better, if inc may not happen in every cycle */ for (size_t a = 0; a < 10; ) { if (...) {         ++a;     } } 分支语句 为每个case语句添加单个缩进 使用额外的单缩进break语句在每个case或default /* OK, every case has single indent */ /* OK, every break has additional indent */ switch (check()) { case 0:         do_a(); break; case 1:         do_b(); break; default: break; } /* Wrong, case indent missing */ switch (check()) { case 0:     do_a(); break; case 1:     do_b(); break; default: break; } /* Wrong */ switch (check()) { case 0:         do_a(); break; /* Wrong, break must have indent as it is under case */ case 1:     do_b(); /* Wrong, indent under case is missing */ break; default: break; } 总是包含default语句 /* OK */ switch (var) { case 0:         do_job(); break; default: break; } /* Wrong, default is missing */ switch (var) { case 0:         do_job(); break; } 如果需要局部变量,则使用花括号并在里面放入break语句。将左花括号放在case语句的同一行 switch (a) { /* OK */ case 0: { int32_t a, b; char c;         a = 5; /* ... */ break;     } /* Wrong */ case 1:     { int32_t a; break;     } /* Wrong, break shall be inside */ case 2: { int32_t a;     } break; } 宏和预处理指令 总是使用宏而不是文字常量,特别是对于数字 所有的宏必须是全大写的,并带有下划线_字符(可选),除非它们被明确标记为function,将来可能会被常规函数语法替换 /* OK */ #define MY_MACRO(x)         ((x) * (x)) /* Wrong */ #define square(x)           ((x) * (x)) 总是用圆括号保护输入参数 /* OK */ #define MIN(x, y)           ((x) < (y) ? (x) : (y)) /* Wrong */ #define MIN(x, y)           x < y ? x : y 总是用括号保护最终的宏计算 /* Wrong */ #define MIN(x, y)           (x) < (y) ? (x) : (y) #define SUM(x, y)           (x) + (y) /* Imagine result of this equation using wrong SUM implementation */ int32_t x = 5 * SUM(3, 4); /* Expected result is 5 * 7 = 35 */ int32_t x = 5 * (3) + (4); /* It is evaluated to this, final result = 19 which is not what we expect */ /* Correct implementation */ #define MIN(x, y)           ((x) < (y) ? (x) : (y)) #define SUM(x, y)           ((x) + (y)) 当宏使用多个语句时,使用do-while(0)语句保护它 typedef struct { int32_t px, py; } point_t; point_t p; /* Define new point */ /* Wrong implementation */ /* Define macro to set point */ #define SET_POINT(p, x, y)  (p)->px = (x); (p)->py = (y) /* 2 statements. Last one should not implement semicolon */ SET_POINT(&p, 3, 4); /* Set point to position 3, 4. This evaluates to... */ (&p)->px = (3); (&p)->py = (4); /* ... to this. In this example this is not a problem. */ /* Consider this ugly code, however it is valid by C standard (not recommended) */ if (a) /* If a is true */ if (b) /* If b is true */ SET_POINT(&p, 3, 4);/* Set point to x = 3, y = 4 */ else SET_POINT(&p, 5, 6);/* Set point to x = 5, y = 6 */ /* Evaluates to code below. Do you see the problem? */ if (a) if (b)         (&p)->px = (3); (&p)->py = (4); else (&p)->px = (5); (&p)->py = (6); /* Or if we rewrite it a little */ if (a) if (b)         (&p)->px = (3);         (&p)->py = (4); else (&p)->px = (5);         (&p)->py = (6); /*  * Ask yourself a question: To which `if` statement `else` keyword belongs?  *  * Based on first part of code, answer is straight-forward. To inner `if` statement when we check `b` condition  * Actual answer: Compilation error as `else` belongs nowhere  */ /* Better and correct implementation of macro */ #define SET_POINT(p, x, y)  do { (p)->px = (x); (p)->py = (y); } while (0) /* 2 statements. No semicolon after while loop */ /* Or even better */ #define SET_POINT(p, x, y)  do {    \ /* Backslash indicates statement continues in new line */ (p)->px = (x);                  \     (p)->py = (y);                  \ } while (0) /* 2 statements. No semicolon after while loop */ /* Now original code evaluates to */ if (a) if (b) do { (&p)->px = (3); (&p)->py = (4); } while (0); else do { (&p)->px = (5); (&p)->py = (6); } while (0); /* Every part of `if` or `else` contains only `1` inner statement (do-while), hence this is valid evaluation */ /* To make code perfect, use brackets for every if-ifelse-else statements */ if (a) { /* If a is true */ if (b) { /* If b is true */ SET_POINT(&p, 3, 4);/* Set point to x = 3, y = 4 */ } else {         SET_POINT(&p, 5, 6);/* Set point to x = 5, y = 6 */ } } 不缩进子语句内#if语句 /* OK */ #if defined(XYZ) #if defined(ABC) /* do when ABC defined */ #endif /* defined(ABC) */ #else /* defined(XYZ) */ /* Do when XYZ not defined */ #endif /* !defined(XYZ) */ /* Wrong */ #if defined(XYZ) #if defined(ABC) /* do when ABC defined */ #endif /* defined(ABC) */ #else /* defined(XYZ) */ /* Do when XYZ not defined */ #endif /* !defined(XYZ) */ 文档 文档化的代码允许doxygen解析和通用的html/pdf/latex输出,因此正确地执行是非常重要的。 对变量、函数和结构/枚举使用doxygen支持的文档样式 经常使用\作为doxygen,不要使用@ 始终使用5x4空格(5个制表符)作为文本行开始的偏移量 /**  * \brief           Holds pointer to first entry in linked list  *                  Beginning of this text is 5 tabs (20 spaces) from beginning of line  */ static type_t* list; 每个结构/枚举成员都必须包含文档 注释的开头使用12x4空格偏移量 /**  * \brief           This is point struct  * \note            This structure is used to calculate all point  *                      related stuff  */ typedef struct { int32_t x; /*!< Point X coordinate */ int32_t y; /*!< Point Y coordinate */ int32_t size; /*!< Point size. Since comment is very big, you may go to next line */ } point_t; /**  * \brief           Point color enumeration  */ typedef enum {     COLOR_RED, /*!< Red color. This comment has 12x4 spaces offset from beginning of line */ COLOR_GREEN, /*!< Green color */ COLOR_BLUE, /*!< Blue color */ } point_color_t; 函数的文档必须在函数实现中编写(通常是源文件) 函数必须包括简要和所有参数文档 如果每个参数分别为in或out输入和输出,则必须注意 如果函数返回某个值,则必须包含返回形参。这不适用于void函数 函数可以包含其他doxygen关键字,如note或warning 在参数名和描述之间使用冒号: /**  * \brief           Sum `2` numbers  * \param[in]       a: First number  * \param[in]       b: Second number  * \return          Sum of input values  */ int32_t sum(int32_t a, int32_t b) { return a + b; } /**  * \brief           Sum `2` numbers and write it to pointer  * \note            This function does not return value, it stores it to pointer instead  * \param[in]       a: First number  * \param[in]       b: Second number  * \param[out]      result: Output variable used to save result  */ void void_sum(int32_t a, int32_t b, int32_t* result) {     *result = a + b; } 如果函数返回枚举的成员,则使用ref关键字指定哪个成员 /**  * \brief           My enumeration  */ typedef enum {     MY_ERR, /*!< Error value */ MY_OK /*!< OK value */ } my_enum_t; /**  * \brief           Check some value  * \return          \ref MY_OK on success, member of \ref my_enum_t otherwise  */ my_enum_t check_value(void) { return MY_OK; } 对常量或数字使用符号(' NULL ' => NULL) /**  * \brief           Get data from input array  * \param[in]       in: Input data  * \return          Pointer to output data on success, `NULL` otherwise  */ const void * get_data(const void* in) { return in; } 宏的文档必须包括hideinitializer doxygen命令 /**  * \brief           Get minimal value between `x` and `y`  * \param[in]       x: First value  * \param[in]       y: Second value  * \return          Minimal value between `x` and `y`  * \hideinitializer  */ #define MIN(x, y)       ((x) < (y) ? (x) : (y)) 头/源文件 在文件末尾留下一个空行 每个文件都必须包括文件的doxygen注释和后跟空行的简要描述(使用doxygen时) /**  * \file            template.h  * \brief           Template include file  */ /* Here is empty line */ 每个文件(头文件或源文件)必须包含许可证(开始注释包括单个星号,因为doxygen必须忽略这个) 使用与项目/库已经使用的相同的许可证 /**  * \file            template.h  * \brief           Template include file  */ /*  * Copyright (c) year FirstName LASTNAME  *  * Permission is hereby granted, free of charge, to any person  * obtaining a copy of this software and associated documentation  * files (the "Software"), to deal in the Software without restriction,  * including without limitation the rights to use, copy, modify, merge,  * publish, distribute, sublicense, and/or sell copies of the Software,  * and to permit persons to whom the Software is furnished to do so,  * subject to the following conditions:  *  * The above copyright notice and this permission notice shall be  * included in all copies or substantial portions of the Software.  *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE  * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR  * OTHER DEALINGS IN THE SOFTWARE.  *  * This file is part of library_name.  *  * Author:          FirstName LASTNAME   */ 头文件必须包含保护符#ifndef 头文件必须包含c++检查 在c++检查之外包含外部头文件 首先用STL C文件包含外部头文件,然后是应用程序自定义文件 头文件必须包含其他所有头文件,以便正确编译,但不能包含更多头文件(如果需要,.c应该包含其余的头文件) 头文件必须只公开模块公共变量/类型/函数 在头文件中使用extern作为全局模块变量,稍后在源文件中定义它们 /* file.h ... */ #ifndef ... extern int32_t my_variable; /* This is global variable declaration in header */ #endif /* file.c ... */ int32_t my_variable; /* Actually defined in source */ 不要把.c文件包含在另一个.c文件中 .c文件应该首先包含相应的.h文件,然后是其他文件,除非另有明确的必要 在头文件中不包含模块私有声明 头文件示例(示例中没有license) /* License comes here */ #ifndef TEMPLATE_HDR_H #define TEMPLATE_HDR_H /* Include headers */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* File content here */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* TEMPLATE_HDR_H */ 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式大杂烩 嵌入式 GitHub C编码

  • 谁来为这块掩盖10年之久、欠费超510万的水表买单?

    本文来源:物联传媒 本文作者:市大妈 自两年前开始,这块被长久遗漏的水表,就已经牵扯出了一场离奇的水费纷争。目前,从网络上的公开信息了解到: 事件发生在南京市六合区的荣盛水景城。该小区自建成以来,一直采用二次供水模式,1到5楼属于自来水公司的直供水,这部分居民直接向南京远古水业公司交费。而5楼以上则需要小区泵房加压供水,这部分居民的分表水费由物业代收,再根据小区总表数字,逐月统一把费用交给供水公司。自小区户主入住至今,供水公司一直按照6块水表向物业企业收纳水费的,物业也是一直按时按月缴纳水费。 十多年来,原本一直相安无事。可就在2019年4月,供水企业在进行二次供水改造和自我设备盘点的时候,发现在一片水泥硬化地面下(原是绿化地)有块水表。 第7块水表被挖出后,供水公司发现水表仍在正常运转,读数已经超过100万立方,折合水费高达400多万元。供水公司随即向物业公司追缴这笔水费和滞纳金。自此,这块原本被遗漏的水表突然现身小区开始引发了一场轩然大波。 供水公司将物业公司告上了法庭。2020年12月,法院一审判决物业公司需支付510多万元水费以及违约金。对此,物业公司表示不服,认为用水情况的举证责任应该在供水公司,并已向南京市中级人民法院提起上诉。目前,该案将于本月下旬在南京市中级人民法院进行二审。 上线智能水表, 防止类似事件再发生 在该案件中,10年、500万元、100万立方米,无论哪个数据都足以让人们震惊。 时至今日,该事件中仍有很多问题暂未明了:这块水表对应的用户是谁?计量是否准确?巨额水费应该由谁来买单?供水公司、物业公司等都未发现这块水表的存在?究竟是哪个环节出了问题?如果供水企业能够早发现、早管控、早治理是不是不至于发生这么严重的后果?后续判决结果如何? 但是纠结于这些问题,显然不是本文的重点。本文的重点在于探讨如何利用物联网技术手段从源头上避免或者解决类似问题的产生。 众所周知,这几年智能水表得到了快速的发展,而智慧水表广泛应用的初衷也正是希望利用各种物联网技术帮助供水公司、物业、乃至用户来避开或解决有可能遇到的各种问题。 通过表计终端企业的出货量来看,目前国内水表的智能化程度不足50%。因此,即使之前得到的快速的发展,未来仍有很大的发展空间。 来源:智研咨询、物联传媒 无论从前文这个事件或者当前水表的智能化程度来看,我们能窥探到在输水行业中管网改造、信息化管理的欠缺以及迫切。只是,目前的信息化建设仍未能从根本上解决输水行业目前存在的问题,需要整个行业各个环节都进行改革创新,一步步摸索、管理逐步细化才能真正将智能化服务提上日程,最终实现智慧水务的愿景。 都说NB-IoT为抄表而生 其实,在智能水表中应用到不少通信技术,主要应用到技术包括2G、NB-IoT、LoRa、蓝牙、M-BUS有线等。其中这几年发展最为快速的则是NB-IoT智能水表,这也是接下来重点介绍的内容。 之所以NB-IoT能够脱颖而出,原因或许在于: 政策方面,受到国家政策、行业政策的大力支持; 生态方面,运营商的网络建设快速、芯片厂商、模组厂商的产品价格下降快直接推动产业快速向前发展。 截至2020年底,2020年我国NB-IoT基站保有量约91万个,2020年新增NB-loT基站数量19万个。其中中国电信NB-loT基站位居全球第一,2020年底保有量为46万个;中国移动位居第二,为35万个;2020年底中国联通NB-IoT基站保有量为10万个,位居全国第三。 这意味着已经形成了一张全国性的网络覆盖,可为水表终端提供稳定的网络。接下来,随着产业成熟度进一步提高,新的竞争者入局,新的应用领域的开发出货量得到增长等都将进一步推动芯片价格的降低。 技术方面,基于广覆盖、大连接、低功耗等多方面的特点,因此NB-IoT技术也被冠以为“为抄表而生”,新NB-IoT标准在频谱效率、耗流等多方面使其更加适用于这种适用于水表这种离散型、轻量级的应用。 市场方面,经过前几年的发展已经积累了足够的客户群、足够的经验、硬件及运维成本都在走低,且客户的接受程度一直在提升。 快速发展如NB-IoT智能水表, 仍逃不开种种挑战 NB-IoT智能水表的发展之快速是毋庸置疑的,但即便如此,NB-IoT在前进的路上仍然面临着一些挑战: 首先,是网络覆盖问题。这是目前面临着的最大问题,而其解决办法有二:其一,增加基站部署,在弱信号点增加皮基站、微基站进行补盲,经过前几年的网络铺设之后,未来NB-IoT基站将会实行按需部署的方式;其二,NB-IoT标准持续演进,性能提升,不断优化网络,提高基站部署密度、调整天线的角度和功率等优化网络的措施。 其次,终端密度达到一定程度之后对网络端形成较大的压力。这一点可从抄表机制的管理上着手,让有限的信号达到最高的效率与平台有比较大的关系,实现有效传输。另外,随着2G退网和NB-IoT小区用户数的增长,运营商会增加小区载频。 以上两方面的挑战,可以说是目前NB-IoT智能水表应用中两个比较显而易见的,但是好在解决途径也已经比较清晰、可行。 不过,对于NB-IoT智能水表来说,其核心在于数据的收集与变现,而想要充分实现其经济价值,最大的挑战或许也正是这点。随着传感器技术的发展,收集或许不再是个难题,但是数据的变现将会是一个着重攻克的点。 我们知道,从供水公司角度来看,帮助水司收费;从用户的角度来看,可以实现用户完成线上缴费,这是智能水表的基础价值。而基础价值以外的附加价值才是重点,如帮助高频采集、大管网的用户进行监测,比如调压、降低漏损等、此外水质安全监测、表计周边环境温度监测等等,这些附加价值也是当前围绕水表相关数据主要的探索方向。 而这些附加价值实现起来并不容易,问题在于: 第一、自来水公司、燃气公司对于数据的需求单一,仅在于收费上,而以收费为核心的技术应用无法发挥NB-IoT在表计领域的应用价值。数据应用上的价值才能真正给行业带来变化:如帮助自来水公司提升管理水平和管理效率。 第二、目前的数据量不足,难以形成一个统一的数据模型。 第三、综合性数据(与其他系统数据的结合还能提供更加人性化的应用)的应用提供更加准确的判断,但是不同数据掌握在各方手里,数据难以实现融合,即数据的开放性不够。如,拥有数据的自来水公司、燃气公司对数据分析需求不大、挖掘数据背后的价值的意愿不强烈,而对数据有分析需求的政府部门却没有数据使用权之间的矛盾仍没有化解途径。 归根结底,数据归属问题成了智能水表数据变现、价值最大化的一个阻碍。这也间接说明了必须从当下的功能叠加阶段(主要实现水质监测、纯度检测、集成更多传感器等)跨越到数据价值挖掘阶段的重要性和紧迫性,在这个过程中政府如何引导水司以及燃气公司在数据脱敏之后进行应用也便成了行业发展关键点,是NB-IoT技术落地表计行业体现社会价值的核心。 事实上,目前水表智能化存在两种方向,全智能化及半智能化,不过无论是哪一种,水表的智能化终归是一个大趋势。 感谢智恒科技股份有限公司智能硬件产品总监雷睿对本文在成文过程中的支持!

    物联传媒 智能水表 AI

  • 21个真实案例看5G改变的16大行业!从看病到挖矿,影响每个人

    本文来源:智东西 截至 2020 年底,全球已经在 57 个国家和地区商用了 142 张5G 网络,全球 5G 终端连接数达到 2.3 亿。其中中国 5G 的发展尤其令人瞩目,2020 年中国累计建成 5G 基站将近 72 万座,实现了重点区域的连续覆盖,5G 终端连接规模全球占比超过了 85%。在这些数字的背后,5G 在行业市场的应用发掘和发展也是市场焦点。5G 走向行业的核心是 ICT 的数字要素与 OT 技术的深度融合和再次升级,生产要素的变化驱动生产力和生产关系的变化。未来 10 年,将是中国产业互联网最值得期待的 10 年。5G 技术作为驱动产业互联网发展的重要因素,这既是一个新的机遇,同时也存在着巨大的挑战。我们欣喜的注意到行业客户在从信息化、自动化向数字化、智能化转型的过程中都在积极的拥抱 5G 技术,也在思考如何利用新的连接和服务能力更好的为企业赋能,目前中国 5G 赋能行业方面的探索如火如荼,包括在商业化模式上,并取得了很多宝贵的经验。 一、5G智能电网 南方电网成立于 2002 年 12 月 29 日,供电范围包括广东、广西、云南、贵州、海南五省区,并与越南、泰国、缅甸、老挝等国家、地区电网相联。供电面积超 100 万平方公里,供电人口达 2.54 亿,占全国人口的 18.2%。 南方电网、中国移动、华为强强联合,从 2018 年开始开展了 5G+ 智能电网应用创新,从技术到业务等方面取得重大突破。5G 为智能电网带来安全隔离、高可靠的虚拟专网并实现 8 项全球第一: ▲南方电网8个全球第一 从顶层设计、国际标准、关键技术、现网试点到业务运营,全面打造 5G 行业应用标杆。提升电网自动化与巡检的效率,节省建设成本,同时为运营商增加行业收入,建立良好的行业生态,并持续孵化商用产品和商业模式。三方在“发 - 输 - 变 - 配 - 用”五大电力业务应用领域的 53 个场景持续探索应用,并在广深现网率先开通了全业务示范区,实现小规模试商用。计划 2021 在中国南方五省规模复制商用。 1、行业挑战 电力系统的流程并不复杂,从电厂发电,经过主电网大容量高电压输送到用电中心,然后分配到千家万户。未来的智能电网将向海量连接、安全高效、末梢延伸发展,主要应用业务场景为: 输电领域:输电网覆盖面积大,既有城市的地下电缆,又有高压线路,输电领域遇到的最大问题在于其广袤覆盖,监测故障非常困难,以前主要靠人力,工作效率非常低。比如南方电网全网有超过30万公里的线路,11万座以上的铁塔,多年来企业一直尝试如何用高新技术解决长线运维的问题,例如用红外线等方式实现无人机探测,采用通信手段将数据传送回来,无线高速传输可大幅度提高传输效率。5G技术可以实现数据及时高速回传,再通过边缘云 AI 进行判断,能够大幅度提高问题判断的准确性,大幅度提高运维效率。 变电领域:人们比较常见的变电站需要其具备在线监测和移动巡检功能,5G 能够提高其工作效率和实现设备运维状态的准确判断。 配电领域:面向智能电网发展需要实现海量连接、安全高效、向末梢延伸,配网环节面临的挑战最突出。配电网相当于通信网络中的接入和汇聚层,由于成本高企业自己很难实现全域的光纤覆盖。目前主网已经实现光纤覆盖,但是电网末梢神经的配网,目前属于“盲调”状态,因为数量大,光纤全覆盖成本高、时间长、维护难(15 万 /km)。 南方电网共有 30 万个电房,这些电房感知能力和控制水平主要受制于通信手段,特别是在控制方面,难以实现实时控制。南方电网在这方面做了大量工作,例如 PMU 和差动保护等, 这些技术对通信要求高,采用 5G 技术((10 毫秒时延和 1us 精准授时等)就可以极小地控制故障范围,并且快速恢复对用户的供电,大大提高了用户的供电可靠性,降低建网成本。 在用电方面,南方电网有超过 9000 万用户,需要进行抄表工作。今后的发展需要分布式能源接入具有互动能力,这是 4G 满足不了的,而 5G 就可以实现,为用户创造价值打开了一扇门。 2、解决方案和价值 5G+AI 为电网提供了安全灵活的智能虚拟专网服务,极大的助力了南方电网的数字化转型战略。在配电场景,通过 5G 高精度授时和低时延,实现配网差动保护,降低建网成本50%;在输变电场景,通过5G+AI实现智能巡检,工作效率提升80倍。通过端到端切片技术和芯片加密技术,保障了电网业务的安全隔离。 目前已经在广州深圳小规模商用,并将在 2021 年广泛推广至南网五省,规模千万级以上,社会效益、经济效益 50 亿元以上。未来,将进一步将 5G 推广至用电等其他综合环节,应用到千万乃至亿级电力终端,有效降低停电时长,全面提升供电效率,降低人民用电成本,避免社会经济损失、节省电网运营成本。 电网是一张无处不在的网络,需要运营商为其提供一张广域虚拟专网。本项目定义了运营商广域切片服务的标准,目前南方电网、移动和华为已经完成南方五省的切片顶层架构设计,并根据不同的服务等级设计出专有切片和通用切片计费模式。未来将向其他行业复制。 5G 是南方电网数字化转型战略的关键技术,经过近 3年的联合探索,三方联合项目工作组,针对每一个应用场景进行深入研究,明确网络和参数如何满足对业务场景的支持,尤其是网络切片的资源分配和性能表现在商用环境下对于电网业务的支持。目前在输 - 变 - 配 - 用等环节的小规模试点表明 5G 网络能够更好地满足电网业务的安全性、可靠性和灵活性需求,带来生产效率的提升和运维成本的降低。 依托国家新基建项目,南方电网、中国移动、华为将持续强强联合,采用 5G+AI+ 云助力南方电网数字化转型。三方将持续联手在广州南沙和深圳打造 5G+ 数字电网示范区,并在南方五省规模推广,努力推动从技术验证到规模化的应用,共同培育 5G+ 数字生态繁荣。 二、5G+MEC智慧商业数字孪生平台 商业综合体是现代城市商业新布局,是现阶段典型的城市人流和零售多业态聚集地,也是畅通国内大循环、促进新型信息消费和推广 5G 消费级应用的重要布局。中国电信积极推动“门店裂变、运营聚变、销售智变”渠道“三变”创新,以客户为中心加快构建线上线下一体化、数字化、生态化的新型营销服务渠道体系,2020 年率先发布 5G+MEC 智慧商业数字孪生平台,2021 年推出千家 5G+MEC 智慧商业综合体合作计划,加速打造数字化营销新场景,赋能流量一站式转化。中国电信愿与产业各方一道积极创新,共享渠道价值,共筑 5G 生态,共创智慧生活。 2020 年新冠疫情严重冲击传统商业经济,加速了商业综合体数字化转型步伐,重构商业场景、打造线上线下深度融合的新型信息消费模式成为行业共识。中国电信率先打造全国首个 5G+MEC 智慧商业数字孪生平台,为实体商业构筑 5G 新基建数字能力底座。平台依托中国电信全球领先的云边协同 5G SA 网络,拥有高精度点云地图及空间三维重建等核心技术,依托自主研发边缘计算平台将用户侧应用能力下沉到商业综合体就近边缘节点,提供低时延、高带宽、云渲染的算力保障。 平台现已落地赋能合肥万象城、北京西单大悦城、上海正大广场、广州正佳广场、苏州吾悦广场、杭州银泰广场、成都宽窄巷子、福州苏宁广场等 100 余家头部商业综合体、商业步行街和自贸港,惠及两万余家零售商户,助力实体商业加速新型基础设施建设和数字化转型,帮扶商户培育扩大线上线下融合的信息消费模式,推动客流回暖,加速消费复苏。 1、行业挑战 一方面,疫情之下商业综合体、商业步行街客流锐减、营收受到较大冲击,如何在做好疫情防控下提升客流和销售转化,实现营收回暖增长成为当务之急。另一方面,面对消费升级的时代,将文化气质、情感内涵、社交体验、生活情境融入消费场景,成为重构人与商业连接的关键。商业综合体作为匹配消费者需求场景化的连接点,纷纷加速全域数字化融合创新。通过新技术拓展数字触点,丰富消费场景、提升消费品质,与用户建立深度互动,产生情感共鸣和社交分享,持续提升用户满意度和客户精细化运营效率。 然而目前仍存在诸多挑战,如多数商业综合体缺乏数字化运营平台,综合体及商户数据未贯通,商户客流经营及精准营销能力弱;线上线下融合购物场景缺失,无法满足年轻客户消费需求,私域流量汇聚手段单一;商业综合体实体空间较大,但空间功能未充分挖掘,沉浸式消费场景不足,活动体验感知、迭代速度和消费转化效率低。 5G+MEC智慧商业综合体建设及应用探索实践表明,这些关键挑战性问题的解决,亟需 5G 赋能。中国电信与头部商业综合体强强合作,开展千兆 5G、千兆宽带、千兆WiFi “三千兆”网络建设,大幅升级基础连接能力,为商业综合体构建“数字孪生平行世界”,在虚拟现实空间成功部署 5G 云 XR 数字景观、5G 云 XR 虚拟导购、5G 云 XR 红包探宝、5G 云 XR 娱乐空间、5G AI 虚拟人直播、5G+AI 大数据分析等一系列 5G应用,为商业综合体及商户创造全新导流导购及数字化营销场景,加速实体商业人、货、场数字化升级,也为消费者带来全新的沉浸式、娱乐化购物体验。 2、解决方案和价值 5G 数字孪生空间。5G+MEC 智慧商业数字孪生平台通过对商业综合体等线下商业场景进行数字孪生基座的采集重建,将现实空间解析再编程,建立物理空间的数字孪生世界映射,进而在其中创作有趣的逛街、消费、社交、互娱体验,消费者通过手机、平板 APP、小程序及 AR 眼镜等 XR 交互终端,在真实场景访问虚实融合的商业互娱平行世界,打通会员积分、品牌营销与商业闭环,通过 XR 场景智能引擎让线下商业可以像游戏一样运营。 ▲为商业综合体打造 5G 数字孪生空间,通过点云地图部署虚拟景观道具,经过简单操作即可完成内容发布 平台基于中国电信自主研发的 MEC 平台,在天翼云进行“消息转发服务”、“定位解算服务”部署,依托边缘计算进行云网协同,针对数字孪生平台及丰富的 AR、VR、MR 应用提供了低时延、大带宽、高算力的业务保障能力;在应用架构设计中,基于云边协同将 XR 云渲染、云游戏等内容部署在 MEC 上,充分保证连接可靠性的同时降低时延和抖动,面向商业综合体运营方实现大空间、定制化场景的厘米级空间定位和小时级高效规模部署,面向消费者提供极致的沉浸式、高精度、高保真、大规模混合现实应用,将时延从 50ms 降至 10-20ms,行业率先实现 5G+MEC 商用场景在公众市场的落地。中国电信通过快速部署 5 步法,即网络 + 边缘机房部署、商业综合体和商户整体上云、数字孪生点云地图采集、5G 云 XR 定制化建模编辑和 5G 云 XR 各类部署落地,可实现一周内完成一个新商业综合体数字孪生建模、平台接入落地和定制化场景部署。 5G 云 XR 数字营销。5G 云 XR 数字营销包括 5G 云 XR 数字景观、5G云 XR 导航导览、5G 云 XR 红包探宝、5G+AI 智能停车、5G 超高清云直播,围绕商业综合体零售场景打造从“引流入场”到“场内停留”再到“离场后触达”全流程智慧解决方案,为消费者提供了全新游购体验。5G+AI 智能停车系统通过 3D 扫描建模和车辆智能识别,帮助顾客停车寻车,解决停车场管理痛点,结合大数据分析实现精准会员服务推送。消费者走近商场即可收到实时卡片推送,了解美食、停车及最新会员权益服务。中国电信 5G 未来大使将带消费者穿越时空旋转门进入 XR 数字孪生平行世界。 打开店铺 AR 导航导览,逛街沿途随心浏览千店千面的品牌视频广告和点评评分,扫码商户店招用 AR 探宝技能寻获超值大奖,抢 AR 红包赢取超级福利。身临其境与中华文化、宇宙星空、海底世界、艺术长廊等 AR 虚拟景观打卡合影。离开商场后,消费者可以通过服务号功能关注对应商家,了解商家最新的优惠活动信息,持续保持互动。用户还可以足不出户体验 5G 云 VR 超高清带来的云端音乐节、云端艺术周等,一切都将会是一场虚实交融的奇妙旅程。 5G 云 XR 娱乐空间。在汇集时空穿梭机、无人赛车、飞行影院等多款劲爆5G 云 VR 游戏的 5G 云 XR 娱乐空间,消费者争相感受5G XR 技术带来的沉浸式感官风暴。与 AI 偶像互动热舞,实时录制高燃酷炫短视频制作成视频彩铃;还有商业综合体定制版行业 5G 视频彩铃,为综合体运营方和零售商户量身定制。 5G 云 XR 虚拟导购。通过为零售商户实现 5G 云 XR 全景虚拟导购,用户足不出户利用手机便可随时随地享受云货架、云橱窗、云逛街等沉浸式购物体验,与心仪的商品深度互动,同时还可点击查询每款虚拟商品实时价格、限时特惠活动、会员权益信息等,在轻松自然的娱乐环境中完成线上下单购物。 在平台部署实践和规模推广中,实体商业将数字孪生空间作为线上流量入口,商户进行线下流量变现。通过基于 5G XR 应用的数字化活动、5G 直播等数字化传播、大数据 + 人工智能数字化营销,打造了“商业运营方 + 电信运营商 + 零售商户 + 顾客”的 B+B+b2C 商业新模式,形成了前后向一体化的变现流程,持续带来长效收益。 三个典型案例:在文旅行业,成都宽窄巷子打造 5GXR 全景宽窄,店铺全景体验日均人数超万人,街区客流增幅 33%,并荣膺商务部全国示范步行街。在贸易领域,打造海南自贸港酒店免税商品沉浸式购物新体验,为中免商城降低近 15% 的运营成本,使酒店客房价上涨近 50%。 在商业地产领域,合肥万象城打造国内首家5G+MEC 智慧商业综合体,全面升级数字化引流和沉浸式娱乐消费体验,客流增幅环比提升 15%,百余户商家营业额环比增长 30%。以上技术标准与应用场景已被编入2020 年 5G 应用产业方阵发布的《5G+ 五星购物中心行业白皮书》,并在加快推动 5G 在商业领域的标准化建设和深度融合。 平台 2021 年计划赋能全国千家商业综合体和 10 万家零售商户,深入探索在数字零售领域的应用场景,深度融入商业运营及营销流程,加快推动线上线下融合的信息消费扩容提质升级。 三、5G+智能矿山 新元煤矿隶属于华阳集团,煤碳年产量 270 万吨,可采储量 7.13 亿吨。5G 发展伊始,华阳集团就积极拥抱5G 应用,希望借助这个工具,合作探索基于 5G 技术的煤炭产业智能化发展之路,实现企业生产效率、生产能力的变革,提高企业盈利能力,不仅如此,通过行业标杆试点,也能从一点到面,未来推动煤炭行业装备升级改造。 2019 年 5 月 25 日,华阳集团、中煤协会组织多方专家召开 5G 技术矿井应用研讨会,项目启动。2019 年 9月 5 日,华阳集团、中国移动、华为公司成立“5G 通信煤炭产业应用创新联盟”,项目进入实质推动阶段。2019人工日常巡检多为了监测巷道的压力变化,煤矿部署了大量的矿压监测传感器,现在主要采用人工抄表,效率低实时性差,如何实现自动抄表。 另外,煤矿中的机械设备部署有传感器,一般每台机械上部署几个到十几个,数据传输对网络需求显著。2020年 11 月 18 日,实现全国首次 5G 基站煤矿井下测试,单基站井下覆盖距离 400 米。2020 年 4 月 29 日,华阳集团联合山西移动、上海山源、华为公司在江苏常州中国煤炭科工集团联合获取全国首个 5G 基站煤安认证。2020年 6 月 18 日,5G 智慧矿山联盟成立,山西省省长林武宣布我国首座 5G 煤矿在山西华阳集团新元公司正式落成。 目前新元矿与山西移动合作,采用隔爆和煤安认证的基站设备,第一期已经部署 14 台 RRU, 第二期部署 64 台RRU ,为保障煤矿数据安全,还在新元矿部署了 MEC/UPF,保障数据不出园。 1、行业挑战 安全生产:安全生产是煤炭企业的第一要务,针对井下生产环境中高瓦斯、高煤尘、水害渗水等情况,以及员工井下工作时间长、劳动强度大(24 小时 3 班倒)等问题,如何利用移动通信技术,改善劳动生产环境。 生产监控难:由于井下传统工业环网带宽限制,传统的井下监控系统只能通过有线解决少量视频上传,但对于井下少人化甚至无人化操作所需的海量视频上传是“杯水车薪”。另外,在综采面由于采煤机、电液压支架、刮板运输机时刻处于运动状态,传统的有线光纤经常扭断,如何保证视频监控满足生产要求。 人工日常巡检多:为了监测巷道的压力变化,煤矿部署了大量的矿压监测传感器,现在主要采用人工抄表,效率低实时性差,如何实现自动抄表。另外,煤矿中的机械设备部署有传感器,一般每台机械上部署几个到十几个,数据传输对网络需求显著。 烟囱式网络多:井下之前为配合不同生产系统建设了多种制式的网络,如何通过一张统一的 5G 网络承载不同类型的业务需求,同时也解决企业要求的数据不出园的安全问题。 2、解决方案和价值 基于统一的 5G 网络,该项目目前主要开展了以下 4 个方面的 5G 应用探索: (1)5G 巡检。通过 5G 连接硐室巡检机器人,把巡检数据、视频、音频信号传送到井上监控指挥中心,实现了新元矿井下变电所的无人巡检。 (2)综采面无人操作。60 路 4K 高清,利用“超千兆上行”大带宽,实现了海量的 4K 高清视频的回传。 (3)掘进面无人操作。利用 5G 网络的高可靠、大带宽、低时延的特点,通过井上对井下设备的远程控制,减少掘进岗位人员数量。 (4)数据采集。利用矿用 NB IoT 网络,实现水文、瓦斯等采集信息的无线回传,减少传输施工和维护难度。 由于煤炭行业安全生产对环境的严苛要求,项目组主要集中力量围绕以下三个方面开展课题攻坚工作: 1、定制矿用 5G 基站,针对井下煤矿防爆的要求,联合行业合作伙伴,打造全球首个 5G 矿用基站。 2、推出千兆上行特性,井下煤矿海量视频回传需求,与传统的地面以下行为主的个人移动截然不同,井下需要大上行,华为创造性地研发了 1:3 配比(DL:UL),实现了超千兆上行,满足井下视频回传需要。大上行的实现,已经成为 5G 煤矿的必选项,后续将写入到 5G 智能煤矿的标准中。核心网风筝模式,大网断,小网不断,满足矿山企业独立组网需求。 3、迅速推出矿用 5G 终端,联合行业伙伴快速推出基于 5G 网络的井下 4K 摄像头、 手机终端、 防爆CPE、5G通用模组、边缘网关、传感器。 ▲5G+智能矿山价值 首个5G煤矿落地,坚定了5G加速能源综改的决心,增强了企业应用5G的信心,凝聚了行业5G创新的恒心。作为“新动能推动中国经济新发展”的典型案例,改变了社会对煤矿员工传统工作环境的印象,煤矿工人可以在舒适的地面操作中心远程采煤,实现从黑领到白领的转变。 展望未来,以 5G 为基础的一张基础网络,结合云计算、AI 和行业应用的综合优势,多方还将持续在无人驾驶、AR 运维、精准定位等方面持续探索,从井下的煤炭生产逐步扩展至地面的洗煤,选煤,煤炭运输等领域,最终实现构建 5G+ 智能矿井的标准体系,进一步推动煤矿产业的智能化发展。 四、5G+AI技术的质检车间 2020 年,是 5G 规模建设的一年。江苏移动从本省实际出发,在工业制造领域积极探索“5G+ 工业互联网应用”。江苏省有发达的制造业产业集群,但也存在生产效率难提升,数字化水平不足,生产安全难保障等痛点。江苏移动以 5G 网络为基石,工业智能应用为切入点,已拓展了 200 多个 5G 垂直行业项目,其中与 72 个行业客户联合开展了“5G+ 工业互联网”的探索。中国移动通信江苏有限公司常州分公司(以下简称“常州移动”)联合常州微亿智造科技有限公司(以下简称“微亿智造”)和中兴通讯,打造 5G+AI 质检示范车间端到端方案,成功在江苏精研科技有限公司落地。 1、行业挑战 江苏精研科技有限公司,是一家专业的金属粉末注射成型(MIM)产品生产商和解决方案提供商,是国内 MIM行业内首家上市公司,主营业务为消费电子领域和汽车领域提供高复杂度、高精度、高强度的定制化 MIM 核心零部件,为该细分行业排名第一的企业。公司重视产品技术研发,副总裁邬均文先生参与完成的“高性能特种粉体材料近终形制造技术及应用”项目荣获 2019 年度国家技术发明二等奖。公司产品现已最终应用于微软、Fitbit、三星、VIVO、OPPO、联想和本田等国内外知名消费电子和汽车品牌。 在精研科技实际生产环节中,3C 产品零部件质检部分的工作需要投入大量的人力,客户对品质要求严格,每个零部件需要人工借助工业电子显微镜,耗费 30 秒至 1分钟才能完成质检,为此精研在质检车间投入近 3000 名工人,占全厂总人数二分之一,每月支出的人工成本超过2500 万元。而对于整个制造企业而言,工业质检领域一直面临人工检测质量不稳定、招工难、留人难、培训难、成本高等难以解决的痛点。尤其在 2020 年新冠疫情的形势下,招工尤为困难,另一方面企业面临着苹果等品牌天量订单交付的压力,如果不能按时交付,将会面临巨额的赔款。 为此,常州移动、微亿智造和中兴通讯等单位进行联合创新,立项开发“5G+AI 缺陷检测”解决方案。本项目依托微亿智造在国内 AI 缺陷检测领域领先的技术优势,联合常州移动和中兴通讯在精研科技质检车间部署5G+MEC 专用网络,共同开发 5G+AI 质检机产品、打造5G+ 工业大数据云平台,形成端到端解决方案,服务于制造企业质检,不断提升工作效率。 2、解决方案和价值 5G+AI 质检端到端方案。微亿智造是一家专注于研发工业视觉质检和工业大数据平台的公司,在国内 AI 质检领域具备领先优势。江苏移动常州分公司与生态合作伙伴微亿智造科技有限公司一起,通过深入精研科技生产车间调研,提炼质检需求。项目为精研科技定制开发的 AI 质检机,整合了工业相机,机械臂,PLC(可编程逻辑控制器)等元器件。AI 质检机连续拍摄多张超高清照片,传输到 AI 算力平台进行图像检测并给出检测结果。AI 算力平台基于图像识别技术,模拟生产线工人表面检测工序,通过样本进行机器学习,2000份数据样本的情况下可以达到 99.96% 查全率,质检效率是人工的 30 倍左右。 质检机回传多张高清照片到AI算力平台, 根据照片数量不同,需要网络提供的上行网络速率在150 ~ 300Mbps,传统基于 2.6GHz 的 4G 移动网络,由于上行时隙配比较小,不能满足质检机需求。中兴通讯根据实际业务需求,设计了 5G+MEC 专网方案。中国移动拥有 4.9G 100MHz 频谱资源,适用于专网部署。 另一方面,行业专网通常对上行速率要求远高于下行速率,通用的 2.5ms 双周期帧结构,上行时隙占比低,不能很好满足需求。针对这种超大上行的应用场景,中兴通讯研发实现了 2.5ms 单周期,3U1D 的时隙配比的 4.9G 基站版本,大大增强了上行传输速率,单用户峰值速率达700Mbps,满足质检机的上行速率需求。 在 AI 算力平台侧,中兴通讯提供了增强型一体化MEC 边缘云方案,边缘云系统基于 NFV 标准三层架构进行扩展,采用由多样化硬件和异构开放、轻量化管理的基础平台层、核心能力层和业务应用层组成的全栈式融合架构,与云端协同,提供边缘计算服务。 边缘网络云可在边缘位置提供计算、网络、存储、加速、安全等全面的云计算服务,并为网元、互联网 /IT 应用等提供部署、调度、运行等稳健的基础环境,可降低响应时延、减轻云端压力、降低带宽成本,满足多样化的边缘应用场景。质检照片流数据本地转发,不需要绕行大区 5G 核心网,保证企业数据的安全。另一方面,MEC提供强大的CPU,GPU算力,满足 AI 算力平台运行。 一期项目成效:智能化升级价值初现,前景广阔。5G+AI 质检系统一期项目落地运行后,商业价值逐步显现。第一,质检工作效率有了近 30 倍提升,单台质检机可以取代 30 个工人,可以节约大量的质检人工支出,同时也能解决招工难,人工质检不稳定的难题。整套系统的投资当年就可以收回成本,之后将持续创造价值。 精研科技质检车间项目抓住了金属粉末注射成型(MIM)行业质检流程中用工难,招工难的痛点,深度融合 5G+AI 新技术,将 5G 的大带宽、低时延的特性充分发挥,实现了 AI 质检机算力上云,大大节省了单机成本,为工业互联网给予了有力赋能。同时 5G+AI 的质检车间为企业节省了大量的用工支出,良好的投入产出比使得企业有意愿跟合作伙伴签订合同,最终实现多方共赢。一期项目总共投产 22 台质检机,累计可替换工人 600 个左右,当年即可回收投资。 从一期项目开始,微亿智造对于质检的瑕疵图片进行了大数据的实时分析,后续还将通过产品缺陷数据与生产参数建立关联,反向调整各项生产工艺。例如对注塑成型环节的模具尺寸公差进行精密调整,提升模具精度,减少经验总结与后续计划损耗。对烧结阶段温度、压力等工艺参数进行优化建议及分析,提高产品的良品率。通过 AI 对大量样本的训练,进一步优化生产工艺模型,相信在未来二,三期项目实施后,将为客户带来更大的价值。 此外,常州市钟楼区政府与江苏移动、微亿智造共同搭建5G+工业大数据云平台,平台主要由“制造执行大脑”、“弹性算力平台”两部分构成。计划在未来几年,为更多的生产制造企业会提供“弹性算力”的能力。企业无需购买任何设备,无需支付后续的维护升级费用,算力按需使用,费用按需支付,使得更多的中小企业也能用得起。同时结合中兴通讯提供的 5G 技术,为生产企业提供更快捷方便的弹性算力输出,降低生产企业使用人工智能及大数据技术的成本,加快企业的数字化转型,实现产业升级。 五、5G+智能制造 5G+智能制造项目主要在美的集团微清事业部展开。广东美的厨房电器制造有限公司(微清事业部)位于马龙的生产基地,规划总占地面积 50 万平方米,建筑面积 42万平方米,员工数量超过 9000 人,主要生产微波炉、大烤箱、小烤箱、蒸汽炉等产品群,现有总装线 59 条,年产能超过 4000 万台,2019 年实现营业收入 129 亿元。 项目主要面向美的微清事业部在柔性生产中面临的产线升级改造问题进行服务,整个项目共分为三个阶段建设实施: ▲美的集团5G项目三个阶段 1、行业挑战 企业柔性制造需求较大,产线调整频繁,设备技改及生产能力提升过程中会频繁发生产线、设备、物流布局的变动,网络部署也要随之改动,涉及的网络变动建设费用投入超过 600 万 / 年。 采集密集的产线、设备机台区,WiFi 网络易掉线,跨 AP 切换掉线严重,业务系统采集、刷新速度慢,用户体验不好。 ▲智能制造业务痛点 2、解决方案和价值 2020年6月起,项目针对美的微清事业部生产园区内智慧仓管/物流、5G的云化PLC、园区安全监控、生产巡检机器人、5G 机器视觉 AI、5G 产线设备 AR 辅助、扫码枪管理、生产 MES 看板、生产数据采集管理等业务场景进行深入研究,并根据场景需要进行 5G 网络覆盖,开展以上新应用场景的 5G 工业运用。 智慧仓管 / 物流。美的成品仓货架共有五层,需高位叉车用于货品的上架、下架,现有 20 多台高位叉车。因货物运输频繁,每台高位叉车需与 WMS(仓储管理系统)进行信息交互。叉车上配置定制化 PC 终端,通过 5G 网络实现叉车作业系统与WMS 通信,实现物流调度信息的实时同步。 仓库内 AGV 路径:从注塑车间到车间内的仓库,从仓库到车间门口,共需 AGV11 台。原使用企业内的 WiFi 需认证,同时考虑隔离,当前针对每个项目均独立部署一套WiFi 局域网络,并不便于 AGV 设备大范围、跨区域调配。目前应用 5G 网络,支撑 AGV 到调度系统服务器的实时信息同步(小车任务下发指令,小车状态管控,信息反馈),使 AGV 小车全作业区域运行具备先决条件。 ▲仓库内 AGV 路径 基于 5G 的云化 PLC。当前 PLC 现状“一高两难“:布线成本高,运维困难,工业控制协同难。以码垛机为例一层楼只有 2 个码垛机线,一出问题,导致整个生产停下来;5 个大机柜,工控 PC 机 4 台,连线复杂,成本高,散热困难,不敢关门;PLC-SCADA-MES 多级架构交互复杂,编程和调试都困难,容易出问题。 现在通过云化PLC,实现“无线自动化产线”,解决“一高两难”。无线化产线:布线简单,成本低,占用空间小;产线调整快:根据业务需求,快速调整产线布局;业务协同简单:云端统一 PLC 编程,效率高,数字化。 5G+ 园区安全监控。现有园区监控固定回传成本高:采用视频光端机 + 裸光纤或 XPON+ 光猫方式,12 芯光缆每公里平均 8-10 万元,其中挖沟成本 3 万元左右,节点扩展不灵活;PoE 供电在线率低,维护成本高;现有4G 上传带宽有限,难以支撑多路高清视频应用。 通过 5G+ 云实现了监控能力提升,具有如下价值:无线方式,可以随需部署视频监控节点,包括移动监控等模式;5G 提升上行带宽,支撑高清视频、更精细视觉识别等应用;云存储、GPU 等云服务能力支撑海量数据存储、视频 AI 分析。 ▲5G+ 园区安全监控 5G 生产巡检机器人。美的微清制造园区占地 50 万平米,厂区每次巡逻需30 分钟,夜晚或节假日期间,保安人员收到警报后需在最短时间内赶到现场确认警报真实性。工作量大;制造车间的生产设备和物流设备众多,需要定期安排巡检人员到各个制造车间现场巡检和维护,确保生产线和物流线的各类问题及时解决,潜在运行故障风险及时排除;另外,家电制造车间面临噪音大、异味、高温、空间狭小、设备多而复杂,视觉环境差、作业面积广等问题。 通过集成 5G 的巡检机器人实现了移动部署,利用巡检机器人代替工人对产线运行情况进行巡检,节省人力,同时可以保证 7*24 小时全天候巡检,提升车间故障解决效率,避免恶劣生产事故发生。 5G+ 机器视觉 AI。根据产品工艺要求,微波炉底板螺钉、微波炉面板冲压件有机器视觉质检要求,微波炉面板冲压件压制后,需对冲压件的外观进行检查,当前采用的是前后左右和顶部各放置一个相机进行视觉检查,目前存在人工周期抽检(30 分钟 / 次)质量无保障、不良返修率高(日均 @300-500PCS/2万)、高报废率(抽检期间冲压问题易批量报废)、工控机贵(本地AI计算机贵@1W5/点)等场景业务痛问题。 通过5G网络,可以满足产线机器视觉检测的以下要求:带宽要求:根据节拍速率、照片大小、数据传输、云端处理时间等因素计算得出,5 个工业相机检查图像信息实施传输(12MB+7MB*4=40MB=320Mb,假设 0.5s 传输完成,上行带宽需求 =640Mbps,通过叠加视频视频算法后需要 150Mbps); MEC 处理能力要求:假设 AI 图像推理计算时间为0.1s,MEC 上 GPU 算力需求要相应匹配;可靠性要求高。 ▲5G+ 机器视觉 AI 基于 5G 的 AR 辅助点检。美的集团微清事业部生产设备需定期点检,确保隐患和缺陷能够得到早期发现、早期预防、早期处理。 点检工作覆盖各个车间,每天例行进行两次。点检项目多(如钣金车间,设备 80 多台,每台设备点检项 10 多个,共有 800 多个点检项目),细节多,容易错检、漏检; 点检且存在环境恶劣、安全风险高、易疲劳问题,容易出现点检员疏忽或者随意应付的情况; 点检过程和结果基于传统工单,无流程记录,难以取证。 基于 5G 的 AR 点检实现了流程化和数字化:在每个点检项目位置贴条形码,AR 眼镜扫描条形码后,AR 眼镜显示该点检位置的所有点检项,以及每个点检项的描述、正常状态的图像,声音提示等。点检过程中,AR 眼镜在作业过程中解放双手并可以进行第一视角的视频和图片实时上传记录。通过以上手段从而实现点检的全流程标准化和数字化管理。 5G 低时延确保相关显示信息的实时反馈,大带宽确保相关点检视频实时上传。 基于 5G 的 AR 机器维修辅助。磁控管是微波炉的核心器件,磁控管厂的生产制造大量依赖于自动化设备。自动化设备故障率高(各类设备一天内故障的总数为 40 次),在晚上或周末时间,由于值班工程师数量有限,且同时负责其他工作内容,产线工人缺乏快速有效的指导对故障进行快速恢复,导致停线,影响生产效率。 现场问题 / 故障处理成本高时效性差:专家资源有限,无法快速满足现场支撑需求,且相应及时性差,现场人员无法及时准确获取被巡检设备的实时状态,同时专家到现场的差旅成本高,占用专家资源时间长。 5G AR 远程维护指导应用场景主要是产线工人佩戴AR 眼镜,将现场情况和设备情况第一视角传到不在现场的工程师,工程师实时看到现场画面,可通过实时标注方式,协助指导问题快速解决。相关数据实时上传记录,工程师可实现 1 对多的支持。 六、5G智慧工厂 华菱湘钢始建于 1958 年,产品涵盖宽厚板、线材和棒材三大类 400 多个品种,具备年产钢 1400 万吨的综合生产能力。目前已经发展成为了湖南单体规模最大的国有企业,也是全球最大的宽厚板制造基地。 华菱湘钢拥有钢铁全流程的先进技术装备和生产工艺,但在效率提升和降低能耗方面都遇到了瓶颈,同时钢铁厂的高温高危环境也让年轻人不愿意进入钢铁厂工作。为进一步提升生产力、降低能耗、改善工作环境,并提高员工的工作幸福感和获得感,华菱湘钢下定决心要充分利用 5G、AI、大数据、云计算等 ICT 技术进行全流程、全业务的数字化升级,打造钢铁行业的智能工业互联网平台。 一方面推动华菱湘钢的高质量发展,另一方面也推动钢铁行业向智慧钢铁、绿色钢铁方向发展。 2019年9月,湘钢、湖南移动、华为公司“拥抱 5G时代,共建智慧工厂”合作协议签约仪式在湘钢举行。湖南移动为湘钢实施“三大基础工程”,建设“三大智慧平台”,打造跨界合作智慧工厂标杆案例。2020 年 6 月,湘钢、湖南移动、华为公司三方在五米板厂二期项目中继续探索 5G 应用,充分证明了行业客户对 5G 在钢铁行业发挥的现实作用的认可,以及未来持续提升行业效能创造价值的信心。 1、行业挑战 华菱湘钢的主要生产线基本实现了自动化,但如果要进一步推进智慧钢厂的建设,受制于生产厂区范围大、生产环境苛刻、电磁屏蔽严重,传统无线信号存在干扰导致传输丢包严重,无法满足目前对网络带宽和实时性的要求,导致很多作业还是需要人工进行操作,推进智慧钢厂的5G智能制造建设已迫在眉睫。针对钢铁生产过程的特点,5G+ 行业智慧改造重点关注以下几方面: 一线操作自动化/无人化:钢铁生产流程中有很多岗位,环境恶劣、强度大、高温危险。对于这些操作岗位,实现机器替人,或者无人化,对于安全、人文关怀等方面都是有益的。 连接未连接:冶金核心设备对于生产的安全性和稳定性极为关键,常规采用的定修点检制,既降低了生产效率又增加了检修人员的工作强度。受限于传统安装条件和带宽所限,一些震动、旋转设备上并没有安装传感器,或者传感器信息量较少。若在核心设备都装上传感器,多设备的实时工作状态、参数都上平台进行集中监控,点检员可以通过手机等设备时时检查,及时准确了解设备的工作状态。 网络连接是工厂数字化、智慧化的前提:连接由有线为主向无线为主过渡,由多种接入方式整合为以 5G+ 光纤共存的模式为主,共同打造低时延、高可靠的基础网络。连接是实现全要素各环节深度互联的前提。 2、解决方案和价值 2019 年,项目首先在五米宽厚板厂区范围室外、室内转炉主控楼、炼钢废钢跨和渣跨区域实现 5G 全覆盖。通过摄像头的高清视频传输和 PLC 之间控制信号数据传输,优先开展了几种应用场景的验证,例如远程 / 无人天车的操控、高危区域高清视频监控。2020 年,在一期的基础,又增加了多元数据的采集、基于 AI 机器视觉的质检等几种应用。 5G+ 智慧天车。天车集装卸、搬运、运输功能于一身,是钢铁生产最主要的设备之一,也是决定钢厂高效运转的关键因素。天车经常运行在厂房内的高空,过去需靠人工在天车操作室里操作,不但效率低,且工作环境恶劣、危险。为了提高效率,消除作业风险,发展无人化天车系统已是必然趋势。 在无人天车远程操控中,通过天车上安装的 3D 扫描仪、测距仪、编解码器和多个高清摄像头,结合激光 3D轮廓扫描技术,获取周边物料、车辆、车斗高度及装卸位置信息画面,通过超大带宽超高速率超低时延的 5G 网络实时将数据传输至服务器端,进行数据处理并建立三维模型,计算出动作指令集,下发给天车执行,实现天车无人化自动装载运输。 5G 天车远程操控可解决工业 Wi-Fi 覆盖及容量不足、抗干扰能力差、光纤铺设困难、成本高、维护复杂等问题,同时极大改善了职工的工作环境,显著提高人工劳效。 5G+ 高清视频监控。基于保护厂区财产、人身安全和更方便的管理。智能视频监控系统可以针对重要特定区域、通道、出入口进行图象监控并通过存储设备保存,以便日后调查取证查看,是保存重要证据的有力手段;厂内视频监控是生产调度系统的重要组成部分,通过与调度终端、生产数据等子系统进行深度整合,满足生产企业对日常生产调度、安全事件监控和应急处置的需要。 ▲多场景视频监控 5G+ 多元工业数据采集。为了满足钢厂业务长期、稳定、可靠的运行,需要在钢厂各关键设备布放多种类型的传感器,实时监控震动、温度、湿度、气液体流量等关键信息,从而能够及时发现并且解决问题。不同的传感器采用不同的工业协议,网络传输方式和架构也不一致,很难对采集的数据进行统一的管理。 为此,采用 5G 数采方案,能够通过统一的边缘计算网关,基于丰富的工业接口,实现工业场景下多类型传感器数据的采集和协议转换,一站式解决企业 IoT 设备接入问题。利用 5G 低时延无线传输(

    物联传媒 互联网 通信技术 5G

  • 干货 | 嵌入式开发常见问题解决方法

    链接:https://www.cnblogs.com/jozochen/p/8541714.html 一、问题复现 稳定复现问题才能正确的对问题进行定位、解决以及验证。一般来说,越容易复现的问题越容易解决。 1.1 模拟复现条件 有的问题存在于特定的条件下,只需要模拟出现问题的条件即可复现。对于依赖外部输入的条件,如果条件比较复杂难以模拟可以考虑程序里预设直接进入对应状态。 1.2 提高相关任务执行频率 例如某个任务长时间运行才出现异常则可以提高该任务的执行频率。 1.3 增大测试样本量 程序长时间运行后出现异常,问题难以复现,可以搭建测试环境多套设备同时进行测试。 二、问题定位 缩小排查范围,确认引入问题的任务、函数、语句。 2.1 打印LOG 根据问题的现象,在抱有疑问的代码处增加LOG输出,以此来追踪程序执行流程以及关键变量的值,观察是否与预期相符。 2.2 在线调试 在线调试可以起到和打印LOG类似的作用,另外此方法特别适合排查程序崩溃类的BUG,当程序陷入异常中断(HardFault,看门狗中断等)的时候可以直接STOP查看call stack以及内核寄存器的值,快速定位问题点。 2.3 版本回退 使用版本管理工具时可以通过不断回退版本并测试验证来定位首次引入该问题的版本,之后可以围绕该版本增改的代码进行排查。 2.4 二分注释 二分注释即以类似二分查找法的方式注释掉部分代码,以此判断问题是否由注释掉的这部分代码引起。 具体方法为将与问题不相干的部分代码注释掉一半,看问题是否解决,未解决则注释另一半,如果解决则继续将注释范围缩小一半,以此类推逐渐缩小问题的范围。 2.5 保存内核寄存器快照 Cortex M内核陷入异常中断时会将几个内核寄存器的值压入栈中,如下图: 我们可以在陷入异常中断时将栈上的内核寄存器值写入RAM的一段复位后保留默认值的区域内,执行复位操作后再从RAM将该信息读出并分析,通过PC、LR确认当时执行的函数,通过R0-R3分析当时处理的变量是否异常,通过SP分析是否可能出现栈溢出等。 三、问题分析处理 结合问题现象以及定位的问题代码位置分析造成问题的原因。 3.1 程序继续运行 3.1.1 数值异常 3.1.1.1 软件问题 1、数组越界 写数组时下标超出数组长度,导致对应地址内容被修改。如下: 此类问题通常需要结合map文件进行分析,通过map文件观察被篡改变量地址附近的数组,查看对该数组的写入操作是否存在如上图所示不安全的代码,将其修改为安全的代码。 2、栈溢出 0x20001ff8 g_val 0x20002000 栈底 ………… 栈空间 0x20002200 栈顶 如上图,此类问题也需要结合map文件进行分析。假设栈从高地址往低地址增长,如果发生栈溢出,则g_val的值会被栈上的值覆盖。 出现栈溢出时要分析栈的最大使用情况,函数调用层数过多,中断服务函数内进行函数调用,函数内部申明了较大的临时变量等都有可能导致栈溢出。 解决此类问题有以下方法: 在设计阶段应该合理分配内存资源,为栈设置合适的大小; 将函数内较大的临时变量加”static”关键字转化为静态变量,或者使用malloc()动态分配,将其放到堆上; 改变函数调用方式,降低调用层数。 3、判断语句条件写错 判断语句的条件容易把相等运算符“==”写成赋值运算符“=”导致被判断的变量值被更改,该类错误编译期不会报错且总是返回真。 建议将要判断的变量写到运算符的右边,这样错写为赋值运算符时会在编译期报错。还可以使用一些静态代码检查工具来发现此类问题。 4、同步问题 例如操作队列时,出队操作执行的过程中发生中断(任务切换),并且在中断(切换后的任务)中执行入队操作则可能破坏队列结构,对于这类情况应该操作时关中断(使用互斥锁同步)。 5、优化问题 如上图程序,本意是等待irq中断之后不再执行foo()函数,但被编译器优化之后,实际运行过程中flg可能被装入寄存器并且每次都判断寄存器内的值而不重新从ram里读取flg的值,导致即使irq中断发生foo()也一直运行,此处需要在flg的申明前加“volatile”关键字,强制每次都从ram里获取flg的值。 3.1.1.2 硬件问题 1、芯片BUG 芯片本身存在BUG,在某些特定情况下给单片机返回一个错误的值,需要程序对读回的值进行判断,过滤异常值。 2、通信时序错误 例如电源管理芯片Isl78600,假设现在两片级联,当同时读取两片的电压采样数据时,高端芯片会以固定周期通过菊花链将数据传送到低端芯片,而低端芯片上只有一个缓存区. 如果单片机不在规定时间内将低端芯片上的数据读走那么新的数据到来时将会覆盖当前数据,导致数据丢失。此类问题需要仔细分析芯片的数据手册,严格满足芯片通信的时序要求。 3.1.2 动作异常 3.1.2.1 软件问题 1、设计问题 设计中存在错误或者疏漏,需要重新评审设计文档。 2、实现与设计不符 代码的实现与设计文档不相符需要增加单元测试覆盖所有条件分支,进行代码交叉review。 3、状态变量异常 例如记录状态机当前状态的变量被篡改,分析该类问题的方法同前文数值异常部分。 3.1.2.2 硬件问题 1、硬件失效 目标IC失效,接收控制指令后不动作,需要排查硬件。 2、通信异常 与目标IC通信错误,无法正确执行控制命令,需要使用示波器或逻辑分析仪去观察通信时序,分析是否发出的信号不对或者受到外部干扰。 3.2 程序崩溃 3.2.1 停止运行 3.2.1.1 软件问题 1、HardFault 以下情况会造成HardFault: 在外设时钟门未使能的情况下操作该外设的寄存器; 跳转函数地址越界,通常发生在函数指针被篡改,排查方法同数值异常; 解引用指针时出现对齐问题: 以小端序为例,如果我们声明了一个强制对齐的结构体如下: 地址 0x00000000 0x00000001 0x00000002 0x00000003 变量名 Val0 Val1_low Val1_high Val2 值 0x12 0x56 0x34 0x78 此时a.val1的地址为0x00000001,如果以uint16_t类型去解引用此地址则会因为对齐问题进入HardFault,如果一定要用指针方式操作该变量则应当使用memcpy()。 2、中断服务函数中未清除中断标志 中断服务函数退出前不正确清除中断标志,当程序执行从中断服务函数内退出后又会立刻进入中断服务函数,表现出程序的“假死”现象。 3、NMI中断 调试时曾遇到SPI的MISO引脚复用NMI功能,当通过SPI连接的外设损坏时MISO被拉高,导致单片机复位后在把NMI引脚配置成SPI功能之前就直接进入NMI中断,程序挂死在NMI中断中。这种情况可以在NMI的中断服务函数内禁用NMI功能来使其退出NMI中断。 3.2.1.2 硬件问题 1、晶振未起振 2、供电电压不足 3、复位引脚拉低 3.2 .2 复位 3.2.2.1 软件问题 1、看门狗复位 除了喂狗超时导致的复位以外,还要注意看门狗配置的特殊要求,以Freescale KEA单片机为例,该单片机看门狗在配置时需要执行解锁序列(向其寄存器连续写入两个不同的值),该解锁序列必须在16个总线时钟内完成,超时则会引起看门狗复位。此类问题只能熟读单片机数据手册,注意类似的细节问题。 3.2.2.2 硬件问题 1、供电电压不稳 2、电源带载能力不足 四、回归测试 问题解决后需要进行回归测试,一方面确认问题是否不再复现,另一方面要确认修改不会引入其他问题。 五、经验总结 总结本次问题产生的原因及解决问题的方法,思考类似问题今后如何防范,对相同平台产品是否值得借鉴,做到举一反三,从失败中吸取经验。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式大杂烩 嵌入式 寄存器 数组

  • 低功耗蓝牙智能手表可提供活动和健康数据并且连续使用15天

    低功耗蓝牙智能手表可提供活动和健康数据并且连续使用15天

    挪威奥斯陆 – 2021年3月8日 – Nordic Semiconductor宣布位于深圳的科技开发厂商魔样科技有限公司(Mo Young Ltd.)已选定Nordic的nRF52840 蓝牙 5.2/低功耗蓝牙 (Bluetooth Low Energy (Bluetooth LE))先进多协议系统级芯片(SoC)为乐戴科技有限公司的乐戴C16智能手表提供核心处理功能和无线连接功能。 C16智能手表是一款时尚的可穿戴设备,可为用户提供一系列活动跟踪功能,包括20种运动模式、计步器功能、卡路里和运动跟踪、久坐提醒以及社交媒体通知和呼叫提醒。此外,这款智能手表还提供多种健康数据,包括睡眠和24小时用户心率和血氧水平智能监控。 Nordic SoC助力的低功耗蓝牙连接可把数据从C16智能手表中继传输到用户配对的蓝牙 4.0(及更高版本)智能手机上,然后通过支持iOS或安卓的配套应用进行各种操作,比如自定义设备、输入个人信息、并通过图表查看所有运动模式和健康功能的当前和过往数据。 Nordic nRF52840 SoC的64MHz、32位Arm®Cortex®M4处理器和浮点单元(FPU)为C16智能手表提供了传感器和算法数据处理功能。Arm Cortex M4处理器旨在支持高端无线应用中典型的浮点和数字信号处理计算,该处理器结合了2.4GHz多协议无线电 (支持蓝牙5.2、ANT™、Thread、Zigbee、IEEE 802.15.4和专有2.4GHz RF协议软件),并具有充足的1MB闪存和256kB RAM内存分配。 C16智能手表具有IP67防水等级,可达到最多30米防水性能,并且使用350mAh电池供电,可待机45天或连续工作10到15天,这在一定程度上要归功于Nordic SoC的超低功耗特性。nRF52840 SoC经过精心设计,可通过全自动电源管理系统将功耗降至最低,与nRF51系列器件相比,功耗降低多达80%。 nRF52840提供全面的蓝牙5支持,包括两倍无线原始数据带宽(2Mbps)、四倍通信范围、具有八倍广播扩展性能(将广播数据包有效载荷大小增加到251字节),以及更好的信道共存算法。随附nRF52840 SoC一起提供的S140 SoftDevice是通过蓝牙5.2认证的软件协议栈,用于构建远程和高数据吞吐量低功耗蓝牙应用。Nordic具有独特的软件体系架构,清晰分隔RF协议软件和开发人员的应用程序代码,从而简化了开发过程,并确保魔样科技在开发、编译、测试和验证应用程序代码时,SoftDevice不会受到损坏。S140 SoftDevice提供并发的中央、外设、广播器和观察者低功耗蓝牙角色,并且支持高吞吐量和远程模式以及广播扩展功能。 魔样科技首席技术官Justin Zhang表示:“ C16智能手表使用的Nordic nRF52840有多个最重要的硬件功能,包括强大的Arm CPU功能、充足内存容量、可延长待机时间的低功耗,因此可以实现极高分辨率和非常流畅的低延迟触摸响应。” “ nRF52840的关键软件功能是将应用程序代码与SoftDevice分开,从而实现纯开发并大大降低了软件错误率,是我们决定使用这个SoC的原因之一。Nordic 软件开发工具包(SDK)提供全面的数据,可极大地减低开发成本和克服任何开发困难。” “作为一家企业,Nordic为我们提供了出色的技术资讯和参考设计以促进产品开发过程。”

    Nordic SoC 智能手表 nRF52840

  • Git 工作原理不懂?看这篇

    链接:http://marklodato.github.io/visual-git-guide 本文图解Git中的最常用命令。如果你稍微理解Git的工作原理,这篇文章能够让你理解的更透彻。基本用法 上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。 git add files把当前文件放入暂存区域。 git commit给暂存区域生成快照并提交。 git reset – files用来撤销最后一次git add files,你也可以用git reset撤销所有暂存区域文件。 git checkout – files把文件从暂存区域复制到工作目录,用来丢弃本地修改。 你可以用git reset -p,git checkout -p,or git add -p进入交互模式。 也可以跳过暂存区域直接从仓库取出文件或者直接提交代码。 git commit -a相当于运行git add把所有当前目录下的文件加入暂存区域再运行。 git commit files进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。 git checkout HEAD – files回滚到复制最后一次提交。 约定 后文中以下面的形式使用图片。 绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。这张图片里显示最后5次提交,ed489是最新提交。master分支指向此次提交,另一个maint分支指向祖父提交节点。 命令详解 Diff 有许多种方法查看两次提交之间的变动,下面是一些示例。 Commit 提交时,Git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。然后把当前分支指向新的提交节点。下图中,当前分支是master。在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。 即便当前分支是某次提交的祖父节点,git会同样操作。下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。这样,maint分支就不再是master分支的祖父节点。此时,合并[1](或者衍合[2])是必须的。 如果想更改一次提交,使用git commit –amend。Git会使用与当前提交相同的父节点进行一次新提交,旧的提交会被取消。 另一个例子是分离HEAD提交[3],后文讲。 Checkout Checkout命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。 当给定某个文件名(或者打开-p选项,或者文件名和-p选项同时打开)时,Git会从指定的提交中拷贝文件到暂存区域和工作目录。比如,git checkout HEAD~ foo.c会将提交节点HEAD~(即当前提交节点的父节点)中的foo.c复制到工作目录并且加到暂存区域中。(如果命令中没有指定提交节点,则会从暂存区域中拷贝内容。)注意当前分支不会发生变化。 当不指定文件名,而是给出一个(本地)分支时,那么HEAD标识会移动到那个分支(也就是说,我们“切换”到那个分支了),然后暂存区域和工作目录中的内容会和HEAD对应的提交节点一致。新提交节点(下图中的a47c3)中的所有文件都会被复制(到暂存区域和工作目录中);只存在于老的提交节点(ed489)中的文件会被删除;不属于上述两者的文件会被忽略,不受影响。 如果既没有指定文件名,也没有指定分支名,而是一个标签、远程分支、SHA-1值或者是像master~3类似的东西,就得到一个匿名分支,称作detached HEAD(被分离的HEAD标识)。这样可以很方便地在历史版本之间互相切换。比如说你想要编译1.6.6.1版本的Git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout master。然而,当提交操作涉及到“分离的HEAD”时,其行为会略有不同,详情见在下面。 HEAD标识处于分离状态时的提交操作 当HEAD处于分离状态(不依附于任一分支)时,提交操作可以正常进行,但是不会更新任何已命名的分支。(你可以认为这是在更新一个匿名分支。) 一旦此后你切换到别的分支,比如说master,那么这个提交节点(可能)再也不会被引用到,然后就会被丢弃掉了。注意这个命令之后就不会有东西引用2eecb。 但是,如果你想保存这个状态,可以用命令git checkout -b name来创建一个新的分支。 Reset Reset命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。 如果不给选项,那么当前分支指向到那个提交。如果用–hard选项,那么工作目录也更新,如果用–soft选项,那么都不变。 如果没有给出提交点的版本号,那么默认用HEAD。这样,分支指向不变,但是索引会回滚到最后一次提交,如果用–hard选项,工作目录也同样。 如果给了文件名(或者-p选项),那么工作效果和带文件名的checkout差不多,除了索引被更新。 Merge Merge命令把不同分支合并起来。合并前,索引必须和当前提交相同。如果另一个分支是当前提交的祖父节点,那么合并命令将什么也不做。另一种情况是如果当前提交是另一个分支的祖父节点,就导致fast-forward合并。指向只是简单的移动,并生成一个新的提交。 否则就是一次真正的合并。默认把当前提交(ed489 如下所示)和另一个提交(33104)以及他们的共同祖父节点(b325c)进行一次三方合并[4]。结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。 Cherry Pick cherry-pick命令“复制”一个提交节点并在当前分支做一次完全一样的新提交。 Rebase 衍合是合并命令的另一种选择。合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。本质上,这是线性化的自动的 cherry-pick。 上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。 要限制回滚范围,使用–onto选项。下面的命令在master分支上重演当前分支从169a6以来的最近几个提交,即2c33a。 同样有git rebase –interactive让你更方便的完成一些复杂操作,比如丢弃、重排、修改、合并提交。没有图片体现这些,细节看这里:git-rebase(1)[5]。技术说明 文件内容并没有真正存储在索引(.git/index)或者提交对象中,而是以blob的形式分别存储在数据库中(.git/objects),并用SHA-1值来校验。索引文件用识别码列出相关的blob文件以及别的数据。对于提交来说,以树(tree)的形式存储,同样用对于的哈希值识别。树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。 如果用detached HEAD提交,那么最后一次提交会被the reflog for HEAD引用。但是过一段时间就失效,最终被回收,与git commit –amend或者git rebase很像。 相关链接: http://marklodato.github.io/visual-git-guide/index-zh-cn.html#merge http://marklodato.github.io/visual-git-guide/index-zh-cn.html#rebase http://marklodato.github.io/visual-git-guide/index-zh-cn.html#detached http://en.wikipedia.org/wiki/Three-way_merge http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_interactive_mode 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式大杂烩 工作原理 Git 常用命令

  • 从编译器角度分析数组名和指针的区别

    int *p; p++; 却不能写这样的代码: p = a; 则 p 就表示数组a的起始地址,而&p是存储数组a的起始地址的那个地址。 这是因为编译器把a当成数组首地址,而&a当作数组第一个元素的地址,因此得到的值是一样的。 另外,sizeof(a)得到的是a所表示的数组的大小,而sizeof(p)得到的是指针的大小。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    嵌入式大杂烩 指针 数组 编译器

  • 精诚合作,魏德米勒连续两年被川开电气评为“最佳合作伙伴”!

    精诚合作,魏德米勒连续两年被川开电气评为“最佳合作伙伴”!

    凭借稳定的产品供应,高契合度的解决方案支持,工业联接专家魏德米勒被川开电气评为2020年度“最佳合作伙伴”,这是魏德米勒连续两年获得川开电气的此项殊荣! 川开电气是优秀的整体输配电解决方案供应商,旨在以稳定的输配电点亮美好生活。该企业对合作伙伴有着严苛的要求,产品技术先进、服务优质、售后及时等等,都是其衡量优秀供应商的标准。 魏德米勒通过提供具备高利用率、低维护、强性能,高安全性等众多优势的各种产品及解决方案,持续助力川开电气。在双方多年的合作中,凭借良好的沟通、及时的服务以及符合客户要求的产品供应,魏德米勒在每一方面的卓越表现都赢得了川开电气的高度信任。同时,2020年疫情期间,在川开电气为武汉雷神山医院提供的输配电设备中,魏德米勒产品也应用其中,双方的密切配合,为此次疫情做出了重要贡献。 此次最佳供应商的获得,既是对魏德米勒的再次肯定,也是未来双方持续精诚合作的新起点。新的一年,魏德米勒将持续创新,把握客户需求,继续以智能化、数字化的联接解决方案为合作伙伴赋能!

    魏德米勒 魏德米勒 川开电气 最佳合作伙伴

  • 专于机械,告别“凡学”——魏德米勒发布紧凑型重载连接器新品

    专于机械,告别“凡学”——魏德米勒发布紧凑型重载连接器新品

    说起传统重载连接器(Heavy Duty Connector,简称HDC),首先会想到的就是它厚重的外壳和坚固的接口,用现在最流行的“凡尔赛体”来说是这样的:“今天也没人碰我,500次插拔寿命咋都用不掉,无敌可能就是寂寞吧,我懂。” “今天阳光正好,有点想念被前几天被盐雾腐蚀的日子啦。” “厂商又给我配车削圆形插针了,虽贵且没用,但这就是奢侈品的意义吧。” 的确,起源于上世纪50年代火车车厢连接需求定制开发的重载连接器,凭借其高可靠性和坚固耐用的特性在工业上得到了广泛应用。但时至今日,重载连接器的应用环境已经发生了改变,在多数机械设备的连接场景,传统重载连接器的设计已经过于浪费了。 “凡学”?还是设计过剩? 在早期的机械设备市场中,HDC的接插需求应用,也都借鉴了火车的HDC产品,并普遍沿用至今。 但一直以来,机械市场上很多HDC产品的匹配度和性价比却不尽人意,这也是行业差距带来的问题。拿火车轨交行业的设备来说,他们的应用环境比机械设备要求高很多,很多的重载连接器所满足的参数,大幅超出了机械设备的要求,例如: ●为满足轨道高振动要求配备的昂贵的车削圆形插针; ●车厢或火车设备长期频繁更换要求的500次高插拔寿命; ●火车在户外的恶劣环境要求的宽温范围、耐长时间盐雾腐蚀以及高IP防护; ●路轨运行中应对石块意外撞击要求的耐冲击性等… 但机械应用的条件并没有如此苛刻,这也就意味着,客户必须付出额外的成本,来购买这些设计相对过剩的产品。与其说是“凡尔赛”,不如说是设计过剩导致的结果。 专为机械连接而生,新品来了! 难道就没有量身定制,性价比更高的HDC吗?魏德米勒就不信“凡学”的那一套,在深度了解机械市场客户的痛点后,化繁为简,魏德米勒在近期发布了全新紧凑型重载连接器。这是一款魏德米勒在全球首发的针对机械客户需求,精心设计的专利性产品。 首先,它用满足机械振动要求的簧片插针,取代了昂贵的车削圆形插针;用满足50次插拔的镀锡簧片,取代满足的500次高插拔要求的镀银圆针。值得一提的是,新品尺寸比传统HDC减少20%,节省了客户面板安装空间、车用级铝材外壳,用于满足机械应用中的意外跌落等撞击需求。魏德米勒通过调整严苛参数,用更合理的设计满足机械客户的应用需求。 操作安全方面,其获得专利的独立接地点布置在外壳内,和金属壳直接导通,保护人身的电气安全。此外,固定螺钉数量还减少了一半,大大降低了安装的时间成本。 高性价比,告别“凡尔赛” 通过更适合机械用户的配置参数、部件原材料的调整,魏德米勒解决了HDC的设计过剩问题,告别了冗余的“凡学”,相对地售价也更具吸引力,让客户再也不需为多余性能花费更多的成本。正是专业的量体裁衣,打造了这样一款高性价比的即插即用连接方案。 作为工业级接插件,产品的可靠性是重中之重,相较市场上传统的HDC产品,魏德米勒全新紧凑型HDC不仅毫不逊色,优势也很明显,高性能集中体现在采用德国进口并具备50年工业应用沉淀的欧力美接插件、现场即插即用功能的实现、固定和安装的优化、全生命周期管理的覆盖等方面,将安心与便利送至每一位客户身边。 在客户体验方面,本产品有顶出与侧出两种型号可供选择,魏德米勒还可提供套件订货服务,从而简化客户的库存管理。高效、方便、可靠——魏德米勒新品紧凑型重载连接器现已登陆机械应用市场,设计不冗余、不过剩,专于机械,带你告别“凡学”!

    魏德米勒 连接器 重载连接器 魏德米勒

发布文章