AUTOSAR知识点Com(十三):ComM内容分析

news2024/11/18 7:16:40

目录

1、概述

1.1、总览

1.2、功能描述

1.3、依赖关系

2、功能SPEC

2.1、PNC

2.2、通道状态机

2.3、时序图解析

3、COMM工具配置

3.1、ComMGeneral

3.2、ComMConfigSet


1、概述

1.1、总览

        ComM的全程是Communication Manager 管理通信,是BSW里面的一个组件,位于AUTOSAR的系统服务层,组件位置如下图。

         作为一个资源管理者,ComM封装了下层的通信服务,ComM控制通信相关的BSW模块,但不会去控制SWC或Runnable,ComM与USER用户直接交互(USER:可以是直接下发指令给ComM的模块,也可以是BSWM、SWC、Runables),ComM对下而言主要通过xxxSM、Nm来实现通信控制,实现SM与NM的协同。

1.2、功能描述

ComM模块的主要作用是:

1、简化用户对于总线通信协议的使用方式,包括简化的网络管理处理(这部分是不是可以人为ComM其实也有一定的网络管理作用呢?)

2、协调一个ECU上多个独立软件组件的总线通信栈的可用性(允许发送和接收信号)。

在上述情况里面,用户(user)无需知道硬件细节,例如应当使用哪个通道,只需要请求通信模式,ComM就会切换对应的通信通道状态。

3、提供API用以禁止信号的发送功能,防止主动唤醒总线上的其他ECU。

4、每一路Channel都有自己的状态机,ComM可以控制多个Channel,下文的配置里面会体现,将请求的通信模式给到CanSM\EthSM等,由CanSM\EthSM执行具体的操作,这点上文已经描述了ComM是一个资源管理者,不参与具体的执行操作,只是把指令下发下去。

每一路Channel都有自己的状态机程序体现。

配置体现

5、提供API强制让ECU进入No Communication状态

6、为请求的通信模式分配足够的资源,来简化资源管理,在用户请求Full Communication模式时,判断是否允许通信或者在通信状态下防止ECU进入shutdown状态。

7、另外,PNC扩展,也即“部分网络管理”,允许用户请求并将某一网络上被分到同一个逻辑分组的ECU保持唤醒状态, PNC gateway允许将不同物理总线和网络进行逻辑上的区分。

大体总结下来也就三个方面。

1、管理网络连接状态

ComM负责管理网络连接状态,当某个模块需要进行通信时,它会向 ComM 请求网络连接。ComM会根据当前网络状态和其他模块的请求情况,确定是否建立连接以及选择合适的连接方式。同时,如果整个系统的网络状态发生变化,ComM 也会及时通知其他模块,并做出相应处理。

2. 管理通信模式

Autosar-ComM 提供了多种通信模式,包括全通信、只收、只发、高速总线和低速总线等。ComM根据系统的实际需求和网络状况,选择合适的通信模式。例如,在电池电量不足的情况下,ComM 可能会将所有模块切换到“只收”模式,减少系统负担,延长电池寿命。

3.提供安全机制

Autosar-ComM 提供了一些安全机制,以确保系统数据安全和稳定性。例如,ComM 可以限制某些模块的网络访问权限,只允许授权的模块进行通信,防止非法侵入和数据泄露。同时,如果某个模块的通信异常,ComM 也可以及时发现并进行处理,避免整个系统受到影响。在实际应用中,Autosar-ComM 是非常重要的模块,其稳定性和可靠性直接关系到整个系统的运行效果和安全性。因此,开发人员应该重视 ComM 模块的设计和实现,尽可能减少通信故障和安全漏洞,为用户提供更好的使用体验和保障。同时,随着汽车电子系统的发展和进步, ComM模块的功能和性能也会不断地升级和完善,以满足用户对系统安全和稳定性的不断需求。

1.3、依赖关系

与AUTOSAR其他模块的依赖关系如下

RTE : 每个用户都可以请求一个通信模式。RTE将用户请求传播到ComM模块,并将ComM的通信模式指示传播给用户(此处一般是SM或者NM)。

