摩登3咨询:_关于现场总线技术,这篇文章我想推荐给你~

PROCENTEC等行业专家的数据显示,采用基于RS-485现场总线技术(PROFIBUS®)的应用在持续增长,工业以太网(PROFINET)应用也在快速增长。2018年,全球共安装6100万个PROFIBUS现场总线节点,PROFIBUS过程自动化(PA)设备同比增长7%。PROFINET安装基数为2600万个节点,仅2018年安装的器件数量就达到5100万。 随着RS-485现场总线采用率的稳定增长,同时工业4.0加快了智能互联工厂的发展,我们需要确保不断优化现场总线技术,为智能系统提供支持。经过优化的现场总线技术必须仔细权衡EMC稳定性和数据传输可靠性这两个因素。 不可靠的数据传输会降低整体系统性能。在运动控制应用中,现场总线一般用于对单轴或多轴电机实施闭环位置控制。这些电机一般处于高数据速率、长电缆传输线状态,如图1所示。如果位置控制不可靠,那么实际性能会下降,次品率上升,进而导致工厂生产率降低。在无线基础设施应用中,现场总线一般用于对天线实施倾斜度/位置控制,因此准确的数据传输至关重要。在运动控制和无线基础设施应用中,需要提供不同级别的EMC保护,具体如图1所示。运动控制应用通常处于电噪声环境中,这可能导致数据误差。对于无线基础设施,则必须为其提供保护措施,避免在裸露的环境中间接遭受雷击损坏。 图1. RS-485的EMC、数据速率和电缆长度要求。 对于这些要求严苛的应用,需要仔细检查RS-485收发器的电缆时序性能,以确保系统可靠性和EMC特性。本文将介绍几个重要的系统时序和通信电缆概念;阐述一些关键性能指标,包括时钟和数据分配、电缆驱动能力;并展示使用下一代ADM3065E/ADM3066E RS-485收发器为工业应用带来的优势。 时序性能 为了在高数据速率下通过长电缆实现可靠的数据传输,必须考虑影响RS-485的一些重要因素,例如通常与低压差分信号(LVDS)有关的抖动和偏斜等时序性能概念。RS-485收发器和系统电缆造成的抖动和偏斜都需要考虑。 抖动和偏斜 抖动可以量化为时间间隔误差;即信号跃迁的预期到达时间和实际到达时间之间的差值。在通信链路中,有多种因素会导致抖动。基本上,每种导致抖动的因素都可以描述为是随机或确定性的。随机抖动可以通过高斯分布描述,一般源于半导体内部的热噪声和宽带散射噪声。确定性抖动则来自通信系统内部;例如,占空比失真、串扰、周期性外部噪声源或码间干扰。对于使用 RS-485标准的通信系统,数据速率低于100 MHz,确定性抖动更明显。 峰峰值抖动是衡量确定性来源产生的系统抖动总体性能的有用指标。其可以在时域中测量,具体是通过在同一显示屏上叠加大量信号跃迁(一般被称为眼图)。使用无限持续的示波器显示屏或者使用示波器的内置抖动分解软件来实现,如图2所示。 图2. 时间间隔误差、抖动和眼图。 重叠跃迁的宽度为峰峰抖动,中间的空白区域称为眼。这个眼是接收节点在RS-485长电缆的远端可以采样的区域。眼宽越大,接收节点可以采样的窗口越宽,且可以降低错误接收位的风险。可用眼主要受来自RS-485驱动器和接收器,以及互联电缆的确定性抖动影响。 图3显示通信网络中造成抖动的各种来源。在基于RS-485的通信系统中,影响时序性能的两大因素是收发器脉冲偏斜和码间干扰。脉冲偏斜也称为脉冲宽度失真或占空比失真,是收发器在发射和接收节点产生的一种确定性抖动。脉冲偏斜定义为信号上升沿和下降沿之间的传输延迟差值。在差分通信中,这种偏斜会产生不对称交越点,并且发送0s和1s的持续时间不匹配。在时钟分配系统中,过度的脉冲偏斜表现为发射时钟的占空比失真。在数据分配系统中,这种不对称会增加眼图中显示的峰峰抖动。在这两种情况下,过度的脉冲偏斜会对通过RS-485传输的信号产生不利影响,且会降低可用的采样窗口和整个系统的性能。 图3. RS-485通信网络中造成抖动的主要因素。 当信号沿的到达时间受到处理该信号沿的数据模式影响时,会发生码间干扰(ISI)。对于采用长电缆互联的应用,码间干扰效应变得越来越明显,使其成为影响RS-485网络的关键因素。更长的互联会产生RC时间常数,其中电缆电容在单个位周期结束时没有充满电。在发射数据只由时钟组成的应用中,不存在这种码间干扰。码间干扰也可能由电缆传输线上的阻抗不匹配(因为短截线或终端电阻使用不当)引起。具备高输出驱动能力的RS-485收发器一般可以帮助最大限度降低码间干扰效应,因为它们对RS-485电缆负载电容充电时所需的时间更短。 峰峰抖动容差的百分比与应用高度相关,一般使用10%抖动作为衡量RS-485收发器和电缆性能的基准。过度抖动和偏斜会影响接收端RS-485收发器的采样性能,增大发生通信错误的风险。在正确端接的传输网络中,选择经过优化的收发器,以最大限度降低收发器脉冲偏斜和码间干扰效应,才能实现更可靠、无错的通信链路。 RS-485收发器设计和电缆影响 TIA-485-A/EIA-485-A RS-485标准提供了RS-485发射器和接收器的设计和操作范围相关规范,包括电压输出差分(VOD)、短路特性、共模负载、输入电源阈值和范围。TIA-485-A/EIA-485-A标准未规定RS-485的时序性能(包括偏斜和抖动),由IC供应商根据产品数据手册规格进行优化。 其他标准,例如TIA-568-B.2/EIA-568-B.2双绞线电信标准提供了电缆交流和直流影响RS-485信号质量的背景。此标准提供了抖动、偏斜和其他时序测量的相关考量和测试程序,并设置了性能限值;例如,5e电缆允许的最大偏斜为45 ns/100 m。ADI应用笔记 AN-1399 详细探讨了TIA-568-B.2/EIA-568-B.2标准,以及使用非理想电缆对系统性能的影响。 虽然可用标准和产品数据手册提供了很多有用信息,但任何有意义的系统定时性能表征都需要在长电缆上测量RS-485收发器的性能。 使用RS-485实现更快速、更广泛地通信 ADM3065E RS-485收发器具备超低的发射器和接收器偏斜性能,所以非常适合用于传输精密时钟,通常采用电机编码标准。事实证明,ADM3065E在电机控制应用中采用典型电缆长度的确定性抖动小于5%(图4和图5)。ADM3065E具有较宽的电源电压范围,因此这种时序性能水平也可用于需要3.3 V或5 V收发器电源的应用。 图4. ADM3065E的典型时钟抖动性能。 图5. ADM3065E接收眼图:分布在100 m电缆上的25 MHz时钟。 除了出色的时钟分配,ADM3065E时序性能还支持实现可靠的数据分配,以及高速输出和最少的附加抖动。图6显示,通过使用 ADM3065E,RS-485数据通信的时序限制会大大放宽。标准RS-485收发器的抖动通常为10%或更低。ADM3065E可以在长达100米的电缆上以20 Mbps以上的速度运行,并且仍然可以在接收节点保持10%的抖动。这种低水平抖动降低了接收数据节点错误采样的风险,可实现使用典型的RS-485收发器无法实现的传输可靠性。对于接收节点可以容忍高达20%抖动的应用,可以在100米电缆内实现高达35 Mbps的数据速率。 图6. ADM3065E接收数据节点具有出色的抖动性能。 这种时序性能使ADM3065E成为电机控制编码器通信接口的理想选择。对于使用EnDat 2.2编码器协议传输的每个数据包,数据传输都与时钟下降沿同步。图7显示,对绝对位置(TCAL)进行初始计算后,起始位开始将数据从编码器传输回主控制器。随后的错误位(F1,F2)表明了当编码器引起的故障错误的具体位置。然后,编码器发送一个绝对位置值,以LS开头,后接数据。时钟和数据信号的完整性对于通过长电缆能否成功发送定位和错误信号至关重要,EnDat 2.2指定最大抖动为10%。这是EnDat 2.2指定采用20米电缆、16 MHz时钟速率时的最高抖动要求。图4显示,ADM3065E能够满足此要求,时钟抖动仅5%,图6显示ADM3065E能够满足数据传输抖动要求,但标准RS-485收发器不能满足。 图7. 时钟/数据同步的EnDat 2.2物理层和协议(基于EnDat 2.2图表实施调整)。 ADI公司对ADM3065E收发器出色的电缆时序性能进行表征,确保系统设计人员掌握必要的信息,以便成功开发符合EnDat 2.2规格要求的设计。 更长电缆通信实现更高可靠性 TIA-485-A/EIA-485-A RS-485标准要求采用合规的RS-485驱动器,在满负载网络中产生至少1.5 V的差分电压幅值VOD。这个1.5 VOD允许在长电缆内发生1.3 V直流电压衰减,而RS-485接收器要求以至少200 mV输入差分电压工作。ADM3065E用于在提供5 V供电时输出至少2.1 V 的VOD,此情况已经超出了RS-485规范要求。 满负载RS-485网络相当于54 Ω差分负载,该负载模拟双端接总线,包含2个120 Ω电阻,另外750 Ω则由32个1单位负载(或12 kΩ)连接器件构成。ADM3065E采用专有的输出架构,可在满足共模电压范围要求的同时最大化VOD,并超越了TIA-485-A/EIA-485-A的要求。图8显示,ADM3065E在使用3.3 V电轨供电时,产生的驱动力超过RS-485标准要求>210%,而采用5 V电轨供电则超过>300%。这扩大了ADM3065E系列的通信范围,相比常规的RS-485收发器,支持更多远程节点和更高的噪声容限。 图8. ADM3065E在广泛电源范围内的性能表现均超越了RS-485驱动器要求。 图9通过1000米电缆的典型应用性能,进一步说明了这一点。通过标准AWG 24电缆通信时,ADM3065E的性能比标准的RS-485收发器高 30%—接收节点上的噪声容限高30%,或者在低数据速率下,最大电缆长度增加30%。这种性能非常适合RS-485电缆长达数百米的无线基础设施应用。 图9. ADM3065E能够为超长距离应用提供出色的差分信号。 EMC保护和抗扰度 RS-485信号采用平衡差分式传输,本身就具有一定的抗干扰能力。系统噪声均等地耦合到RS-485双绞线电缆中的每条导线。双绞线使产生的噪声电流沿相反方向流动,与RS-485总线耦合的电磁场相互抵消。这降低了系统的电磁敏感性。此外,ADM3065E增强的2.1 V驱动强度支持在通信中实现更高的信噪比(SNR)。在长电缆传输中,例如地面和无线基站天线之间的距离长达几百米,具备增强的SNR性能和出色的信号完整性可以确保对天线实施准确、可靠的倾斜/位置控制。 图10. 无线基础设施的电缆长度可能超过几百米。 结论 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册网址_编写 if 时不带 else,你的代码会更好!

