铸魂:软件定义制造
上QQ阅读APP看书,第一时间看更新

关于“定义”的定义与边界

本节既然探讨“定义”,首先要明确“定义”的定义。在国内互联网百科上,定义(Definition)一词,原指对事物做出的明确价值描述。该词经过反复重用与优化之后,“定义”的定义被确定为:对于一种事物的本质特征或一个概念的内涵和外延的确切而简要的说明。

维基百科的Definition定义:“A definition is a statement of the meaning of a term (a word, phrase, or other set of symbols). Definitions can be classified into two large categories, intensional definitions (which try to give the essence of a term) and extensional definitions (which proceed by listing the objects that a term describes).”(定义是术语(单词、短语或其他符号集)的含义的陈述。定义可分为两大类,内涵定义(试图给出一个术语的本质)和外延定义(通过列举术语描述的对象来进行)。)

以上“定义”的共性意思是:说明本质,给出内涵和列举外延。

深入辨析 定义机理

在描述“定义”的定义之前,首先需要说明,“定义”一词既可以作为名词,也可以作为动词和形容词使用。词性区分对于理解软件定义是有意义的,从某种意义上说,“软件定义”这个术语本身在字面上就可能存在不同理解。

首先,从词义上来理解“软件定义制造”这个专用词组。在谈及“软件定义制造”时,首先要确认此处的软件是包含工业技术/知识、用于工业过程的软件,默认为工业软件。对于“软件定义制造”的理解,可以从“制造”的定义来展开。

制造是根据市场需求,按照一定的方式、方法,把原材料(制造资源)加工成用户满意的产品的过程。实现这一过程的行业叫作制造业。该定义中包含了三个关键词:


▶ 制造资源,包括天然/人造材料、能量、信息、技术、知识、资金、人力、软件、芯片、网络、服务等所有有形与无形的资源。

▶ 制造过程,必要且行之有效的方式、方法和工艺流程。

▶ 制造对象(产品),是指用制造资源生产的、能满足人们某种需求的、能够供给市场并被人们使用和消费的任何制造结果,包括有形的物品,无形的服务、知识、观念,或它们的组合。


如果说“软件定义制造”,则其主要含义可以认为是:以工业软件来描述、约束、仿真、确定、集成、赋能、加速、放大、创新制造资源、制造过程和制造对象的一种新制造模式。

当“定义”一词作为名词理解时,具有以下的意思,如对“意义,价值,确切说明”的【描述】,对“概念,术语,名称”的【命名】,阐述“独特性,与众不同之处”的【属性】,界定“时,空,形,态”的【范畴】,解释“概念含义以及彼此关系”的【语义】等。按照维基百科定义,作者列举出“定义”的内涵和外延,如图1-3所示。

图1-3 “定义”作为名词理解

当“定义”一词作为动词理解时,意思会更丰富一些,如【控制、改变、替代、确定、测量、优化、放大、创新】“事物或物理实体的形与态”, 【赋予】“事物发展前进的动能”等。如图1-4所示。例如,在动词为“确定”时,软件通过复杂的计算与逻辑推理,具有把不确定性数据(事物)变为确定性数据(事物)的能力。在动词语境下,控制、确定、优化、放大、赋予等含义的使用率较高。

图1-4 “定义”作为动词理解

当然,“定义”一词也可以作为形容词理解,可以给所有的动词后面加上一个“的”来理解即可。

梳理上述“定义”所具有的名词、动词、形容词的含义,可以看到“定义”所具有的内涵是很丰富的。在本书中,主要使用 “定义”的动词含义,兼顾其名词含义。

作者用TRIZ发明方法论中对于“功能”界定的简明方式来分析软件定义的作用,即在一个“主语·谓语·宾语”齐全的语句中,去掉主语,保留主语发出的动作(谓语),然后把谓语和宾语放在一起,就形成了主语所具有的“功能”,即以“谓语·宾语”而形成一种典型的描述事物相互作用的功能。

当提到“软件定义某事物”的时候,显然,主语是软件,谓语是定义,宾语是被主语定义的对象“某事物”,因此,功能就是“定义·某事物”。在这里,软件定义的功能可以写作:“【控制、改变、替代、确定、测量、优化、放大、创新】·【事物或物理实体的形与态】”或“【赋予】·【事物发展前进的动能】”是需要优先考虑的内容。如果把宾语确定为“机器”或“制造(结果/过程/材料)”,那么“软件定义机器”或“软件定义制造”的意思就是“软件·【控制、改变、替代、确定、测量、优化、放大、创新】·【机器(形与态)】”,此处的宾语也可以替换成“【材料(形与态)】”,或者是“【制造(结果/过程/材料)】。”

