嵌入式节点的自动固件升级的制作方法

文档序号:16855285发布日期:2019-02-12 23:12阅读:157来源:国知局
嵌入式节点的自动固件升级的制作方法

本公开一般地涉及工业系统。更具体地,本公开涉及网络系统(包括但不限于工业网络)中的嵌入式节点。



背景技术:

可以使用可被实现为任意数量的设备的节点网络来实现工业系统。这些节点中的许多是嵌入式固件受控设备,该嵌入式固件受控设备可能会经历故障或另外需要升级或维护。期望稳定和冗余的系统。



技术实现要素:

本公开提供了一种用于工业控制系统和其它系统中的装置和方法。一种方法包括由主节点检测备份节点可用且未被配置。该方法包括由主节点自动地将主节点复制到备份节点。

所公开的实施例包括主节点,该主节点包括控制器和存储器,被配置为执行如本文所述的过程。所公开的实施例还包括编码有可执行指令的非瞬时性机器可读介质,所述可执行指令在被执行时使得主节点的一个或多个处理器执行如本文所公开的过程。

在各种实施例中,该方法还包括:由主节点向备份节点查询标识;由主节点接收备份节点的标识;以及由主节点检验该标识对应于与主节点兼容的硬件。在各种实施例中,主节点和备份节点连接到同一网络,并且还经由冗余路径被连接。在各种实施例中,冗余路径是主节点和备份节点之间的直接连接。在各种实施例中,复制主节点包括向备份节点发送配置,该配置使得根据主节点来配置备份节点。在各种实施例中,复制主节点包括由主节点将一个或多个应用发送到备份节点以在备份节点上执行,使得备份节点复制主节点的操作。在各种实施例中,该方法还包括激活备份节点以替换主节点。

根据以下附图、描述和权利要求,本领域技术人员可以容易地明白其它技术特征。

附图说明

为了更完整地理解本公开,现在参考以下结合附图做出的描述,其中:

图1图示了根据本公开的示例性工业过程控制和自动化系统;

图2图示了根据所公开的实施例的包括主节点和备份节点的冗余节点系统的实施例;和

图3图示了根据所公开的实施例的过程。

具体实施方式

以下讨论的附图和用于描述本专利文件中本发明的原理的各种实施例仅作为说明,并且不应以任何方式被解释为限制本发明的范围。本领域技术人员将理解,本发明的原理可以在任何类型的适当布置的设备或系统中实现。

图1图示了根据本公开的示例性工业过程控制和自动化系统100。如图1中所示,系统100包括促进生产或处理至少一种产品或其它材料的各种部件。例如,系统100在此用于促进对一个或多个工厂101a-101n中的部件的控制。每个工厂101a-101n代表一个或多个处理设施(或其一个或多个部分),诸如用于生产至少一种产品或其它材料的一个或多个制造设施。通常,每个工厂101a-101n可以实现一个或多个过程,并且可以单独地或共同地被称为过程系统。过程系统通常代表被配置为以某种方式处理一种或多种产品或其它材料的任何系统或其部分。

在图1中,使用过程控制的purdue模型来实现系统100。在purdue模型中,“层级0”可包括一个或多个传感器102a和一个或多个致动器102b。传感器102a和致动器102b代表过程系统中可以执行各种功能中的任何功能的部件。例如,传感器102a可以测量过程系统中的各种特性,诸如温度、压强或流率。而且,致动器102b可以改变过程系统中的各种特性。传感器102a和致动器102b可以代表任何合适的过程系统中的任何其它或附加部件。每个传感器102a包括用于测量过程系统中的一个或多个特性的任何合适的结构。每个致动器102b包括用于操作或影响过程系统中的一个或多个条件的任何合适的结构。

至少一个网络104耦合到传感器102a和致动器102b。网络104促进与传感器102a和致动器102b的交互。例如,网络104可以传输来自传感器102a的测量数据并向致动器102b提供控制信号。网络104可以代表任何合适的网络或网络的组合。作为特定示例,网络104可以代表以太网网络、电信号网络(诸如hart或foundation现场总线网络)、气动控制信号网络或任何(一个或多个)其它或附加类型的(一个或多个)网络。在如本文所讨论的特定实施例中,网络104至少部分地实现为无线网络,并且传感器102a和致动器102b至少部分地使用无线设备来实现。