EcuM :负责验证唤醒事件,然后发送指示到ComM, ComM切换到COM模式。ECU通讯的允许和关闭是由EcuM和BswM一起完成。(这点是存疑的,规范里面对这里其实并不是特别理解,之前的印象里面ECUM更侧重的是初始化)

BswM :配置Com相关的Action和Rules ,从而控制相关的通信,同时通信状态的改变也会报告给BswM ,在EcuM Flex下, BswM也会将Com允许通信的功能告诉ComM。

至于BSWM怎么去控制PDU Group呢?只需要在action list里面增加Com_IpduGroupControl此API的控制就好了。

NvM :负责处理与ComM相关的Nv Data操作。

注释:NVRAM管理器必须在上电或复位ECU后初始化。它必须在ComM之前初始化,因为当ComM初始化时,ComM假设NVRAM已经准备好使用,并且它可以回读非易失性配置数据。当ComM被去初始化时,它将非易失性数据写入NVRAM。

DCM:执行和诊断相关的ComM请求。作为一个user,DCM调度诊断PDUS通信到COMM_FULL_COMMUNICATION,为了不破坏分层结构,DCM不直接提供开始或者停止接口的,使用的是DCM_ActiveDiagnostic API

xxxSM :包括了具体的通信媒介的状态管理,如CanSM,LINSM, EthSM, FrSM等,控制实际的总线状态,ComM请求xxxSM进行相关的状态转换,并传递到总线上。

NM:同步整个Ecu总线的开关。

Com :通过Com信号区分PNC的状态信息。DET:用于在开发中追溯ComM开发相关的错误。

2、功能SPEC

2.1、PNC

PNC的英文名:partial network cluster,个人的理解:某种条件下保持相同工作状态,且连接在同一个总线或者网关的ECU称之为一组PNC。

ComM为每个局部网络集群(PNC)实现一个状态机,以表示PNC的通信模式。每个PNC都有自己的状态。对于简单的映射,状态定义与ComM的状态相关。

ComM 可以请求与释放所有的PNC

系统通道节点上所有pnc的状态通过网管用户数据交换。

每个PNC在CAN和FlexRay上的NM用户数据的位向量内使用一个专用位。如果本节点的本地ComM用户请求PNC,则本节点将NM用户数据中对应的位置为1。如果不再要求PNC;节点将NM用户数据中相应的位置为0。总线nms为pnc收集和汇总NM用户数据,并通过COM信号向ComM提供COM位向量的状态。

工作项目里面没有使用PNC所以是关闭的

注意一下在AUTOSAR4.2.2里面最大支持56个PNC状态。

ComM 模块对每组 PN 定义了一组状态机,用于描述各 PN 组的状态、状态转移关系和状态转移动作。该状态机共包含 4 种状态,分别为:

1. PNC_NO_COMMUNICATION

2. PNC_PREPARE_SLEEP

3. PNC_READY_SLEEP

4. PNC_REQUESTED

状态机如下

观察状态切换图,可以看到上面出现了ERA, EIRA的字眼,无论是开启还是关闭ECU的通信功能,都是需要进行请求的,而这个请求则分为内部请求与外部请求,我们称之为External Internal Request Array,也即EIRA。每一个ECU都需要有EIRA,来根据部分网络活动进而切换IPdu Group的状态。至于ERA , External Requested Array ,它主要用于网关,仅收集外部PN请求的场景。网关会将外部PN请求镜像回请求总线,同时将这个请求发送到其他的总线上。IRA , Internal Requested Array ,代表ECU内部对于PNC状态的请求,既可以是SWC通过RTE直接请求ComM接口,或者在某种条件满足时,由BswM请求ComM接口。

系统上电后整个PNC的状态在PNC_NO_COMMUNICATION。

在PNC状态切换过程中如果是主动唤醒节点直接请求FULL通信,或者是网关节点控制的节点在收到网关下的ERA数组的相关状态位,直接从

