西西河

主题:【原创】简要的CAN总线学习笔记 -- Ace

共:💬47 🌺147 🌵4 新:
分页树展主题 · 全看 下页
  • 家园 【原创】简要的CAN总线学习笔记

    简要的CAN总线学习笔记

    ACE

    学习完毕我彻底明白了汽车主机厂为什么辣么恐惧互联网行业通过OBD接口的“侵入”,一般人对此不能理解,因为很少有人(包括我)会花时间去仔细看一眼CAN这种日常生活中不常见的“上古神器”。学习之后我对CAN总线的评价是:1、这是一个上古神器,她的目的是低成本组网连接MCS51这样的“低能”单片机。1983年Bosch公司设计她的时候从来就没有考虑过某一天可能有能力超强的计算机会连上去,更没想过互联网这么污的东西可能会接上去;2、这是一个秩序井然、规矩分明的君子们组成的网络“完美世界”。前提是这个网络中的每个节点都是恪守规则的谦谦君子,则一切安好,根本就没有考虑过有一天可能有“捣蛋分子”出现,出现了则无能为力,搞奔溃CAN是很容易的;3、CAN的通信能力极低,低到可笑,40m以内可以做到1mbps,10KM内可以做到5kbps,这还是指总线吞吐能力,而非payload能力,用于纯粹的工业领域简单控制网络是OK的,其他就别指望了,CAN端着一个小锅只能“望洋兴叹”。不要指望H.264或者激光雷达的RAW DATA跑在CAN上,都是根本不可能的。4、始终要牢记,CAN人家原本就是个幼稚园,里面玩耍的是MCS51这样的小盆友们,x86,ARM这些博士后们就不要去捣乱了。

    不破不立是现实世界里的黄金定律,够用就好。CAN如果只是用于连接少数数量单片机们用于车控和简单工业控制是够用的。她既不是令牌环网也不是802系列以太网的MACD,她比MACD要原始的多,叫做CSMA/CD –carrier sense multiple access/collision detect,简单说就是一个“官大一级压死人”的军阶系统,每次讲话(占用总线发信息)的时候谁大家就从肩章上最后一颗星星比起,发现有比自己官大就立即闭嘴转入收听模式,一直比出最牛逼的那位,他之后就可以占据总线来一发(发一帧数据)。一切都基于“君子协定”,由于网络中没有“裁判”,万一出现了两个节点的ID级别(故障或者恶意;一个ID编码可以是11bit或者29bit)一样,结果就是两个节点一起发送信息,CAN线上谁也收不到正确的信号。由于缺乏一个控制节点,CAN总线甚至没有网络节点的地址码,理论上信源信宿只有逻辑关系而无法物理区分,这就很要命(我仿佛看到了黑客宿宿们的诡异的蒙娜丽莎微笑)。另外,CAN的标准格式帧只能是44~108bit,扩展格式帧可以是64~128bit,是的,你没有看错,单位是bit,这对MCS51这样的小盆友来说已经是“巨大”且够用了。

    小结:在CAN总线上,大家讲的都是言简意赅短小精悍的文言文,因为实在是带宽太小。中国古人用文言文写信也是因为羊皮卷、丝绸、龟壳、竹简太贵太重太麻烦,要是畅所欲言(放上raw data去跑),那真是罄竹难书,大刘的《三体》整一套一大片竹林都得遭殃,出版一万套估计四川的熊猫就得因此全部饿死绝种。CAN总线是美好且原始的共产主义社会,每个人克己奉公,没人有会多吃多占不守规矩,不需要警察也从没考虑防范黑客,如果有了坏分子,也没啥对策。

    站在CAN的角度看我们热衷的互联网世界,实在是里面有太多坏粟粟,不仅坏而且说话太快太啰嗦。我们要理解只要汽车的控制权还在车厂手里,只要车厂们自己还没有想清楚怎么协调一致把幼稚园升级到大学级别,OBD盒子的生意必定是不受车厂待见的“Romeo must die”。 ^_^

    通宝推:GWA,時千峰,epimetheus,mezhan,明心灵竹,大山猫,夜如何其,桥上,nettman,
    • 家园 CAN本来就是给中控用的

      电动门窗,雨刮器,车灯开关,等等的控制而已。网络里的用户也就是车体内部的各个MCU,通信的内容也不过是开关指令,速度油量温度速度。CAN的主要优点在其抗电磁干扰的能力,而不是通信能力。

      现在一辆车里用到的MCU有好几十片,绝大部分还是底端的8位机,便宜。没有人会用一片32位机去控制座椅的加热。

      用互联网的信息量和用户群来要求CAN是南辕北辙,不搭界的。现在的IoT要想接入每一辆车,也是令外一个系统。要通过界面才能和车子本身的控制系统关联。

      顺便说一下车载芯片的质量要求是分类的,一类是称为引擎室用,就是控制发动机,方向盘,悬挂器等关键部位的,而且要承受高温振动强电磁干扰等恶劣环境,而且故障率要求极高。所以这个类芯片都是车厂经过10多年的考验测试才决定采用的,一旦采用,至少10年是不会换的。所以,性能上看这类芯片至少比新产品落后10年。另一类被称为乘客室用,指音响地图车外通信等功能。这类芯片的除了问题不会人命关天,而且使用环境也比引擎室舒适,所以要求和一般家电差不多,这个就要求高性能和快速更新了。

    • 家园 你们搞IT的喜欢浪费带宽,和我们工控的不一样

      比如一个三级片,IT必须把每一个细节都清楚地表现出来。自然要用好几个G的流量。工控就是一个on/off信号打过去,那边就开始打桩,打桩结束回一个确认信号。完活。原则上只要几个字节。

      实际上增加处理能力很容易,只是没客户感兴趣。一条线上几百个输入输出已经很多了。再多客户自然会分成几个PLC去控制,好用得很。

      工业应用关键是可靠性。一辆车会在零下三十度到零上50度之间操作。中间还有各种车震。同时还要控制住成本。

      想象一下气囊误操作的后果就知道为啥这么小心了。

      几年前我还用过机械cam,连在机器主轴上,5个输出,用小螺丝刀调角度。刀枪不入,好用得很。

      通宝推:jent,敲门,
      • 家园 大带宽大处理量才可能带来更稳定

        工控之前的思路是尽可能少,简单,来实现安全,但只要通讯线路被侵入,整个系统就完了。——互联网早期就经常出现这种线路被入侵后伪造的情况,伊朗机床的蠕虫病毒也是一点攻破全线崩溃。

        就我个人的看法,工控的简单/少 只是 欺负研究的人少,被攻击对象太过强大会被请去监狱 而已,有点像公司里的网管,为了安全,把各种通讯端口和通讯工具都给屏蔽了一样,纯属 掩耳盗铃,鸵鸟埋头。

        其实,够用就好,更多的是因为其价格,而现在这个价格差异已经不明显了。

        互联网 时时刻刻在面对洪峰攻击,伪造篡权,但搞这么多年还活得好好的,是靠不断发展出的 海量请求过滤,分布式验证等技术来保障的,与狼共舞,是一种主动的进攻式防御。

        现在工控领域也在开始走 大处理能力,大内存,大通讯通道了,甚至是一个流行趋势。因为这可以:

        1. 提供丰富的监测和用户体验

        2. 更好的安全性:这些都是互联网公司成熟防护方式。

        2.1. 自我冗余:多核大内存,一个机器的中控可以有多个备份,可以相互校验,提升安全性和稳定性。——比如玉兔月球车的操作系统,就是双核的。

        2.2. 链路安全+帐号系统+权限安全:即使通讯链路被侵入,还是无法操作,因为还有权限保障,如果终端机器强大点,那还有加密验证,甚至动态密码之类的验证。

        2.3. 如果被洪峰攻击,终端可以自动识别从而另开旁路保证正常通讯。。。

        2.4. 都断网了咋办?以前的联网中控由于处理能力有限,应对方法只有一个:无条件停机。有很多设备一武断停机就要报废,出各种额外事故。而如果终端处理能力强了,则可以相机处理完各种状况后再安全停机。

        这样会导致无法快速操控?在通讯获得保障的情况下,还是和以前一样。而且终端强大的一个好处就是可以自处理应急状况,比如飞机的姿态控制,靠人手是很难做好的,反而靠机器自身处理能力解决了。不过,很多领域引入的时间还太短,这样的自应对能力还是非常有限的,比如汽车的自动驾驶,但目前也没有哪个工控领域是完全放飞自我的。

        通宝推:秦波仁者,
        • 家园 屁孩不懂别乱说,乱pull egg.

          你搞个复杂系统谁用啊。已经说了,这是工控,不是电信。增加通讯容量屁大点事。没有这个欲望而已。

          • 家园 说的就是工控!

            什么叫复杂?月球车系统复杂不?你觉得它有何不足?以你现有思路,是永远提不出改进方式的,甚至觉得该继续削减的。

            我个人认为,至少有几个方面还可以加强,多软核,软核校验,文件校验,权限管理,账户系统,沙箱运行程序……这样提供的安全性,岂是和几个单片机+几m内存 可比的?

            而这些,在互联网公司的服务器是常用的方式,而作为工控space os却仅仅来个双核备份就在那吹牛自己多么逆天,简直是不要脸。

            通宝推:秦波仁者,
            • 家园 你拿服务器和工控硬件比可靠性?佩服佩服
              • 家园 行了,摩托罗拉砖头机永远是对的,要啥智能手机
                • 家园 没有人会认为砖头机永远是对的。

                  但是砖头机有砖头机的用处。

                  就拿军用的步话机一样。不是每一种最新的科技产品都可以,应该,能够进入制式装备的序列。

                  你完全不去理解用户的需求与体验,而一味地指责别人跟不上你的先进。殊不知,违背用户终极需求的产品,哪怕它再眩目,再高科技,出了问题,这个责任会使得选用它的客户背负极大的责任。

                  消费级产品,和工业级产品的分别,由此而来。

            • 家园 你的概念是错的

              工控的出发点是首先零失误(能不能做到是另外一回事)。然后是成本与效益的平衡。

              你说的互联网,好吧,就是目前很热的,电商,网银,服务器

              。。。这一切的一切,首先满足的,不是零失误,而是大规模的可接受。这是消费级产品的出发点。

              而你说的月球车系统:的确,很复杂。但是,月球车的复杂性,是,1,可控的。2,可预测的。3,如果遇到不可控/不可预测的,失败是可以被接受的。

              换到每天轮班的高铁系统上:你失误一次,就是人命,就是品牌的跌落,就是几年的技术反工。

              这就是区别。微软的视窗复杂吧。崩溃了,重启啊:这是IT人的文化。化工自动化的控制系统,可能就是简单的逻辑电路控制的,简单吧,但是可以保证常年累月地运转。

              ----------------------

              如是。

              • 家园 我上面两贴已经可以解释你提的问题了

                记住:服务器是可以永不关机的,可以在线硬件热检修!

                无视这样的成熟可靠性,却去信赖一出错就罢工,我已经无话可说。

                • 家园 呵呵呵呵。。。你这完全是鸡同鸭讲

                  你见过不关机的服务器,但是你见过不出错的服务器么?

                  你那个不叫成熟可靠。而只能说是满足需求。但这个需求不是工业控制的需求。

                  工业控制的需求在于:目标是零失误,手段是隔离/简洁,出了问题是及时中断,责任明确。

                  一切一切的目的,都是在于大规模工业应用/生产的有序,高效,和核实成本的进行。

                  就不要用什么IT服务器可以多少天不关机来说事了:

                  最明显,最直接的例子:

                  国庆节期间,杭州西湖手机服务,因为人太多而中断。。。这个中断可以被接受吗?可以。可以说99.9999999的用户都只会骂几句服务商,最多再骂几句破手机,不是吗。就算中断了几分钟,又有什么什么不可接受的损失呢?

                  你拿到飞机上,拿到高铁上,拿到化工企业里,拿到钢铁企业里,类似的事一出,那就是人命,那就是停产,那就是大规模的损失。

                  事实上当年动车事故的一个技术分析就在于,把机车信号处理当成了IT服务。你可以去读读当年的技术分析。

                  • 家园 不好意思,我服务器开了3年一直放那好好的

                    不好意思,我服务器开了3年一直放那好好的。

                    平时之所以要关机,是因为要做一些重大改变,稳妥起见,并不是非得关机。——我说的是别人,我的不关机,当文件服务器。

      • 家园 是的。这才是问题所在

        一个是消费级的东西,以快速推进,吸引眼球为目标。

        一个是工业级的东西,以稳定,可靠,不死人为基本要求。

        所以搞IT的人很大程度上完全不能理解工业界的很多规范的由来。

分页树展主题 · 全看 下页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河