以作者的调研与观察,软件所具有的“控制、改变、替代、确定、测量、优化、放大、创新”“制造(结果/过程/材料)”的现象,天天都在发生,已是普遍现象。

芯片筑基 比特赋能

我们从软件程序运行上来理解“软件定义制造”。软件开发离不开各种以类似人类语言的格式和逻辑来编写程序的高级语言。不管软件是用哪种高级语言编写程序的,最终,这些程序语言都要被编译器转换成为“0、1”形式的机器指令来驱动芯片运算,编译器通常可以理解为从软件通向硬件的桥梁。

尽管软件在很多高校和科研单位都被作为一个相对独立的专业来研究,但是作者认为,单独研究软件容易脱离软件运行的硬件基础,容易脱离软件以决策和数据所控制的物理设备。因为软件从来就不是一个仅仅具有“计算”属性的器物,而是还具有更重要的“控制”属性的器物。

软件作为一种数据、信息、知识的高度融合的数字载体,必须生存、运行在芯片中。软件与芯片形成了共生关系。芯片的功能与性能约束了软件的运行速度和可以定义的“能力”,而软件的程序化指令不断驱动芯片中的门电路和场效应管做“开”“关”运行,因此软件从诞生之日起就具有驱动芯片的 “准CPS”特征。

软件和芯片之间的关系也是微妙和不断变化调整的。过去,软件必须去适应芯片,要基于芯片的约束来开发软件;而今天往往是为了更好地运行软件,最大限度地发挥软件性能来设计芯片,即基于软件需求去研发芯片。

首先,芯片具有为软件“容身、计算、存储”的作用,软件具有为芯片“赋值、赋能”的作用。软件与芯片的各自优点综合匹配在一起,才能发挥最好的效益。软件与芯片共同构成了一个融合体,是一个“准CPS”,很难说谁“定义”了谁。但有两点显而易见:软件是芯片强大算力的作用对象,没有芯片强大算力的支持,软件很难发挥对物理实体的“赋能/赋智”作用;蕴含在软件中的人类知识是人造系统“智能”的源头,没有软件中的各种模型与算法知识的逻辑导引,芯片强大算力也失去了用武之地,同样无法形成对物理实体的“赋能/赋智”作用。软件和芯片的共生关系如图1-5所示。

图1-5 软件与芯片的共 生关系(图中1/0排列仅为示意)

其次,软件所产生的决策与数据对物理设备具有精确的控制作用。如图1-5所示,以CPU门电路中的场效应管为例,在软件数字指令驱动下,高电平(开/通电流)为1,低电平(关/断电流)为0,因此在该场效应管上不断以极速“开/关”的状态来进行计算,最终一组一组的门电路输出了一串一串经过计算后形成的“1/0”排列的二进制比特数据,这些比特数据可以用来驱动显示设备(如各种显示屏),也可以用来驱动物理设备中的控制器,让机器或产品精准运转,由此而体现出软件对芯片、外设、物理设备的控制性。

早期软件只在电脑上使用,硬件范围只包含一些显示、打印等外部设备,软件运行的结果只需要显示在硬件屏幕上,显示的可能是数据,也可能是曲线曲面,还可能是图像或声音,但是,这些计算结果并不要求形成“闭环”,只要能辅助人进行决策就可以了。而今天,硬件范畴已经扩展到所有与电脑联接的工业设备,软件运行的结果是要用来驱动物理设备的,是要与物理设备形成“闭环”的,即物理设备的每一个细微动作都被感知到,都要通过传感器反馈到软件中,软件根据物理设备“此时此刻”的工作场景进行计算,根据内嵌的机理模型或推理规则进行决策,给出物理设备下一步的最优化、最精准的动作指令。因此,软件和芯片,与工业设备之间的关系就变得实时、紧密,并且是丰富多彩了。

软件从驱动芯片运算、“软件+芯片”驱动计算机外设运行,发展到“软件+芯片”驱动工业物理设备运行,使得软件对物理设备的行为产生了强大的“定义”作用,形成了软件定义制造的基本内涵。

研发生产 全面定义

工业软件的应用已经全面覆盖、细微渗透到了全寿期中的产品研发、生产、使用维护,甚至是报废等环节。为了说明这种覆盖与渗透的情况,作者以自行车上的一个结构非常简单的前轴零件为例,来说明在这个零件的设计生产过程中,都用到了哪几类软件,这些软件是如何定义前轴诸多制造要素的。