在purdue模型中,“层级1”可以包括一个或多个控制器106,控制器106耦合到网络104。除其它之外,每个控制器106尤其可以使用来自一个或多个传感器102a的测量结果来控制一个或多个致动器102b的操作。例如,控制器106可以从一个或多个传感器102a接收测量数据,并使用该测量数据生成针对一个或多个致动器102b的控制信号。每个控制器106包括用于与一个或多个传感器102a交互并控制一个或多个致动器102b的任何合适的结构。例如,每个控制器106可以代表比例-积分-微分(pid)控制器或多变量控制器,诸如鲁棒多变量预测控制技术(rmpct)控制器或实现模型预测控制(mpc)或其它高级预测控制(apc)的其它类型的控制器。作为特定示例,每个控制器106可以代表运行实时操作系统的计算设备。

两个网络108耦合到控制器106。网络108促进与控制器106的交互,诸如通过向控制器106传输数据和从控制器106传输数据。网络108可以代表任何合适的网络或网络的组合。作为特定示例,网络108可以代表一对冗余以太网网络,例如来自霍尼韦尔国际公司的容错以太网(fte)网络。

至少一个交换机/防火墙110将网络108耦合到两个网络112。交换机/防火墙110可以将流量从一个网络传输到另一个网络。交换机/防火墙110还可以阻止一个网络上的流量到达另一个网络。交换机/防火墙110包括用于在网络之间提供通信的任何合适结构,例如霍尼韦尔控制防火墙(cf9)设备。网络112可以代表任何合适的网络,诸如fte网络。

在purdue模型中,“层级2”可以包括耦合到网络112的一个或多个机器级控制器114。机器级控制器114执行各种功能以支持控制器106、传感器102a和致动器102b的操作和控制,控制器106、传感器102a和致动器102b可以与特定的一件工业装备(例如锅炉或其它机器)相关联。例如,机器级控制器114可记录由控制器106收集或生成的信息,诸如来自传感器102a的测量数据或针对致动器102b的控制信号。机器级控制器114还可以执行应用,该应用控制控制器106的操作,从而控制致动器102b的操作。此外,机器级控制器114还可以提供对控制器106的安全访问。每个机器级控制器114包括用于提供对机器或其它单件装备的访问、控制或与机器或其它单件装备有关的操作的任何合适的结构。每个机器级控制器114可以例如代表运行microsoftwindows操作系统的服务器计算设备。尽管未示出,但是不同的机器级控制器114可用于控制过程系统中的几件不同装备(其中每件装备与一个或多个控制器106、传感器102a和致动器102b相关联)。

一个或多个操作员站116耦合到网络112。操作员站116代表提供对机器级控制器114的用户访问的计算或通信设备,机器级控制器114然后可以提供对控制器106(并且可能对传感器102a和致动器102b)的用户访问。作为特定示例,操作员站116可以允许用户使用由控制器106和/或机器级控制器114收集的信息来审阅传感器102a和致动器102b的操作历史。操作员站116还可以允许用户调整传感器102a、致动器102b、控制器106或机器级控制器114的操作。此外,操作员站116还可以接收和显示由控制器106或机器级控制器114生成的警告、警报或其它消息或显示。每个操作员站116包括用于支持对系统100中的一个或多个部件的用户访问和控制的任何合适的结构。例如,每个操作员站116可以代表运行microsoftwindows操作系统的计算设备。

至少一个路由器/防火墙118将网络112耦合到两个网络120。路由器/防火墙118包括用于在网络之间提供通信的任何合适的结构,诸如安全路由器或组合路由器/防火墙。网络120可以代表任何合适的网络,诸如fte网络。

在purdue模型中,“层级3”可以包括耦合到网络120的一个或多个单元级控制器122。每个单元级控制器122通常与过程系统中的单元相关联,该单元代表一起操作以实现过程的至少一部分的不同机器的集合。单元级控制器122执行各种功能以支持较低层级中部件的操作和控制。例如,单元级控制器122可以记录由较低层级中的部件收集或生成的信息,执行控制较低层级中部件的应用,以及提供对较低层级中部件的安全访问。每个单元级控制器122包括任何合适的结构用于提供对过程单元中的一个或多个机器或其它几件装备的访问、控制或提供与过程单元中的一个或多个机器或其它几件装备相关的操作。每个单元级控制器122可以例如代表运行microsoftwindows操作系统的服务器计算设备。尽管未示出,但是不同的单元级控制器122可用于控制过程系统中的不同单元(其中每个单元与一个或多个机器级控制器114、控制器106、传感器102a和致动器102b相关联)。