PNC-NO-COMMUNICATION进入到PNC-REQUESTED阶段。如果是被动唤醒的节点,则根据接收到唤醒报文中的PNC位状态切换到PNC_READY_SLEEP或者PNC_PREPARE_SLEEP.而PNC_FULL_COMMUNICATION内部的三个子状态的切换也是根据该节电的是否能被动唤醒功能进行内部的状态切换,主要体现是主动唤醒下需要Request Full相关的操作以及NM报文中对应的UserData中相关的PNC位进行转换的。

总结一下可以让ComM的PNC状态机切换的事件可以来自于:

1.来自用户的请求 ComM_RequestComMode()函数调用

2. 来自 EcuM 模块的唤醒通知 ComM_EcuM_WakeUpIndication()

3. 来自 Com 模块的 PNC 值变化通知

4. ComM 模块内部定时器超时事件

注意点:PNC_READY_SLEEP(内部) PNC_PREPARE_SLEEP(外部)同样是准备进入休眠状态,但是来源是不一样的。

所有的PNC操作都应在执行通道相关操作之前执行

2.2、通道状态机

所有的PNC操作都应在执行通道相关操作之前执行

ComM只提供了三种不同的通信模式

1. COMM_NO_COMMUNICATION :系统上电后进入到COMM_NO_COMMUNICATION ,在该状态下具有下面两个子状态:COMM_NO_COM_NO_PENDING_REQUEST和COMM_NO_COM_REQUEST_PENDING

2. COMM-NO_COM-NO-PENDING-REQUEST :在初始化完成ComM后进入该状态,该状态下总线不能进行任何的通信活动,需要等待FULL_COM请求切换状态,请求可来源于:用户请求User Request; DCM Notification需要激活对应的通道;来自于EcuM或者NM的Passive WakeUp通知。

3. COMM_NO_COM_REQUEST_PENDING :收到FULL_COM请求后,会切换至COMM_NO_COM_REQUEST_PENDING状态,然后等待Communication Allowed的触发信号,只有"CommunicationAllowed=TRUE时"才能将通信模式转换为FULL_COM模式下进行数据通信,如果没有Allowed的使能,则对FULL_COM请求将不会被执行。

4. COMM_FULL_COMMUNICATION :离开NO_COM状态后,则进入COMM_FULL_COMMUNICATION状态,在该状态下总线可以进行正常的数据通信,其也有两个子状态: COMM_FULL_COM_NETWORK_REQUESTED和COMM_FULL_COM_READY_SLEEP。而这两个模式的切换则是会根据NmVariant的变化来变化,后面会对NmVariant进行介绍。

5. COMM_SILENT_COMMUNICATION :该状态主要用于支持NM的Sleep流程处理,是NM状态机的Prepare Sleep阶段,只有在NM进入到prepare Sleep模式下该状态才进入,表示仅仅在NM下才会出现此状态。

总结一下可以让ComM的Channel状态机切换的事件可以来自于:

1. 来自 User 的请求 ComM_RequestComMode()函数调用

2.来 自Dcm 模 块 的 ComM_DCM_ActiveDiagnostic() 和ComM_DCM_InactiveDiagnostic()函数调用

当诊断仪与Dcm模块通信时,需要保证通道的正常可用状态,不能进入休眠。这时Dcm模块通过在适当的时机调用ComM模块的ComM_DCM_ActiveDiagnostic()来请求通道保持在FULL_COM状态。 完成诊断通信后, Dcm模块再调用ComM_DCM_InactiveDiagnostic()接口释放对通道的使用。这时如果没有其他用户再使用该通道,则通道最终将进入NOCOM模式,通道关闭,所以在前面介绍Channel状态管理状态切换的时候就提到了Dcm模块是让ComM Channel状态切换的一个重要来源。

3. 来 自 Nm 模 块的网 络状态 通 知 ComM_Nm_NetworkMode() 与ComM_Nm_PrepareBusSleepMode()和ComM_Nm_BusSleepMode()函数调用

4.来自Nm的ComM_Nm_RestartIndication()和ComM_Nm_NetworkStartindication()

5.来自EcuM 模块的唤醒通知 ComM_EcuM_WakeUplndication()当某个通信通道发生唤醒事件后, EcuM会调用ComM_Wakeuplndication()函数通知ComM模块。该通知会作为通道正常工作的一个触发源,将该通道状态切换到FULLCOM模式。这时ComM会调用网络管理模块的Nm-PassiveStartup()唤醒网络管理模块。