1)软件定义前轴的形状与结构:前轴是一根细长圆柱状零件,中间段光滑并直径略小,两端有螺纹,可以用尺寸定义其总长、直径和螺纹长度、螺距以及螺牙角度。用CAD软件定义的前轴及两端外螺纹如图1-6所示。

图1-6 用CAD软件定义的前轴(北京华成经纬软件科技有限公司用tpCAD软件绘制)

2)软件定义零件装配关系:可用三维CAD软件画出与前轴有装配关系的其他零件的装配图,如图1-7所示;也可以同时给出手工绘制的二维装配图纸,如图1-8所示。中间从左到右贯通的6号零件就是前轴。利用装配图制作的分解图(也称爆炸图)可以清晰地描述多个零件之间的装配关系(次序、位置、姿态等)。

图1-7 前轴三维CAD装配图(北京华成经纬软件科技有限公司用tpCAD软件绘制)

图1-8 前轴的传统手工绘制装配图

3)软件定义力学仿真:根据前轴的实际应用场景和受力情况(简称工况),在用三维CAD建好的前轴模型上施加数字化的“载荷”,即给出这个轴的受力情况,是静载荷(一个60千克的人骑在车上不动)、还是动载荷(在骑行过程中急刹车)、还是冲击载荷(在坑洼沟坎路面上颠簸),前轴的设计强度是否满足给出的某种工况要求(总重300千克的人是否会压断前轴,或者会在骑行过程中颠断前轴),等等,都可以用CAE软件进行仿真计算。

图1-9 不同载荷下前轴的强度和失效计算(用DELAB软件计算)

如果一辆自行车上承载了类似杂技表演叠罗汉的多个人,那么前/后轴就会被施加上很大的载荷,而此时就要考验前轴在这种场景下的强度表现了。当分别施加了12kN、25kN和50kN(千牛顿,1牛顿=0.102公斤)载荷时前轴的力学表现情况(设定计算条件——杨氏模量为100GPa,抗拉强度为200MPa,泊松比为0.3,密度为7800kg/m3,弹性极限为0.2%,断裂极限为25%),如图1-9所示。

4)软件定义材料及特性:上述力学状态分析需要CAE软件里必须有较为完整的材料数据库,其实材料数据库也是软件模型。根据前轴设计中的选择,指定自行车前轴模型使用某种特定材料,于是就有了材料属性的模型,这样才可以做静力、动力、强度、疲劳、可靠性等内容的计算和仿真,有时甚至需要非常专业的材料非线性仿真分析软件和可靠性分析软件。某些情况下,需要专门开发某种材料来用于某种产品,这就有可能用到专业的材料分析软件。

如果前轴强度不满足工况(例如支撑300千克骑行者使用至少5年)要求,就必须要换一种强度更高的材料,至于用哪一类钢材,甚至用什么合金,包括是否需要反过来改动前轴的结构(如加粗直径)等,都需要用CAE软件做一定的计算,然后形成一个前轴的数字孪生体(参见第五章),在前轴数字孪生体上做完大量数字化试验之后,确保前轴可以一次做优,从而进入前轴的批量生产阶段。

5)软件定义工艺流程:自行车前轴的结构看似简单,但是其生产过程也涉及很多工艺内容。加工这样一个前轴的工艺过程并不复杂,但是该有的工艺程序一步也不能少。首先,把一根合格的金属棒料夹在车床上,根据图纸把中间段外圆车出来。然后,根据图纸要求车出两端的螺纹。如果螺纹要求不高的话,也可以用制造普通螺栓的方式去搓制螺纹(需要设计出搓制螺纹的搓丝牙板)。最终,给前轴做表面强化处理,让它成为一个合格的自行车零件,装配在自行车上正常使用。上述一系列工艺过程的制定,特别是在实际加工前的工艺仿真,可以使用计算机辅助工艺CAPP软件来进行设置和计算,最终给出最佳工艺过程。

6)软件定义刀具轨迹:例如用车床制作前轴的外螺纹,可以用CAM软件在数控车床上编制好数控代码,做好加工过程的刀具轨迹仿真并进行虚拟验证,检验工件(或刀具)转速、切入点、进给量等必要加工参数,确认走刀轨迹正确无误,不会撞刀和栽刀,才可以将验证后的G代码(数控程序指令)输入数控车床,进行实际加工。