可以由一个或多个操作员站124提供对单元级控制器122的访问。每个操作员站124包括用于支持对系统100中的一个或多个部件的用户访问和控制的任何合适的结构。例如,每个操作员站124可以代表运行microsoftwindows操作系统的计算设备。

至少一个路由器/防火墙126将网络120耦合到两个网络128。路由器/防火墙126包括用于在网络之间提供通信的任何合适的结构,诸如安全路由器或组合路由器/防火墙。网络128可以代表任何合适的网络,诸如fte网络。

在purdue模型中,“层级4”可以包括耦合到网络128的一个或多个工厂级控制器130。每个工厂级控制器130通常与工厂101a-101n之一相关联,该工厂可以包括实现相同、相似或不同过程的一个或多个过程单元。工厂级控制器130执行各种功能以支持较低层级中的部件的操作和控制。作为特定示例,工厂级控制器130可以执行一个或多个制造执行系统(mes)应用、调度应用或其它或附加的工厂或过程控制应用。每个工厂级控制器130包括用于提供对过程工厂中的一个或多个过程单元的访问、控制或提供与过程工厂中的一个或多个过程单元有关的操作的任何合适的结构。每个工厂级控制器130可以例如代表运行microsoftwindows操作系统的服务器计算设备。

可以由一个或多个操作员站132提供对工厂级控制器130的访问。每个操作员站132包括用于支持对系统100中的一个或多个部件的用户访问和控制的任何合适的结构。例如,每个操作员站132可以代表运行microsoftwindows操作系统的计算设备。

至少一个路由器/防火墙134将网络128耦合到一个或多个网络136。路由器/防火墙134包括用于在网络之间提供通信的任何合适的结构,诸如安全路由器或组合路由器/防火墙。网络136可以代表任何合适的网络,诸如企业范围以太网或其它网络,或者更大网络(诸如因特网)的全部或一部分。

在purdue模型中,“层级5”可以包括耦合到网络136的一个或多个企业级控制器138。每个企业级控制器138通常能够执行针对多个工厂101a-101n的规划操作并控制工厂101a-101n的各个方面。企业级控制器138还可以执行各种功能以支持对工厂101a-101n中的部件的操作和控制。作为特定示例,企业级控制器138可以执行一个或多个订单处理应用、企业资源规划(erp)应用、高级规划和调度(aps)应用或任何其它或附加的企业控制应用。每个企业级控制器138包括用于提供对一个或多个工厂的控制装置的访问、控制或提供与一个或多个工厂的控制装置有关的操作的任何合适的结构。例如,每个企业级控制器138可以代表运行microsoftwindows操作系统的服务器计算设备。在本文件中,术语“企业”指代具有待管理的一个或多个工厂或其它处理设施的组织。注意,如果要管理单个工厂101a,则企业级控制器138的功能可以合并到工厂级控制器130中。

可以由一个或多个操作员站140提供对企业级控制器138的访问。每个操作员站140包括用于支持对系统100中的一个或多个部件的用户访问和控制的任何合适的结构。例如,每个操作员站140可以代表运行microsoftwindows操作系统的计算设备。

purdue模型的各个层级可以包括其它部件,诸如一个或多个数据库。与每个层级相关联的(一个或多个)数据库可以存储与该层级或系统100的一个或多个其它层级相关联的任何合适的信息。例如,历史记录器141可以耦合到网络136。历史记录器141可以代表存储关于系统100的各种信息的部件。历史记录器141可以例如存储在生产调度和优化期间使用的信息。历史记录器141代表用于存储信息和促进信息检索的任何合适的结构。尽管被示出为单个集中式部件耦合到网络136,但是历史记录器141可以位于系统100中的其它位置,或者多个历史记录器可以分布在系统100中的不同位置。