6. ComM模块内部定时器等

通信禁止包含两种情况:一是禁止唤醒总线,二是限制通信。在某些唤醒线路故障情况下,某些应用会错误地请求总线,从而错误地唤醒总线上其他ECU。这时可以通过调用ComM_PreventWakeUp()接口,忽略用户请求,从而避免系统错误。该功能称为禁止唤醒总线。该功能只在对应通道进入NO_COM或SILENT_COM时有效。当通道处于 FULL_COM 模式时 ,应用可以调用 ComM_LimitChannelToNoComMode()或 ComM_LimitECUToNoComMode()来强制某个通道或整个 ECU 所有通道进入 NO_COM模式。这时 ComM 将忽略 User 对通道的占用,调用 Nm_NetworkRelease()释放网络管理。当远程休眠条件满足时,通道将最终进入 NO_COM模式。该功能称为限制通信。该功能只在对应通道处于FULL-COM时有效

User\PNC\Channel三者关系如下图所示

每个User向下可以关联多个PNC,每个PNC向上也可以关联多个User, User既可以关联PNC也可以直接关联Channel,每个PNC向下可以关联多个Channel,每个Channel向上也可以关联多个PNC或User.但是同一Channel不能既关联User,又关联该User下的PNC。说得简单点就是自上而下,是交叉树状自上而下,用户想要控制一个一个总线接口,可以是User->PNC->Channel,也可以是User->Channel。

User 可以通过接口请求 FULLCOM 和 NOCOM 模式,此时所有该 User 映射的通道或 PNC 都会收到请求。由于一个通道或 PNC 可以映射多个User,因此只有当映射的所有User都请求了NOCOM时, ComM才会在该通道或PNC上释放通信能力,否则只要有一个User 请求 FULLCOM ,ComM 都会为该通道或 PNC 保持通信能力。

在某些特殊情况下,用户可以通过API限制某个通道或整个ECU的通信能力,这时即使有用户请求FULLCOM,该请求也会被暂时抑制。限制通信的优先级高于 User 对通道的请求。

DCM模块会使用某些通道作为诊断通道。它通过API激活该通道的通信能力。此时不论该通道映射的User请求何种模式,也不论该通道是否被限制通信,ComM 都会为该通道保持通信能力,也就是说 DCM 激活通道的优先级最高

ComM 的一些配置状态和计数值可以保存到非易失存储器中,在下次上电后恢复。可以保存的内容包含:

1. ECU 所有通道的禁止唤醒总线状态( NoWakeup )

2. ECU 组分类( EcuGroupClassification)

3.禁止计数器

当使能此功能时,需要在 NvM模块配置这几个 Block,且需要将其在 NvM模块中将这几个模块配置在ReadAll 和WriteAll 列表中,以便在上电时自动恢复数据,以及下电前自动保存数据。

2.3、时序图解析

下图是开始接收与发送时序图,其实很容易误解下面的图,下面的图含义是启动之前需要执行什么操作,有了西面这个时序才可以执行传输操作的。可以看到直接调用的是CANSM的API来执行操作的。

下图为被动唤醒时序图,目前的项目里面仅仅执行了此唤醒

网络shutdown时序图如下,这个图着重关注一下,在AUTOSAR4.2.2手册《AUTOSAR_SWS_COMManager.pdf》的P111

通讯请求时序图如下

3、COMM工具配置

由于项目尚未使用PNC功能,所以展示的配置项里面并没有PNC的配置项,且看且注意。

3.1、ComMGeneral

ComMDirectUserMapping:自动生成user

设置为true时,配置工具会根据ComMPnc和ComMChannel自动创建ComMUser。生成的ComMUsers的shortName应遵循以下命名约定:pncuser_commnld,例如PNCUser_13ChannelUser_ComMChannelld,例如ChannelUser_25 限制:由于此配置参数而创建的ComMUser不能被swc使用(仅对BswM可用)。

ComMEcuGroupClassification定义模式抑制是否影响ECU