7)软件定义产品检测:最后加工完成的前轴产品,还要使用检测设备进行检测,查看前轴所有的结构尺寸是否满足图纸上的尺寸及公差要求,螺纹的螺距、螺牙角度、螺纹长度是否符合要求,产品表面是否有瑕疵等。包括在试验台上给出静载荷或动载荷等苛刻试验条件,采集产品在检测中的试验数据,实际验证产品真实的性能和质量指标。检测过程可用CAT软件辅助完成。

8)软件定义使用维护:已经上市的产品,还要考虑如何进行定期的保养、维护与修理,例如,自行车前轴该何时保养、如何更换失效的零件、拆装的顺序和注意事项是什么、该向哪些合格的供应商订货或购买替换件等,都需要严格遵守产品维护手册或原厂规定的程序与标准。如果复杂产品疏于保养或者维护不当,或者使用了非指定供应商的替换产品,设备可能就会报废。复杂产品的维护可以在MRO软件辅助下完成。而且,在产品设计阶段就应该完成对产品使用维护的所有涉及要素的考虑。

9)软件定义数字孪生:最后形成的数字化虚拟前轴还要装到数字化虚拟自行车上去,做整个自行车的数字化装配分析,以及在数字化路面上、数字化的各种气象条件下,进行自行车骑行过程中的各种工况的数字动态仿真计算分析,包括预测该产品能用多长时间,物理产品消失后数字产品如何发展和管理等。这些分析会用到系统仿真软件、多物理场综合仿真软件,以及前面提到的多种软件等。

一个小小的自行车前轴,从产品设计、仿真、工艺设计、工艺仿真、编制数控车床加工的数控代码、成品检测等,都是基于包括材料特性和工艺属性的数字模型工作,并不断迭代生成新的数字模型(数字孪生)。

作者以一个自行车前轴为例,仅仅讲了该产品全寿期中几个阶段的部分内容,仅仅做自行车前轴数字化研制过程的某些仿真分析验证,就需要十几个工业软件和相关的材料数据库、环境数据库等才能完成。看得见的是产品的结构与表面,看不见的是产品的微观结构与材料属性,这才是产品研发能够展现真功夫的地方。如果是自行车整车的研发,或许就需要几十个乃至上百个工业软件,而复杂产品的研制过程,可能就需要数百个乃至几千个软件了。

可以说,在产品竞争白热化的今天,如果没有软件定义,复杂产品研制成功的概率几乎为零。

正视局限 认清两面

“软件定义制造”的作用与价值在于打破了原来以物理设备功能为核心的传统系统框架,在物理设备原有的功能基础上,把物理设备作为一种“平台”,通过丰富多彩的软件来对平台上的各种既有功能进行增加、放大、组合、管控、协调等操作,充分展现物理设备的功能性、灵活性、适应性、易扩展性、安全性、可管理性等,使得系统整体功能更强、价值更大、更趋于智能。

尽管本书的写作重点是“软件定义制造”,但是对其理性看待显得尤为重要。一方面,我们要充分认识到软件的巨大作用,另一方面,也要看到软件的某些短板,不能无限夸大软件作用,不能陷入“唯软件论”或夸大到“软件定义一切”。

(1)软件尚不能定义一切

首先,“软件定义”并不等于“软件决定一切”——软件可以在给定的物理设备的基础上,来定义物理设备的某些内涵和外延(所能达到的功能、价值、智能程度),可以驱动物理设备控制器的底层功能,但软件不能倒过来决定物理设备是什么,即软件“赋值、赋能”的作用再强大,也不能改变物理设备的基本属性。例如,CAM软件、数控软件或工业APP可以丰富发展数控机床的作用,将数控机床定义为一台“铣床”“增材+减材设备”或者是“工业机器人”,但是数控机床的基本架构决定了它还是一台数控机床,无法成为一辆汽车。再例如,一部智能手机,通过APP的作用,可以将其定义为“导航仪”“血压计”“收音机”“网上银行”,甚至更多,但是CPU、存储、通信模块等硬件架构决定了它还是一部智能手机,不可能具备超算功能。

其次,强调“软件定义”并不是说芯片等计算机硬件不重要——芯片是软件的容器,运行的载体,逻辑的联合实现者。软件与承载它的芯片是强强联手的融合体,单独谈软件的功能意义不大,因为没有算力强大的芯片,就没有功能强大的软件。前已述及,软件是一个“软+芯”的“准CPS”。另外,网络设备也非常重要,未来的软件,绝大部分都是云(移动互联网)化软件,运行在云端,没有泛在的网络,就没有泛在的软件和泛在的数据。