在特定实施例中,图1中的各种控制器和操作员站可以代表计算设备。例如,控制器106、114、122、130、138中的每一个可以包括一个或多个处理设备142和一个或多个存储器144,存储器144用于存储由(一个或多个)处理设备142使用、生成或收集的指令和数据。控制器106、114、122、130、138中的每一个还可以包括至少一个网络接口146,诸如一个或多个以太网接口或无线收发器。而且,操作员站116、124、132、140中的每一个可以包括一个或多个处理设备148和一个或多个存储器150,存储器150用于存储由(一个或多个)处理设备148使用、生成或收集的指令和数据。操作员站116、124、132、140中的每一个还可以包括至少一个网络接口152,诸如一个或多个以太网接口或无线收发器。

在许多设备中,设备上安装或嵌入的软件提供多于硬件本身的价值。可能需要使用不同的软件个性来使硬件多用途化,从而为特定应用提供服务。需要高可用性的应用可以由一对冗余的嵌入式节点(本文中称为“主节点”和“备份节点”)提供服务。这样的冗余节点在冗余功能方面应该是相同的,但是可能存在由其它这样的孪生节点提供服务的几个不同应用,其中所有这样的孪生节点都从公共硬件平台得出。难以预测针对特定软件应用的硬件故障。这些节点或节点上运行的应用可以执行任何合适的功能,诸如作为i/o设备、控制器、接口模块、网络网关、网桥等进行执行。

解决潜在故障的一种方法是通过在特定备份硬件上预编程应用软件来储备硬件模块。订购的硬件通常可能带有不处于当前版本等级的应用。针对故障模块的替换节点必须在具有最少用户干预的情况下非常快速地启动和运行,并且“库存(backstocking)”冗余硬件经常是无效的。

在高可用性系统中,备份节点可以在主节点发生故障的情况下用作待命节点。在当前主节点发生故障时,该备份节点作为主节点进行接管。当替换故障节点时,很多时候新节点不处在相同固件等级。在将公共硬件平台用作单个储备单元的情况下,这种储备单元必须被加载有适当等级的固件,以便在它可以用作待命备份节点之前成为正在运行的主节点的孪生节点。实现待命备份节点或使其达到与主节点相同的固件等级的过程通常涉及从工程工具加载节点配置或图像的人类干预。

待命节点还可以包括“热待命”节点。热待命备份节点通常是与主节点完全同步的节点,从而使得它在主节点故障的情况下在一时间段内准备好接管,所述时间段足够短以使得受控过程的条件基本上不受到瞬时失控的影响。对于要成为热待命节点的节点,它不仅应该是兼容或孪生的固件版本,而且热待命节点的配置数据应该与主节点完全一致,并且热待命节点的动态状态数据应该与主节点完全一致。所公开的实施例还可以传递基本固件“个性”,而不仅仅是配置数据。如本文所使用的,“个性”指代用于使待命节点在功能方面成为主节点的复制的相关程序、操作系统、快闪图像(flashimage)和其它数据。通过传递全部个性,主节点有效地执行待命节点的必要程度的自动固件升级以匹配主节点。

所公开的实施例包括如下过程:主节点可以自动检测网络上的备份节点的存在,确保备份节点具有相同的硬件平台(或可接受的替换),诸如通过硬件签名,以及然后使用其配置来配置备份节点。

可以使用嵌入式节点(以及其它方式)来完成本文描述的过程和结果。图1中图示的任何控制器或其它设备可以用作本文所述的主节点或备份节点。出于说明的目的,连接到网络108的主节点154和备份节点170被描述为所公开的过程的示例。此外,虽然下面的特定示例将单个备份节点与给定主节点描述为冗余对,但是各种实施例可以包括针对主节点的多个备份节点,对应于1∶n冗余。

在该示例中,每个主节点154包括一个或多个处理设备156;一个或多个存储器158,用于存储由(一个或多个)处理设备156使用、生成或收集的指令和数据;和至少一个网络接口160(有线、无线或这些的组合)。每个处理设备156可以代表微处理器、微控制器、数字信号处理、现场可编程门阵列、专用集成电路或分立逻辑。每个存储器158可以代表易失性或非易失性存储和检索设备,诸如随机存取存储器或闪存。每个网络接口160可以代表以太网接口、无线收发器或促进外部通信的其它设备。可以使用任何合适的硬件或硬件和软件/固件指令的组合来实现主节点154的功能。