000 没有模式抑制激活

001 唤醒抑制使能

依赖性:至少在唤醒抑制启用/允许的情况下,应该存储非易失性(在重置期间必须保持值)。可以在运行时使用ComM_SetECUGroupClassification()进行更改,因此默认值应该只设置一次(第一次ECU初始化)。

ComMModeLimitationEnabled:启用模式限制功能,上文有描述,能单独控制某一个Channel的。

3.2、ComMConfigSet

ComMBusType:定义总线类型,目前4.2.2只包含了以下几种

 

ComMChannelId 这点一定要注意一下不要配置,默认的顺序在ComMUser配置里面的,目前使用的ETAS工具配置了此项会导致多个Channel的情况下错位。

ComMFullCommRequestNotificationEnabled:回调函数的使能,此处不是自己定义的回调函数,如下解释的。

ComMNoCom

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于大模型对未来影响的一点看法

人们总是高估了未来一到两年的变化,低估了未来十年的变革。 ---比尔盖茨 近来OpenAI的GPT技术可以说在全球都带来了巨大的影响,也让大家看到了什么叫大力出奇迹。chatGPT和GPT4的能力给了大家很大的震撼,其流畅自如、逻辑清晰、出众的能力&am…

【vscode远程开发】使用SSH远程连接服务器 「内网穿透」

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

Rosetta从头蛋白抗体设计、结构优化及在药物研发中的应用

Rosetta从头蛋白抗体设计、结构优化及在药物研发中的应用 第一天 内容 主要知识点 从蛋白质折叠到蛋白质设计教学目标:了解本方向内容、理论基础、研究意义。 蛋白质折叠与结构预测简介 主链二面角与二级结构侧链堆积与三级结构蛋白质设计简介 蛋白质设计的分…

shell编程之条件语句__例题

文章目录 (1) 检查用户家目录中的test.sh文件是否存在,并且检查是否有执行权限. [rootclr /opt/mywork]# cat 1.sh #!/bin/bash #检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权 cd /roottest -f test.shif [ $? -eq 0 ];thentest -x…

插件、组件、控件,你分得清吗?

最近和小伙伴交流,时常发生插件、组件、控件等概念混淆的情况,因此导致经常会错意。感觉还是很有必要带大家整理清楚的,今天就来跟大家来聊一聊插件、组件、控件的区别。 什么是插件 先按照官方的一些解释来看看插件的概念描述?…

搭建Debug(printf)Viewer调试环境

希望对KEIL开发的小白的有用&#xff0c;KEIL开发如果高效正确调用Printf 打印输出调试信息。 需要添加红色字体代码 #include <stdio.h> #define ITM_Port8(n) (*((volatile unsigned char *)(0xE00000004*n))) #define ITM_Port16(n) (*((volatile unsigned short *)(…

Android类似微信聊天页面教程(Kotlin)五——选择发送图片

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

【模拟IC学习笔记】 负反馈系统的稳定性

反馈方程 输出方程 误差方程 环路增益 定义:当输入电压接地、并将环路断开时&#xff0c;所计算的增益就是环路增益 时&#xff08;幅度1&#xff0c;相位-180&#xff09;电路稳定在电源或低状态或在电源和地之间振荡。 分析稳定性时是对环路增益进行分析&#xff0c;通过环…

Java+Selenium+Testng自动化学习(一):环境搭建

目录 一、软件准备及版本介绍&#xff1a; 二、安装步骤及环境变量配置&#xff1a; 2.1 Java安装及配置 2.2 IDE工具&#xff08;Intellij IDEA&#xff09;安装及配置 2.3 Maven安装及配置 2.4 Maven本地仓库配置 2.5 Intellij IDEA配置mvn 一、软件…

全开放式时代来临,南卡OE带给你非同寻常的舒适和听觉感受

NANK南卡一直致力于深耕音频领域&#xff0c;不断创新&#xff0c;将于五月份发布全新形态的全开放式蓝牙耳机。相较于传统耳机&#xff0c;开放式蓝牙耳机除了佩戴零感舒适&#xff0c;还能在沉浸音乐的同时与外界保持沟通。南卡OE作为新推出的开放式蓝牙耳机&#xff0c;采用…