再者,“软件定义”与工业设备/物理机器唱主角并不矛盾——软件定义的目的,就是让所有的工业设备/物理机器能够以更新的面貌、更可控的系统、更高的效率、更精准的动作来驱动工业设备的运行。软件、硬件与物理设备的有机结合与互相依托,缺一不可。提倡“软件定义制造”并不意味着用户必须淘汰现有的物理设备,或者去搞“机器人换人”等。任何物理设备的强大与先进都离不开软件的支撑,但是当任何软件脱离了制造业的实际场景和应用载体,也将变得“魂不附体”。因此,软件作为工业之魂,物理设备之魂,必须要“定魂守体”“强魂壮体”,以伟岸之体魄、智慧之灵魂,来打造新工业装备。

最后,作者想强调的是,软件可以定义客观世界中的无数事物,但是软件不能定义一切,软件只能定义可以定义的一切。简而言之,从基本内涵和实现逻辑来说,软件是人类知识(如运行规律、机理模型、推理规则等)的数字化实现,是把人类语言经过编程转换成了机器低层语言,才能让软件的计算在程序引导和驱动下进行下去。客观世界中还有大量的人类尚无法认识其规律、不知其机理、难以将其准确描述的事物,很多情况下,人类的语言都是苍白乏力的,甚至人对自己的大脑思考过程都是缺乏了解的。显然,软件无法定义不知运行规律、缺乏机理模型、难以准确描述的事物。“软件定义一切”是不成立的。

(2)软件定义具有正负两面性

作者必须指出:实现“软件定义”的前提是输入的数据正确。对于软件里面所包含的机理模型、模拟人类思考的推理逻辑等,都需要给各种计算变量赋予正确的数据。如果数据出了问题,那么计算结果必然有问题,也就会引发物理设备问题,这就是常见的“garbage in, garbage out”(垃圾输入,垃圾输出)。波音737 MAX 8连续两起空难就佐证了这个问题。

波音公司时任CEO米伦伯格在2019年4月承认:“很明显,737 MAX 8的自动防失速系统(机动能力增强系统,MCAS)为了回应错误的迎角信息而被激活”,导致了两起致命空难。MCAS其实就是一套由软件和飞控操作部件组成的系统,其设计初衷是避免因为发动机安装位置的变化所导致的飞机容易机头上扬而进入失速。当飞机的迎角过大时,MCAS就会启动。为了监测迎角大小,MCAS需要依赖飞机机翼上安装的传感器,如果检测到迎角接近失速状态,该系统就会通过调节位于平尾的水平安定面,增加飞机的低头力矩,以改出失速。但是,只靠某一侧机翼上的单一的传感器的信号去启动MCAS的设计显然是不合理的。如果传感器给出了错误的信号输入,就会导致错误的输出结果。

因此,即使软件中的逻辑推理非常正确,即使机理模型设计无误,但是如果输入的数据是不可靠的,计算完毕后给出的输出结果也是不可靠的。实现“软件定义”的基本前提是输入数据正确!还有一种极端的情况,就是对软件定义的非法使用。对于实现了软件定义的系统,如果一旦被黑客或不怀好意的人非法侵入利用,那么其所产生的破坏力是惊人的,因为这种非法利用既可以跨越时空(如网络远程侵入),又可以接管系统,还可以修改原有软件代码或替换软件版本,或是植入木马病毒(如震网病毒)。

作者提醒读者:病毒或恶意程序,也是一种“软件定义”的具体实现,病毒或恶意程序的设计目的,就是对正常软件系统中的文件系统、数据系统,甚至对计算机管理与控制的物理系统进行干扰和破坏。值得注意的是,早期的病毒只是破坏电脑中的数据甚至破坏电脑网络,但是在万物互联的大背景下,在新工业革命所形成的工业互联网时代,病毒会直接影响甚至破坏工业设备中的物理系统,如导致各种设备中的软件功能失效(例如关闭燃气水电系统,让所有路口的交通灯都是绿灯或红灯、让铁水不浇铸而冷凝在炉内),或者利用软件和物理设备的自身缺点来导致物理设备失效(让设备超过额定转速运转,让盛满钢水的钢包跌落,让工业锅炉数倍超压,让机械手猛击产品而自损等)。因此,对软件定义有可能引发的工业信息和设备安全的问题,必须保持足够警惕,必须制定有效防范措施。

综上所述,软件定义虽然从理念到绝大部分实现的功能都非常好,但是读者对其中所包含的正负两面的内涵应该有清醒认识。在具体应用上,要做到“有所为,有所不为”,要根据具体的应用场景和实现环境来做具体实施与管控。