在该示例中,备份节点170包括一个或多个处理设备176;一个或多个存储器178,用于存储由(一个或多个)处理设备176使用、生成或收集的指令和数据;和至少一个网络接口172。每个处理设备176可以代表微处理器、微控制器、数字信号处理、现场可编程门阵列、专用集成电路或分立逻辑。每个存储器178可以代表易失性或非易失性存储和检索设备,诸如随机存取存储器或闪存。每个网络接口172可以代表以太网接口、无线收发器或促进网络通信的其它设备。可以使用任何合适的硬件或硬件和软件/固件指令的组合来实现备份节点170的功能。备份节点170可以是例如独立数据处理系统、移动设备、系统或设备控制器或其它装置,并且通常被配置为执行本文所述的动作以充当主节点154的冗余或备份节点,并且优选地具有与主节点154相同或等同的硬件构造。上述备份节点170的示例性结构不旨在限制可用于实现备份节点170的设备的结构或功能。

尽管图1图示了工业过程控制和自动化系统100的一个示例,但是可以对图1进行各种改变。例如,控制和自动化系统可以包括任意数量的传感器、致动器、控制器、服务器、操作员站、网络、风险管理器和其它部件。而且,图1中的系统100的构造和布置仅用于说明。可以根据特定需要按照任何其它合适的配置来添加、省略、组合或放置部件。此外,已经将特定功能描述为由系统100的特定部件执行。这仅用于说明。通常,控制和自动化系统是高度可配置的,并且可以根据特定需要按照任何合适的方式配置。另外,图1还图示了可以在其中使用主节点154和备份节点170的功能的示例性环境。此功能可用于任何其它合适的设备或系统中。

图2图示了冗余节点系统200的实施例,其中主节点154和备份节点170(包括如图1中所示的其它元件)通过主网络108连接,如图1中那样,并且也通过冗余路径210连接。根据各个实施例,下面描述的主节点154和备份笔记170之间的特定通信可以通过网络108或通过冗余路径210执行。冗余路径210可以被例如实现为单独的有线或无线网络或通过其它无线或有线连接(诸如wifi、usb、以太网或其它串行、并行、基于分组的或其它直接或间接连接)实现。在特定实现方式中,通过将冗余路径210与主网络108分离,备份节点170不需要在主网络108上具有单独的地址或其它配置,直到或除非它被激活以代替主节点154。

图3图示了根据所公开的实施例的由主节点154执行的过程300的示例。

根据所公开的实施例,主节点154可以检测备份节点170可用(即,被连接以使得主节点154可以与其通信)且未被配置(302)。这种检测可以基于:例如背板(其可以包括冗余路径210)上的信号电平,检测通过网络108来自备份节点170的广播,检测通过网络108或冗余路径210来自备份节点170的配置消息或其它消息,检测备份节点170与冗余路径210的物理连接或其它。主节点154和备份节点170可以连接到同一网络,并且也可以通过冗余路径210连接。

然后,主节点154可以针对标识查询备份节点170(304),标识诸如是硬件签名(例如,硬件版本)、型号或其它标识符。

主节点154从备份节点170接收标识(306)。

主节点154检验该标识对应于与主节点154兼容的硬件(308)。在各种实施例中,这可以包括:检验备份节点170的标识指示它是与主节点154相同的硬件,它是与主节点154不同但功能兼容的硬件,它是与主节点154相同或功能上兼容的硬件的仿真(诸如虚拟机或虚拟设备仿真)或者另外它能够执行与主节点154的备份节点相同的过程和功能。该步骤可包括:检验该标识对应于主节点154能够并被授权用作备份节点的硬件。

如果没有找到兼容硬件,则该过程可以结束。

如果找到兼容硬件,则主节点154自动将其自身复制到备份节点(310)。这可以包括:从主节点154向备份节点170发送一个或多个命令,该一个或多个命令使备份节点170发起启动序列。这可以包括从主节点154向备份节点170发送个性,所述个性使得备份节点170将备份节点170配置到主节点的个性或者另外根据主节点被配置。这可以包括从主节点154向备份节点170发送一个或多个应用用于在备份节点170上执行,使得备份节点170复制主节点154的操作。这尤其可以包括发送启动图像(诸如第一和第二阶段启动加载器)到备份节点170,接着发送用于备份节点执行启动序列的命令。这可以包括:主节点将一个或多个应用或节点图像拷贝到备份节点。可以通过网络连接或通过冗余路径执行复制。