7年从测试废物到测试主管,如何从纯功能测试内卷中破局?

我大学学的计算机专业&#xff0c;有一点编程基础。我的软件测试职业开始和大多数测试人员一样&#xff0c;一开始在一家电商公司做软件功能测试。 大部分进入测试行业的朋友&#xff0c;最开始接触都是纯功能界面测试&#xff0c;随着工作年限&#xff0c;会接触到一些常用测试…

计算机体系结构总结:内存一致性模型 Memory consistency Model

存储一致性是为了保证多线程背景下的访存顺序&#xff0c;多线程的语句是可以交错执行&#xff0c;使得顺序不同产生不同的执行结果。 下面P2的输出结果可能是什么&#xff1f; P1, P2两个线程的语句是可以交叉执行的&#xff0c;比如1a, 2a, 2b, 1b&#xff1b;一个线程内的语…

网络基础学习:什么是网络与网络发展史

什么是网络与网络发展史 什么是网络&#xff1f;什么是网络发展史&#xff1f;分组交换技术TCP/IP技术Web技术ARPANET&#xff08;1969年&#xff09;Internet&#xff08;1983年&#xff09;万维网&#xff08;1990年&#xff09;移动互联网&#xff08;2007年&#xff09;物联…

Golang - GraphQL 搭配 Database

介绍 上一篇我们用GraphQL 已经有个基本的认识 接着来模拟真实的情境搭配Database 来使用 这篇主要都是在初始化环境 示例代码 通过 Docker 设置 MySQL 数据库 从 DockerHub 拉取 MySQL 镜像docker pull mysql 创建MySQL数据库 $ docker exec -it mysql bash $ mysql -u …

Python代码学习之给图片添加文字或图片水印

前言 图片加水印有什么好处&#xff1f;在现今的数字化时代&#xff0c;网络上的图片泛滥&#xff0c;盗图现象也越来越严重。因此&#xff0c;在发布文章时&#xff0c;为了保护自己的原创作品版权&#xff0c;很多人选择使用水印来保护他们的图片。这样就能更好地做到&#…

Java基础(十九)反射机制

1. 反射(Reflection)的概念 1.1 反射的出现背景 Java程序中&#xff0c;所有的对象都有两种类型&#xff1a;编译时类型和运行时类型&#xff0c;而很多时候对象的编译时类型和运行时类型不一致。 Object obj new String(“hello”); obj.getClass() 例如&#xff1a;某些变…

ChatGPT技术如何助力汽车门店销售服务水平提升?

过往&#xff0c;由于线下销售过程没有数字化记录&#xff0c;销售顾问的销讲要点执行情况、客户在体验展车、试乘试驾等过程中的反馈&#xff0c;没法真实全面地记录下来&#xff0c;因此很难做精细化的销售管理和客户心声分析。销售沟通过程不透明、员工服务质量难评估。 在…

Docker启动多个mysql容器

原有镜像mysql5.7.41&#xff0c;已启动mysql容器端口3306&#xff0c;再启动一个端口号为3400的容器。指定用户名root,mima &#xff0c;密码123456 命令&#xff1a; docker run --name zjfz-mysql -e MYSQL_ROOT_PASSWORD123456 -p 3400:3306 -d mysql 名字&#xff1a;zjfz…

【软考备战·希赛网每日一练】2023年5月5日

文章目录 一、今日成绩二、错题总结第一题 三、知识查缺 题目及解析来源&#xff1a;2023年05月05日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 有返回消息的就是同步消息&#xff1b;不需要等待返回消息就可以去做其他事情的请求消息就是异步消息…

数影周报:假冒ChatGPT的恶意软件激增,谷歌开启无密码登录

本周看点&#xff1a;假冒ChatGPT的恶意软件激增&#xff1b;谷歌开启无密码登录&#xff1b;京东申请注册Chat相关商标&#xff1b;Flexport收购 Shopify Logistics...... 数据安全那些事 Meta&#xff1a;假冒ChatGPT的恶意软件激增 美东时间周三&#xff0c;Facebook的母公司…