来源:翻译自:Nicklas Millard的文章《Better Software Without If-Else》 设计更好的软件,替换If-Else的5种方法。入门到高级示例 “ 让我直接说这句话:If-Else通常是一个糟糕的选择。 ” 它导致设计复杂,代码可读性差,并且可能导致重构困难。 但是,If-Else已成为事实上的代码分支解决方案,这确实是有道理的。这是向所有有抱负的开发人员讲授的第一件事。不幸的是,许多开发人员从来没有前进到更合适的分支策略。 有些人的口头禅是:If-Else是一把锤子,一切都是钉子。 无法区分何时使用更合适的方法是区分大三学生和大三学生的原因之一。 我将向您展示一些技巧和模式,这些技巧和模式将终结这种可怕的做法。 每个示例的难度都会增加。 1 完全不必要的Else块 这也许是那些初级开发人员最负罪的之一。下面的示例很好地说明了当您被认为If-Else很棒时会发生什么。 > Simple if-else 只需删除else`块即可简化此过程。 > Removed else 看起来更专业吧? 您会经常发现,实际上根本不需要其他块。像在这种情况下一样,您想要在满足特定条件的情况下执行某些操作并立即返回。 2 价值分配 如果您要根据提供的某些输入为变量分配新值,请停止If-Else废话-一种更具可读性的方法。 > Value assignment with if-else 尽管很简单,但它却很糟糕。首先,If-Else很容易在这里被开关取代。但是,我们可以通过完全删除else来进一步简化此代码。 > If statements with fast return 如果不使用else,则我们将剩下干净的可读代码。请注意,我也将样式更改为快速返回而不是单返回语句-如果已经找到正确的值,继续测试一个值根本没有意义。 3 前提条件检查 通常,我发现,如果方法提供了无效的值,则继续执行是没有意义的。假设我们从以前就有了DefineGender方法,要求提供的输入值必须始终为0或1。 > Method without value checks 在没有价值验证的情况下执行该方法没有任何意义。因此,在允许方法继续执行之前,我们需要检查一些先决条件。 应用保护子句防御性编码技术,您将检查方法的输入值,然后继续执行方法。 > Check preconditions with guard clauses 至此,我们确保仅在值落在预期范围内时才执行主逻辑。 现在,IF也已被三元代替,因为不再需要在结尾处默认返回”未知”。 4 将If-Else转换为字典—完全避免If-Else 假设您需要执行一些操作,这些操作将根据某些条件进行选择,我们知道以后必须添加更多操作。 也许有人倾向于使用久经考验的If-Else。如果添加新操作,则只需简单地添加其他内容即可。很简单 但是,就维护而言,这种方法不是一个好的设计。 知道我们以后需要添加新的操作后,我们可以将If-Else重构为字典。 可读性已大大提高,并且可以更轻松地推断出该代码。 注意,仅出于说明目的将字典放置在方法内部。您可能希望从其他地方提供它。 这是一个稍微高级的示例。 通过用对象替换它们,知道何时甚至完全消除If。 通常,您会发现自己不得不扩展应用程序的某些部分。作为初级开发人员,您可能会倾向于通过添加额外的If-Else(即else-if)语句来做到这一点。 举这个说明性的例子。在这里,我们需要将Order实例显示为字符串。首先,我们只有两种字符串表示形式:JSON和纯文本。在此阶段使用If-Else并不是什么大问题,如果我们可以轻松替换其他,只要如前所述即可。 知道我们需要扩展应用程序的这一部分,这种方法绝对是不可接受的。 上面的代码不仅违反了”打开/关闭”原则,而且阅读得不好,还会引起可维护性方面的麻烦。 正确的方法是遵循SOLID原则的方法-我们通过实施动态类型发现过程(在本例中为策略模式)来做到这一点。 重构这个混乱的过程的过程如下: 使用公共接口将每个分支提取到单独的策略类中 动态查找实现通用接口的所有类 根据输入决定执行哪种策略 替换上面示例的代码如下所示。是的,这是更多代码的方式。它要求您了解类型发现的工作原理。但是动态扩展应用程序是一个高级主题。 我只显示将替换If-Else示例的确切部分。如果要查看所有涉及的对象,请查看此要点。 让我们快速浏览一下代码。 方法签名保持不变,因为调用者不需要了解我们的重构。 首先,获取实现通用接口IOrderOutputStrategy的程序集中的所有类型。然后,我们建立一个字典,格式化程序的displayName的名称为key,类型为value。 然后从字典中选择格式化程序类型,然后尝试实例化策略对象。 最后,调用策略对象的ConvertOrderToString。 Nicklas Millard在丹麦的四大咨询公司之一中担任高级技术顾问。他主要担任客户项目的首席开发人员和解决方案架构师。 他一直在为商业客户和政府机构开发软件,例如国防部,教育部,丹麦环境与食品部,国家警察,丹麦劳动力市场和招聘局以及rstad。 在LinkedIn上连接 (本文翻译自Nicklas Millard的文章《Better Software Without If-Else》,参考:https://medium.com/swlh/5-ways-to-replace-if-else-statements-857c0ff19357) 长按订阅更多精彩▼ 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测试路线_面试求职必胜法宝

大家好,我是光城,目前研三,在秋招提前批中拿到不低于5个offer,有3个是ssp的offer,几个sp的,当然还有一些是白菜,同时也有很多是失败的,在找工作期间,没有太多的时间去反思与成长,我的秋招开始于5/6月份字节最早那一批,那时候还在鹅厂实习,在整个秋招提前批阶段根本没有太多的时间去做充足的准备,说的比较直白一点大部分厂的面试是裸面的,所以一些通过的算是之前的实力+运气成分吧,没有通过的有自己实力不足与其他方面原因。 找工作,我们可以在做好相关的备战工作,以至于不会在找工作的时候无头苍蝇,不知道复习什么,该怎么准备等。举个很现实的例子:我第一次面试字节的时候,根本不知道怎么准备,例如:算法?考啥算法?操作系统?深度是什么样子呢?像这些问题如果准备的很短,其实面试官是可以直戳泪点的,相信一些失败的同学肯定遇到过。下面我将聊一聊自己面试中的一些经验谈吧。 1.早投递,占据时间优势 这一点是非常重要的,当大家看到跟自己的岗位匹配时,应当先思考一下自己的实力,觉得不行就可以放弃了,其实我想说,如果这次投递不走系统,可以直接投递了,例如:走朋友或同学内推渠道,那么你可以不走系统面试,不管通过不通过,这一点来说你已经比很多人占据了时间优势。今年因为疫情影响,大多公司采用线上面试,不同公司的秋招提前批有时候等价于以往的提前批,如果错过了,那就有可能放弃了进入这家公司的机会!如果自己实力不算太差,有记录的情况下可以直接投递了,如果自己实力很差,没记录情况下也可以直接投递了,占据投递时间因素也是一种机会。 2. 针对性复习 在面试过60+场的面试中,我个人觉得算法+计算机基础便可以拿到不错的工作,面试当中记录一些不会的或者知识盲点,针对性的复习,效果往往很好,算法也是这样,不同公司算法是有重合度的,大部分来自剑指offer与leetcode,leetcode300道绝对够面试了,面试的时候套算法思路,跟面试官交流互动,当然还有一些实践性的代码,例如:手撕线程安全的单例、手撕多线程安全代码、手撕智能指针等等,像这些实则考察你的代码基本功,如果提前准备好,那面试可谓是送offer的。 认真把握每场面试机会,多记录与总结,同时可以在牛客上看到自己面试公司的题目,可以认真刷一下,例如:我当时去面字节,就看了别人整理的字节题目,简直牛逼爆炸,面试基本原题。 3.沟通的技巧 相信很多人会给求职者传递面试就是运气成分,可是你知道运气来自于哪里吗,其中之一在于沟通的技巧,在跟面试官沟通问题以及说话口吻方面要学习一下,不然很容易凉凉的,例如:一些问题自己不会要谦虚的请教或者学习等等的态度,让面试官认为你是一个热爱学习积极主动的人,而不是一个浮躁不堪的人。 简历是一个人的门面,里面应该比较针对性的应对自己应聘的岗位,而不是五谷杂粮,例如:你要应聘C++开发,你写了一堆Python项目,一堆测试项目,凸显不出自己的实力与能力,针对性的项目写在简历上,简历是一个很大的话题,后面将会详细阐述。 最后,许久不见,没有来跟大家及时分享一些学习及成长心得,期待大家督促及相互交流。 往期推荐 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册登录网_全国大学生智能汽车竞赛组委会技术研讨会在山东大学召开

今天,全国大学生智能车竞赛秘书处与来自全国二十多位长期参与竞赛组织、指导队伍参赛的一线高校教师在山东大学举行了为期一天的智能车竞赛技术研讨会。 在会上就即将开始的第十六届全国大学生智能汽车竞赛相关赛事组织工作进行了深入的探讨和交流。这为下周末举行的第十六届全国大学生智能汽车竞赛第一次扩大会议相关议题做好准备。 会议一开始听取了竞赛秘书处就新的一届竞赛筹备情况的介绍,包括竞赛赛题内容就绪情况、承办学校落实情况、赞助企业合作情况等。 接着展开了对新一届赛题内容的讨论。赛题分为竞速组别和人工智能提高组别两大类。 竞速组别本着面向本科工科学生知识范围,赛题内容难易有度、继承与创新兼顾,分别从车模平台、赛道元素、比赛任务、嵌入式控制平台等方面进行设计更新。 与会专家与竞赛秘书处逐一对于各项赛题细节进行讨论,完善赛题内容,去除不合理的要求,理清每个赛题考察的知识点和技能要求,使的赛题各具特色,适合不同阶段学生参赛。 相比于往届比赛,今年赛题最大的不同就是嵌入式微控制器平台可选的的种类更加的丰富。这也要求参赛同学在嵌入式系统学习与设计实践中,能够到达举一反三、融会贯通,根据系统具体进行硬软件的合理剪裁,这也体现了迅速发展的电子技术的特点。 为了帮助参赛同学更好的掌握核心单片机开发技术,竞赛组委会也将与合作企业技术人员做好相关硬件设计工具和软件开发平台的准备。汇总相关开发文档资料,制作技术学习视频课程,组织线上线下培训活动等,减少参赛同学在单片机学习中的壁垒。 在讨论竞速赛题之后,大家对AI创意组别的软件和硬件平台的选定进行了讨论。由于这个竞赛大类涉及到的算法复杂度、硬件平台的价格都较高。如何做到普及与提高相融、公平与激励兼顾等难题,大家积极献策,为竞赛秘书处与合作赞助企业之间更好的合作提供相应的方案。 会议还对竞赛组织流程的优化,比赛奖项的设置,竞赛相关培训课程开发,专科学校学生参赛赛题设置,留学生组队进入国赛条件进行了讨论。 特别是,参会老师还对近些年来竞赛实践过程中出现的一些不好的现象,比如存在个别弄虚作假现象等进行了梳理,并给出了相应对策建议,最大限度保障大赛的公平公正。 竞赛组委会将会在下周公布竞速组比赛规则草案,在吸收老师同学们反馈意见之后,于下周末在第十六届智能车竞赛第一次扩大会议中进行讨论,随后进行正式公布。人工智能提高组别的规则将会再晚几周进行公布。 最后,感谢这个周末参与竞赛技术研讨的各位老师辛勤的工作。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登三1960_如何判断电容好坏?

来源 | 电子电路 怎样测量小容量电容的好坏? 1、检测10pF以下的小电容,因10pF以下的固定电容器容量太小,如果用指针式用万用表进行测量,只能定性的检查其是否有漏电,内部短路或击穿现象。 测量时,可选用万用表R×10k挡,用两电表金属测棒分别任意接电容的两个接脚,阻值应为无穷大。若测出阻值(指标向右摆动)为零,则说明电容漏电损坏或内部击穿。 2、对于0.01μF以上的固定电容,可用指针式万用表的R×10k挡直接测试电容器有无充电过程以及有无内部短路或漏电,并可根据指针向右摆动的幅度大小估计出电容器的容量。 如何检测电解电容器好坏? 1、因为电解电容的容量较一般固定电容大得多,所以,测量时,应针对不同容量选用合适的量程。根据经验,一般情况下,1~47μF间的电容,可用R×1k挡测量,大于47μF的电容可用R×100挡测量。 2、将万用表红电表金属测棒接负极,黑电表金属测棒接正极,在刚接触的瞬间,万用表指针即向右偏转较大偏度(对于同一电阻挡,容量越大,摆幅越大),接着逐渐向左回转,直到停在某一位置。 此时的阻值便是电解电容的正向漏电阻,此值略大于反向漏电阻。实际使用经验表明,电解电容的漏电阻一般应在几百kΩ以上,否则,将不能正常工作。 在测试中,若正向、反向均无充电的现象,即表针不动,则说明容量消失或内部断路;如果所测阻值很小或为零,说明电容漏电大或已击穿损坏,不能再使用。 3、对于正、负极标志不明的电解电容器,可利用上述测量漏电阻的方法加以判别。即先任意测一下漏电阻,记住其大小,然后交换电表金属测棒再测出一个阻值。 两次测量中阻值大的那一次便是正向接法,即黑电表金属测棒接的是正极,红电表金属测棒接的是负极。 4、使用万用表电阻挡,采用给电解电容进行正、反向充电的方法,根据指针向右摆动幅度的大小,可估测出电解电容的容量。 5、测电容放电的速度 用一个数字万用表搭在电容两端先充电然后开路量测电压掉下来的速度因为电容是开路的唯一会耗电的就是漏电流了如果你量测出电压跟时间的曲线就可以反推出漏电流了记得用好一点的数字万用表,因为万用表本身的输入阻抗再大也是有限的,如果是质量较好的电容漏电流本来就不大,那么输入阻抗稍小的数字万用表就不准了。 6、注意!测量较大容量电容时如需要正负来回测量,要将电容短路放电,以免打坏表头。 根据经验,在高频电路,开关电源电路有很多小电容是普通万用表无法正确判断出好坏的,有的电容量还有可能出现增加的可能。强烈建议用专用数字电容表测量。 ———— END ———— C语言实现面向对象的原理 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3娱乐登录地址_优秀!一鼓作气学会“一致性哈希”,就靠这18张图了

前言 当架构师大刘看到实习生小李提交的记账流水乱序的问题的时候,他知道没错了:这一次,大刘又要用一致性哈希这个老伙计来解决这个问题了。 嗯,一致性哈希,分布式架构师必备良药,让我们一起来尝尝它。 1. 满眼都是自己二十年前的样子,让我们从哈希开始 在 N 年前,互联网的分布式架构方兴未艾。大刘所在的公司由于业务需要,引入了一套由 IBM 团队设计的业务架构。 这套架构采用了分布式的思想,通过 RabbitMQ 的消息中间件来通信。这套架构,在当时的年代里,算是思想超前,技术少见的黑科技架构了。 但是,由于当年分布式技术落地并不广泛,有很多尚不成熟的地方。所以,这套架构在经年日久的使用中,一些问题逐渐突出。其中,最典型的问题有两个: RabbitMQ 是个单点,它一坏掉,整个系统就会全部瘫痪。 收、发消息的业务系统也是单点。任何一点出现问题,对应队列的消息要么无从消费,要么海量消息堆积。 无论哪种问题,最终是整套分布式系统都无法使用,后续处理非常麻烦。 对于 RabbitMQ 的单点问题,由于当时 RabbitMQ 的集群功能非常弱,普通模式有 queue 本身的单点问题,所以,最终使用了 Keepalived 配合了两台无关系的 RabbitMQ 搞出了高可用。 而对于业务系统单点问题,从一开始着手解决的时候就出现了波折。一般来说,我们要解决单点问题,方法就是堆机器,堆应用。收发是单点,我们直接多部署几个应用就可以了。如果仅仅从技术上看,无非就是多个收发消息的应用大家一起竞争往 MQ 中放消息拿消息而已。 但是,恰恰就是在把收发消息的应用集群化后,系统出现了问题。 本身这套系统架构会被应用到公司的多类业务上,有些业务对消息的顺序有着苛刻的要求。 比如,公司内部的 IM 应用,不管是点对点的聊天还是群聊消息,都需要对话消息严格有序。而当我们把生产消息和消费消息的应用集群化后,问题出现了: 聊天记录出现了乱序 A 和 B 对话,会出现某些消息没有严格按照 A 发出的先后顺序被 B 接收,于是整个聊天顺序乱成了一锅粥。 经过排查,发现问题的根源就在于应用集群上。由于没有对应用集群收发消息做特殊的处理,当 A 发出一条聊天信息给B时,发送到 RabbitMQ 中的信息会被在 B 处的消费端所争抢。如果 A 在短时间内发出了几条信息,那么就可能会被集群中的不同应用抢走。 这时候,乱序的问题就出现了。虽然应用业务逻辑是相同的,但是这些集群中的应用依然可能在处理信息速度上出现差异,最终导致用户看到的聊天信息错乱。 问题找到了,解决办法是什么? 上面我们说过了,消息顺序错乱是因为集群中不同应用抢消息然后处理速度不一样导致的。如果我们能保证 A 和 B 会话,从开始之后到会话结束之前,永远只会被 B 所在的消费消息集群应用中的同一个应用消费,那么我们就能保证消息有序。这样一来,我们就可以在消费消息的那个应用中,对抢到的消息进行排队,然后依次处理。 那么,这种保证怎么实现呢? 首先,我们在 RabbitMQ 中会建立有相同前缀的队列,后面跟着队列编号。然后,集群中的不同应用会分别监听这两个有着不同编号的队列。当在 A 发送信息时,我们会对信息做一次简单的哈希: m = hash(id) mod n 这里,id 是用户的标识。n 是集群中 B 所在业务系统部署的数量。最终的 m 是我们需要发送到的目的队列编号。 假设,hash(id) 的结果为 2000,n 为 2,经过计算 m = 0。此时,A 就会把他和 B 的对话信息都发送到 chat00 的队列里。B 收到消息后,就会依次显示给终端用户。这样,聊天乱序的问题就解决了。 那么,事情到此就结束了吗?这个解决方案是完美的吗? 2. 看来,我们需要增加应用数量了 随着公司的发展,公司的人数也急剧上升,公司内部的 IM 使用人数也跟着多了起来,新问题又随之出现了。 最主要的问题是,人们收到聊天信息的速度变慢了。原因也很简单,收取聊天信息的集群机器不够用了。解决办法可以简单直接点,再加台机器就好了。 不过,由于收消息的集群中新加入了一台机器,这时候,我们还需要额外多做一些事情: 我们需要为新加入的这台机器上的应用额外再多增加一个队列 chat02。 我们还需要修改下我们的分配消息的规则,把原来的 hash(id) mod 2 修改为 hash(id) mod 3。 重新启动发送消息的项目,以便修改的规则生效。 把收消息的应用部署到新机器上。 到这时,一切还都在可控范围。开发人员只需要在需要的时候,新增加个队列,然后把我们的分配规则小小的修改下即可。 但是,他们不知道的是,暴风雨就要来了。 3. 新的问题来了,也许这就是人生吧…

摩登3平台注册登录_FreeRTOS中相对延时和绝对延时的区别

作者 | strongerHuang 微信公众号 | 嵌入式专栏 嵌入式软件代码中延时是很常见的,只是延时种类有很多,看你用什么延时。 1 一个延时的问题 问题:周期性(固定一个时间)去处理某一件事情。你会通过什么方式去实现? 比如:间隔10ms去采集传感器的数据,然后通过一种算法计算出一个结果,最后通过串口发送出去。 可能对于很多习惯裸机编程的读者,首先想到的是:利用定时器,定时10ms中断,在中断里面处理。 中断函数适合处理简单数据,不适合算法、通信等需要长时间占用CPU的处理。 对计时精度要求比较高的地方适合定时器,像本章节说的周期性采集传感器数据,要求不适合很高,那么就引入本文说的绝对延时。 在实时操作系统FreeRTOS任务中,利用vTaskDelayUntil绝对延时即可完美解决这个问题。 2 相对延时和绝对延时的含义 本文拿FreeRTOS中相对延时函数vTaskDelay,绝对延时函数vTaskDelayUntil来说明。 相对延时: 指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间(参数:滴答值)结束。 绝对延时: 指每隔指定的时间(参数:滴答值),执行一次调用vTaskDelayUntil()函数的任务。 文字描述可能不够直观理解,下面章节结合代码例子、延时值(IO高低变化波形)、任务执行图来详细讲述一下他们的区别。 3 相对延时和绝对延时区别 以实际代码为例说明:一个任务中,添加一个10ms系统延时,然后,在执行任务(耗时1ms左右,例子以延时代替)。 相对延时代码: 绝对延时代码: 说明: 1. TestDelay这个延时函数仅仅用于测试(延时1ms),用于代替采集、算法、发送等耗时时间。 2. 两个代码唯一区别在于系统延时不同,一个vTaskDelay(10);,一个vTaskDelayUntil(&xLastWakeTime, 10); 3. 系统时钟频率为1000,也就是上面系统延时10个滴答,即10ms。 看到代码,你想到了他们输出结果的差异吗? 来看下结果的差异:用PA0这个引脚输出的高低电平,得出延时时间。 相对延时结果: 绝对延时结果: 结果为: 相对延时的周期为系统延时10ms + 执行任务1ms的时间,总共11ms时间。绝对延时的周期即为10ms时间. 4 换一种方式看区别 如果上面的区别还没明白,再来讲一个更容易理解的区别,通过文字 + 任务执行图来说明。 1.相对延时 先看任务执行图,按照上面代码的方式呈现: 这里会牵涉到操作系统任务切换、高优先级任务抢占等一些原理,若不了解,请转移直到了解再回来。 上电,TEST任务进入延时(阻塞)状态,此时系统执行其他就绪任务。FreeRTOS内核会周期性的检查TEST任务的阻塞是否达到,如果阻塞时间达到,则将TEST任务设置为就绪状态,如果就绪任务中TEST任务的优先级最高,则会抢占CPU,再次执行任务主体代码,不断循环。 TEST任务每次系统延时都是从调用延时函数vTaskDelay()开始算起的,所以叫相对延时。 从上图可以看出: 如果执行TEST任务的过程中发生中断,或者具有更高优先级的任务抢占了,那么TEST任务执行的周期就会变长,所以使用相对延时函数vTaskDelay(),不能周期性的执行TEST任务。 2.绝对延时 代码中定义的变量xLastWakeTime,其实是用来保存上一次的系统计数器值(方便检测下一个延时时间是否到来)。 和上面相对延时程序执行图比较,可以看出,系统延时的时间包含了程序执行的时间。即时中途有中断,或更高优先级任务打断,不会影响下一次执行的时间(也就是这个周期不会变,当然,打断时间不能超过系统延时值)。 提示: 图片中添加了一段话:一般来说,程序执行时间要小于总间隔时间(10ms)。 如果打断时间太长,回来之后延时都超过了,则会立马执行程序,不会再延时(任务不会再阻塞延时)。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3娱乐怎么样?_深度剖析不一样的Redis架构设计

–      01、不一样的Redis    – 提到Redis,大家一定会想到的几个点是什么呢? 高并发、KV存储、内存数据库、丰富的数据结构、单线程(版本6之前)等。 那么,接下来,上面提到的这些,都会一一给大家解答,带大家系统剖析一下Redis的架构设计魅力! –      02、为什么会出现缓存?    – 一般情况下,数据都是在数据库中,应用系统直接操作数据库。当访问量上万,数据库压力增大,这个时候,怎么办呢? 有小伙伴会说,分库分表、读写分离。的确,这些确实是解决比较高的访问量的解决办法,但是,如果访问量更大,10万,100万呢?怎么分似乎都不解决问题吧,所以我们需要用到其他办法,来解决高并发带来的数据库压力。 这个时候,缓存出现了,顾名思义,就是先把数据缓存在内存中一份,当访问的时候,我们会先访问内存的数据,如果内存中的数据不存在,这个时候,我们再去读取数据库,之后把数据库中的数据再备份一份到内存中,这样下次读请求过来的时候,还是会直接先从内存中访问,访问到内存的数据了之后就直接返回了。这样做就完美的降低了数据库的压力,可能十万个请求进来,全部都访问了内存中备份的数据,而没有去访问数据库,或者说只有少量的请求访问到了数据库,这样真的是大大降低了数据库的压力,而且这样做也提高了系统响应,大家想一下,内存的读写速度是远远大于硬盘的读写速度的,一个请求进来读取的内存可以比读取硬盘快很多很多,用户的体验也会很高。 –      03、什么是缓存?    – 缓存原指CPU上的一种高速存储器,它先于内存与CPU交换数据,速度很快。 现在泛指存储在计算机上的原始数据的复制集,便于快速访问。 在互联网技术中,缓存是系统快速响应的关键技术之一。 –      04、缓存的三种读写模式    – 1、Cache Aside Pattern(常用) Cache Aside Pattern(旁路缓存),是最经典的缓存+数据库读写模式。 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。 更新的时候,先更新数据库,然后再删除缓存。 为什么是删除缓存,而不是更新缓存呢? 1、缓存的值是一个结构,hash、list等更新数据需要遍历; 2、懒加载,使用的时候才更新缓存,也可以采用异步的方式填充缓存。 高并发脏读的三种情况: 1、先更新数据库,在更新缓存; update与commit之间,更新缓存,commit失败,则DB与缓存数据不一致。 2、先删除缓存,再更新数据库 update与commit之间,有新的读,缓存空,读DB数据到缓存,数据是旧的数据; commit后DB为新的数据; 则DB与缓存数据不一致。 3、先更新数据库,再删除缓存(推荐) update与commit之间,有新的读,缓存空,读DB数据到缓存,数据是旧的数据; commit后DB为新的数据; 则DB与缓存数据不一致; 采用延时双删策略。 2、Read/Write Through Pattern 应用程序只操作缓存,缓存操作数据库; Read-Through(穿透读模式/直读模式):应用程序读缓存,缓存没有,由缓存回源到数据库,并写入缓存; Write-Through(穿透写模式/直写模式):应用程序写缓存,缓存写数据库。该种模式需要提供数据库的handler,开发较为复杂。 3、Write Behind Caching Pattern 应用程序只更新缓存; 缓存通过异步的方式将数据批量或合并后更新到DB中,不能时时同步,甚至会丢数据。 –      05、Redis又是什么?    – Redis是一个高性能的开源的,C语言写的NoSQL(非关系型数据库)也叫做缓存数据库,数据保存在内存中。Redis是以key-value形式存储,和传统的关系型数据库不一样。不一定遵循传统数据库的那些基本要求。比如,不遵循SQL标准、事务、表结构等。Redis有非常丰富的数据类型,比如String,list,set,zset,hash等。 –      06、Redis可以做什么?    – 1、减轻数据库压力,提高并发量,提高系统响应时间 2、做Session分离 传统的Session是由自己的tomcat进行维护和管理的,在集群和分布式情况下,不同的tomcat要管理不同的session,只能在各个tomcat之间,通过网络和IO进行session复制,极大的影响了系统的性能。 Redis解决了这一个问题,将登陆成功后的session信息,存放在Redis中,这样多个tomcat就可以共享Session信息。 3、做分布式锁 一般Java中的锁都是多线程锁,是在一个进程中的,多个进程在并发的时候也会产生问题,也要控制时序性,这个时候Redis可以用来做分布式锁,使用Redis的setnx命令来实现。 4、电商购物车: 1、以用户id为key 2、商品id为field 3、商品数量为value 电商购物车操作: 1、添加商品:hset cart:1001 10088 1 2、增加数量:hincrby cart:1001 10088 1 3、商品总数:hlen cart:1001 4、删除商品:hdel cart:1001 10088 5、获取购物车所有商品:hgetall cart:1001 5、zset集合操作实现排行榜 1、点击新闻 ZINCRBY hotNews:20190819 1 守护香港 2、展示当日排行前十 ZREVRANGE hotNews:20190819 0 9 WITHSCORES 3、七日搜索榜单计算…

摩登3娱乐怎么样?_精彩回顾 | 速览蓝牙AoA技术,围观室内定位市场!

本文来源:深圳市物联网产业协会 11月13日丨下午 由深圳市科学技术协会主办,深圳市物联网产业协会承办的以“蓝牙AoA技术与市场分析”为主题的《自主创新大讲堂—星火沙龙之物联网产业大讲堂系列活动(10场)》,在深圳市南山区东方科技大厦22楼成功开讲。 现场共吸引了近30位物联网领域专业的技术研发人员前来交流学习。 图丨讲座现场 主讲嘉宾|吴川博士 图丨吴川博士(蓝色衬衫) 本期讲座主讲嘉宾吴川博士毕业于复旦大学微电子专业,曾在全球前十大Fabless芯片设计企业担任高级工程师、主任工程师等核心技术管理岗位,现任上海磐启微电子副总经理,全面负责多项高新核心技术产品研发管理。 吴川博士长期从事高性能通信系统的研究,包括低功耗高灵敏度数字调制解调系统、高带宽可重构的软件无线电设计、基于MIMO多天线阵列技术的通信系统、高带宽高性能卫星通信系统及多天线阵列的室内定位系统等。 图 | 参会嘉宾现场交流 本讲课程,吴老师就蓝牙AoA高精度室内定位技术的原理、技术难点及解决方案、应用场景和未来发展趋势等主题进行专题分享与讨论。 吴老师从室内定位的市场背景入手,从室内定位技术的概述开始讲起,介绍了“蓝牙AOA室内定位的原理、系统、相关特点和蓝牙AOA室内定位的典型应用场景”;着重强调并分享了“蓝牙AOA室内定位中需要特别留意的关注点”。 图丨讲座现场 市场规模丨将以42.0%的年复合成长率增长 随着物联网及人工智能发展,市场对定位技术的需求急剧增加,基于位置服务(LBS)渗透人们生活的各个方面。据Market&Markets的调查数据显示,未来几年,室内定位的全球市场将以42.0%的年复合成长率增长,市场规模预计从2017年的71亿1000万美元扩大到2022年的409亿9000万美元。 图丨来源于Market&Markets 主流室内定位丨基于传感器及基于无线技术 事实上,室内定位并不是一门新兴的技术,人们一直在探索各种技术在室内定位应用领域的可行性,主流的室内定位技术大概可以分为基于传感器定位和基于无线技术定位。 供图丨上海磐启微电子 基于传感器的室内定位技术包括惯性定位、计算机视觉定位、LED定位等。 基于无线技术的室内定位技术包括RFID定位、蓝牙Beacon定位、WiFi定位、UWB定位、蓝牙AoA定位等。 吴川博士针对基于无线的室内定位技术进一步展开了说明,并对各类技术进行了对比。具体可见下表。 供图丨上海磐启微电子 蓝牙AOA室内定位丨原理、特点及应用场景 在讲座中,吴老师重点分享了蓝牙AOA室内定位的优势特点及应用该技术的典型场景。 上海磐启微电子供图丨工作原理图 在定位技术部分,吴老师从蓝牙AOA室内定位系统的现状开始,介绍了蓝牙AoA定位的工作原理即通过测量标签和基站之间的到达角度,以基站为起点形成的射线必经过标签,两条射线的交点即为标签的位置,原则上,两个基站可以实现对标签的3D定位。 上海磐启微电子供图丨优势特点图 同时还重点分享了该定位系统“小于20ms的时延、支持2.4G通用无线收发芯片、支持ISM和非ISM多个通信频段、支持多种不同形式的终端设备、支持2/3D地图、支持多种无线传输接口、支持大型场景且分布式处理架构、易于部署”显著特点等内容。 在典型应用场景部分,吴老师重点分享了工厂人员、商场、超市、医院/医疗等行业在使用实时定位系统时的可实现的优势功能。 工厂人员在使用实时定位系统可实现:实时记录人员的运动轨迹;实时人数清点;设置工位区域、离开超时报警;人员工位绑定、异常提醒;进出工厂、工位考勤;人员求助(按下卡片上的求助键,系统会发出警告并弹出视频)。 讲座| 纵观 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册网址_高速全局快门图像传感器如何减轻基于AI的视觉系统的负担

作者:Ganesh Narayanaswamy 视觉传感器对于数据采集正变得越来越重要。 最初的简单图像传感器为摄影应用开发,如今的图像传感器用于向人工智能(AI)和机器学习系统提供高质量的输入。 这些系统已成为利用新的和创新的处理器架构的精密决策实体。 边缘数据采集 尽管边缘数据采集器件本质上主要是模拟的,但是图像传感器的独特之处在于: 它们的输出在连续的动态光学输入上进行时分复用 它们需要有能力在输出时保持转换后的光输入的完整性来提供图像输出 提供的图像输出具有最佳质量,支持重要的处理 这些要求和随后的结果可能会对视觉系统做出的决策的准确性产生重大影响,而这一结果定义了整个自动化系统的安全性、可靠性和收益率。 基于机器学习的视觉系统 机器学习的出现推动了图像传感器的创新,其性能水平得到了提高,可以支持各种应用。视觉输入是高保真数据–您所看到的就是输入到系统中的信息。 如今,AI算法能够检测、识别和分类这些输入并生成准确的决策输出。这些输出的可靠性取决于输入的质量及其算法的准确性,以及处理这些算法的神经网络。 基于机器学习和深度学习的视觉系统主要使用卷积神经网络(CNN)算法来创建功能强大的自动识别专家系统。 在这些系统中,增加CNN层的深度会提高推理的准确性,但是更多的层也会对这些网络在训练阶段学习所花费的时间以及系统完成推断的延迟产生不利影响 (不要忘了过拟合也会影响结果和功耗)。 同样,高质量的图像输出使视觉系统能够携带最少的CNN图层集,但还能产生高度准确的推断。在以低成本和小尺寸获得可快速部署的智能系统的同时,还实现高性能和低功耗,这带来了显著的好处。 深度学习算法如CNN资源极其密集。如今,有各种处理引擎,包括CPU、GPU、FPGA、专用加速器和最新的微控制器。 设计基于CNN的视觉系统还需要强大的优化库支持。涵盖从专有(如MVTec的HALCON&MERLIC,MATLAB的深度学习工具箱或Cognex的ViDi)到标准工具(如OpenCV)以及软硬件的整合功能。 这些选择直接关系到产品的上市时间。资源密集型处理器通常需要更大的外形尺寸,如散热器的功耗附加组件,或者仅需要较大的空闲空间以通过对流来耗散功率。 提供高质量输出的图像传感器可无需昂贵的处理器、昂贵的第三方库和/或新库的创建需求,以及最佳地结合硬件和软件资源所需的昂贵工具。 换句话说,这些传感器极大地降低了总拥有成本(TCO),并增加了在各种应用和市场中的采用率。 图像传感器输入到机器学习系统 对传递到CNN层的图像传感器输出有相当高的要求,包括: 全局快门可以捕获场景并保留场景以最小化运动伪影 高全局快门效率,以确保每个像素中保留的场景不会被该像素光路之外的光输入破坏 图像输出中的总噪声低,以确保高完整性输入 在运行和待机状态下低功耗,应对以对流传热为常态的摄像系统的典型挑战。 这些特性取决于像素架构和相关电路径的设计。的结构和设计如AR0234CS满足这些需求,非常适合基于CNN的视觉系统。 高速接口赋能快速系统 像素的质量可能极佳,且经过精心设计以生成高质量的图像,但是由于带宽限制,整个视觉系统可能仍会出现性能不佳的情况。当今的传感器都配备了SerDes接口,但是这些接口的流量数据速率会影响整个系统的质量。 高帧速率要求这些接口以高速传输图像数据。同样,传感器必须为每帧输出(fps/mW)消耗低功耗。这些特性支持将系统定时和功率预算转移到最需要的地方-处理引擎-可以合并最新的神经网络和复杂算法。 这使图像处理器能够提取图像数据中的细微差别,这些差别可能是应用的重要内容。视觉系统开发人员因此可以使其系统方案在竞争中脱颖而出。 具备高数据速率MIPI接口,非常适合基于AI的视觉系统。加上它高帧速率、低功耗全帧速率和全分辨率,视觉系统开发人员可以将大部分时间和功耗预算分配给处理器。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!