复制可以包括执行任何必要的检查以确保智能地执行该复制。例如,主节点154可以确定给定主节点应用是否已经存在于备份节点上,是否具有相同版本或更新版本,以及不传递该应用。

备份节点170被激活(312)。这会把备份节点激活到主节点的“孪生”或复制个性的状态,备份节点还可以根据需要起作用以执行自动固件升级。在一些情况下,主节点154本身可以激活备份节点170。在其它情况下,备份节点170可以被配置为在它检测到主节点故障或丢失(无论通过网络连接还是冗余路径)时自动激活。

在其它实施例中,因为应用不支持必要的协议,备份模块可能无法与主模块通信。在这种情况下,或者在其它基于硬件的实施例中,主节点将备份节点标识为存在并尝试与备份节点通信。如果这些通信失败并且主节点无法与备份节点通信,则主节点可以使用本文所述的技术自动复制其个性和应用。

所公开的实施例提供了相对于如下系统的技术改进或优点:在所述系统中将配置加载到备份节点需要用户确保软件配置的兼容版本可用,需要单独的工程工具来加载软件配置,以及在将新模块添加到生产系统中或在生产系统中可用之前必须使用单独的工作台系统来准备所述新模块。所公开的实施例提供了“即插即用”方法,其中产品的用户不必担心软件应用类型或版本的可用性,并且将始终被保证具有与其主伙伴相同的配置。技术益处包括:保证主节点和备份节点之间的数据同步,在模块故障的情况下让客户无忧。另一技术益处可包括在冗余路径上执行本文所公开的过程而无需在主网络上分配ip地址。这允许较少依赖于至少特定节点寻址方案(诸如通过dhcp或bootp的ip地址分配)来访问新固件应该被加载到的节点,而是替代地提供使用任何其它低层级检测和寻址方案的灵活性。

在一些实施例中,本专利文件中描述的各种功能由计算机程序实现或支持,该计算机程序由计算机可读程序代码形成并且被体现在计算机可读介质中。短语“计算机可读程序代码”包括任何类型的计算机代码,包括源代码、目标代码和可执行代码。短语“计算机可读介质”包括能够被计算机访问的任何类型的介质,诸如只读存储器(rom)、随机存取存储器(ram)、硬盘驱动器、压缩盘(cd)、数字视频盘(dvd)或任何其它类型的存储器。“非瞬时性”计算机可读介质排除了传输瞬时电信号或其它信号的有线、无线、光学或其它通信链路。非瞬时性计算机可读介质包括可以永久存储数据的介质和可以存储数据以及可稍后覆写数据的介质,诸如可重写光盘或可擦除存储器设备。

在各种实施例中,可以复制、省略或重复上述各种部件、元件或步骤,并且除非特别声明,否则没有元件或步骤应被认为是必要的。

阐述遍及本专利文件使用的某些单词和短语的定义可能是有利的。术语“应用”和“程序”指代适于利用合适的计算机代码(包括源代码、目标代码或可执行代码)实现的一个或多个计算机程序、软件部件、指令集、过程、功能、对象、类、实例、相关数据或其一部分。术语“通信”及其衍生词包括直接和间接通信。术语“包括”和“包含”及其衍生词意指包括但不限于。术语“或”是包括性的,意指和/或。短语“与......相关联”及其衍生词可以意指包括、包括在......中、与......互连、包含、包含在......中、连接到或与......连接、耦合或与......耦合、可与......通信、与......协作、交错、并置、接近、被束缚到或与......束缚在一起、具有、具有......属性、与......有关系等。当与项目列表一起使用时,短语“至少一个”意指可以使用所列项目中的一个或多个的不同组合,并且可能仅需要列表中的一个项目。例如,“a、b和c中的至少一个”包括以下任何组合:a、b、c、a和b、a和c、b和c以及a和b和c。

虽然本公开已经描述了某些实施例和通常相关的方法,但是这些实施例和方法的改变和替换对于本领域技术人员而言将是显而易见的。因此,示例性实施例的以上描述不限定或约束本公开。在不脱离由所附权利要求限定的本公开的精神和范围的情况下,其它改变、替换和变更也是可能的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1