永磁同步电机的磁场定向控制

目录

概述

通过系统仿真验证行为

探索模型架构

生成用于集成到嵌入式应用程序的控制器 C 代码

指定控制器模型的参考行为

创建 PIL 实现

准备用于 PIL 测试的控制器模型

测试生成的代码的行为和执行时间

结论


        此示例说明从电机控制算法生成 C 代码并验证其编译行为和执行时间的基本工作流和关键 API。使用处理器在环 (PIL) 仿真来确保 C 代码在集成到与电机硬件对接的嵌入式软件时按预期执行。虽然该工作流使用针对特定处理器的电机控制应用程序,但您可以将该工作流应用于另一个应用程序或处理器。

如图所示:

        该示例使用永磁同步电机的磁场定向控制算法。该控制方法在混合动力汽车、机械制造和工业自动化领域的电机驱动系统中很常见。

概述

        在此示例中,将从一种控制算法模型生成和验证 C 代码,您可以将此代码集成到与电机硬件对接所需的其他嵌入式软件。

        使用一种仿真环境来对闭环电机控制系统的行为进行建模和验证。设定控制系统行为后,从控制器模型生成 C 代码。在检查代码后,通过使用处理器在环 (PIL) 测试来评估其功能性行为和执行时间。

如图所示:

        为便于进行 PIL 测试,请选择测试信号来运行控制器模型并建立参考输出。查看一个针对 Texas Instruments™ F28335 处理器的 PIL 实现示例,该处理器通过串行连接与开发计算机上的 Simulink® 通信。可以基于此示例针对您自己的处理器创建一个 PIL 实现。要测量执行时间并根据仿真参考输出验证在嵌入式处理器上的代码的执行行为,请在 PIL 模式下运行控制器模型。

        在嵌入式处理器的最终实现中,您将所生成的控制器 C 代码与其他嵌入式软件(例如与电机硬件对接所需的外设和中断)进行集成。

注释

  • Simscape™ Electrical™ 是“通过系统仿真验证行为”一节中的系统仿真所必需的。对其他任务而言,它不是必需的。

  • Texas Instruments F28335 PIL 实现是一种可应用于其他处理器的参考方法。但如果您要直接使用此实现,则需要 Texas Instruments 提供的其他支持文件、编译器和工具。有关详细信息,请参阅此示例中的“创建 PIL 实现和向 Simulink 注册”。该参考 PIL 实现不需要 Embedded Coder® 的 Texas Instruments C2000™ 嵌入式目标功能,但鼓励 C2000 用户使用附加功能资源管理器安装 Texas Instruments C2000 支持包。

通过系统仿真验证行为

        在本节中,在闭环系统仿真中验证控制器。

        系统模型测试平台包括测试输入、嵌入式处理器、电力电子元件和电机硬件以及可视化。可以使用系统模型来运行控制器并探索其预期行为。可以使用以下命令来执行模型并绘制记录的信号。

open_system('PMSMSystem');
out_system = sim('PMSMSystem');
pmsmfoc_plotsignals(out_system.logsout);

如图所示:

        绘图显示电机在 motor_on 信号为真 (true) 之前一直处于静止状态。然后,电机以开环方式开始旋转,直到编码器的索引脉冲指示检测到已知位置。然后,控制器会转换到闭环操作,并且电机达到稳态速度。

探索模型架构

        本节探讨模型架构,包括如何设定数据、如何从测试平台对控制器分区以及如何调度控制器。此架构便于进行系统仿真、算法代码生成和 PIL 测试。

        数据定义文件会创建仿真和代码生成所需的 MATLAB® 数据。系统测试平台模型的 PreLoadFcn 回调会自动运行数据定义文件。

edit('pmsmfoc_data.m')

        在系统测试平台模型中,会将嵌入式处理器建模为外设和控制器软件的组合。

open_system('PMSMSystem/Embedded Processor');

如图所示:

        控制器软件在单独的模型中指定。在该模型中,Mode_Scheduler 子系统使用 Stateflow® 来调度 Motor_Control 算法的不同操作模式。

open_system('PMSMController');

如图所示:

        在 Motor_Control 子系统中,传感器信号转换为工程单位并传递给核心控制器算法。控制器算法会计算电压。然后,电压将转换为驱动信号。

open_system('PMSMController/Motor_Control');

如图所示:

        磁场定向控制器起主要控制作用。该控制器用低速率外环控制速度,用高速率内环控制电流。

open_system('PMSMController/Motor_Control/Field_Oriented_Controller');

如图所示:

        速度控制器外环以电流控制循环时间的倍数执行。可以查看指定这些采样时间的 MATLAB 变量:

fprintf('High rate sample time = %f seconds\n', ctrlConst.TsHi)
fprintf('Low rate sample time  = %f seconds\n', ctrlConst.TsLo)
High rate sample time = 0.000040 seconds
Low rate sample time  = 0.005000 seconds

        请注意,控制器算法中的最高速率为 25 kHz。

fprintf('High rate frequency = %5.0f Hz\n', 1/ctrlConst.TsHi)

High rate frequency = 25000 Hz

生成用于集成到嵌入式应用程序的控制器 C 代码

        在本节中,生成并目视检查控制器的 C 代码函数。

        为便于集成,将控制器模型配置为单任务模式,以便可以使用一个函数调用来调用生成的代码。此函数可处理较低和较高的速率。所生成的控制器函数必须以高速采样时间执行。

        函数原型在模型配置参数中指定,输入和输出端口作为参数传递。可以查看控制器算法的函数设定。

mdlFcn = RTW.getFunctionSpecification('PMSMController');
disp(mdlFcn.getPreview('init'))
disp(mdlFcn.getPreview('step'))
Controller_Init ( )
error = Controller ( motor_on, command_type, current_request, * sensors, * pwm_compare )

        通过在生成的代码中使用全局结构体,可以访问磁场定向控制器的比例增益和积分增益。全局结构体在数据定义文件中指定。

disp(ctrlParams.Value)
disp(ctrlParams.CoderInfo)
                            Current_P: 10
                            Current_I: 10000
                           Velocity_P: 0.0050
                           Velocity_I: 0.0150
                           Position_P: 0.1000
                           Position_I: 0.6000
                  StartupAcceleration: 1
                       StartupCurrent: 0.2000
                   RampToStopVelocity: 20
             AdcZeroOffsetDriverUnits: 2.2522e+03
                 AdcDriverUnitsToAmps: 0.0049
    EncoderToMechanicalZeroOffsetRads: 0
                        PmsmPolePairs: 4

Simulink.CoderInfo
    StorageClass: 'ExportedGlobal'
      Identifier: ''
       Alignment: -1

        从模型生成 C 代码。

slbuild('PMSMController');
### Starting build procedure for: PMSMController
### Successful completion of build procedure for: PMSMController

Build Summary

Top model targets built:

Model           Action                        Rebuild Reason                                    
================================================================================================
PMSMController  Code generated and compiled.  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 29.573s

        使用生成的报告检查生成的 C 代码文件,并验证生成了正确的单步函数和初始化函数。还要验证参数结构体是作为全局变量创建的。

指定控制器模型的参考行为

        在本节中,指定测试输入和参考输出,以帮助验证 PIL 测试期间的行为和探查执行时间。

        制作控制器模型的一个本地副本,并加载一组在控制器内运行不同模式的测试输入信号。配置控制器模型以将记录的信号连接到输入端口。然后执行控制器模型,并将输出端口信号记录到工作区。

        指定参考行为和测试环境的控制器模型的配置参数将按如下所述进行更改。指定控制器模型设计和生成生产代码的模块和参数不会更改。但是,为避免修改安装的控制器模型的任何部分,请保存模型并将其名称更改为 PMSMControllerLocal.slx。

save_system('PMSMController','PMSMControllerLocal.slx')
close_system('PMSMSystem',0);
close_system('PMSMController',0);

如图所示:

        要探查执行时间,请选择一组将在控制器中执行关注路径的测试输入。获取这些测试输入和参考输出的一种方法是从系统仿真模型中记录它们。

in.motor_on      = out_system.logsout.getElement('motor_on').Values;
in.command_type  = out_system.logsout.getElement('command_type').Values;
in.command_value = out_system.logsout.getElement('command_value').Values;
in.sensors       = out_system.logsout.getElement('sensors').Values;
disp(in)
         motor_on: [1×1 timeseries]
     command_type: [1×1 timeseries]
    command_value: [1×1 timeseries]
          sensors: [1×1 struct]

        可以将信号附加到输入端口并将信号导入控制器模型中,以便它可以在系统模型中直接独立执行。这种方法的优点是您可以将控制器模型作为独立组件进行测试和验证,以便于重用和与其他系统模型或闭环测试平台进行集成。要详细说明或准备用于测试的控制器模型,请更改其配置参数,以附加输入信号并将日志信号记录在 MATLAB 工作区中。可以通过“配置参数”对话框进行更改,或以编程方式进行更改,如下所示。

set_param('PMSMControllerLocal',...
    'LoadExternalInput', 'on',...
    'ExternalInput', 'in.motor_on, in.command_type, in.command_value, in.sensors',...
    'StopTime','0.06',...
    'ZeroInternalMemoryAtStartup','on',...
    'SimulationMode', 'normal')
save_system('PMSMControllerLocal.slx')

        现在,可以执行控制器模型并绘制与 PWM Compare 输出端口相关联的信号。

out = sim('PMSMControllerLocal');
controller_mode = out.logsout.getElement('controller_mode').Values;
pwm_compare_ref = out.logsout.getElement('pwm_compare').Values;
pmsmfoc_plotpwmcompare(controller_mode, pwm_compare_ref)

如图所示:

        记录的输出用作 PIL 测试的参考行为。

        请注意,绘图带有注释,描述在每个时间步上有关控制器模式的信息。此模式信息在解释执行探查信息时非常有用。

创建 PIL 实现

        在本节中,学习并使用一个示例 PIL 实现。首先查看 Embedded Coder 提供的先决条件帮助文档。然后将示例 PIL 实现复制到您的本地文件夹中,并向 Simulink 注册该实现。查看用于开发 PIL 实现的方法,并探索相关联的文件以获得更多见解。如果使用 Spectrum Digital Inc. 的具有 Code Composer v4 的 eZdsp F28335 板卡和串行连接,可以配置 PIL 实现以与控制器模型配合使用。如果使用的是其他处理器,则可以使用 PIL 实现作为实现的起点。

        Create PIL Target Connectivity Configuration for Simulink中描述了创建自定义 PIL 实现的基础知识。熟悉使用 rtiostream API 的概念,以便在 PIL 测试期间在 Simulink(主机端)和嵌入式处理器(目标端)之间进行通信。请注意,Embedded Coder 提供默认 TCP/IP 实现的主机端驱动程序(适用于 Simulink 支持的所有平台)以及一个仅适用于 Windows® 的版本来支持串行通信。使用联编文件编译生成的代码。请参阅Customize Template Makefiles。要创建 PIL 实现,您必须在嵌入式环境中执行若干任务,包括编写目标端通信驱动程序、编写用于编译生成的代码的联编文件,以及自动化下载和执行编译的可执行文件。

如图所示:

        使用该方法创建的 PIL 实现可用于 Spectrum Digital Inc. 的 eZdsp F28335 板。该实现包含以下目标连接 API 组件:

  • 主机端通信 - 主机端连接驱动程序配置为使用串行通信。

  • 目标端通信 - 目标端通信需要使用 rtiostream 函数以及计时器访问函数的手写串行实现。

  • 编译过程 - 使用基于联编文件的方法来编译可执行应用程序。

  • 启动程序 - 使用 Code Composer Studio™ v4 (CCSv4) 的调试服务器脚本 (DSS) 实用工具完成下载和运行可执行文件。

PIL 实现分三个阶段进行迭代开发。在开发 PIL 实现时,可以使用类似的方法。

第 1 阶段:使用 CCSv4 创建串行通信应用程序

  • 安装 CCSv4 并验证它可以与 F28335 eZdsp 板卡连接。

  • 编写用于发送和接收串行数据的嵌入式应用程序。

  • 测试开发计算机和嵌入式应用程序之间的串行通信。

  • 确定编译器、链接器和打包器使用联编文件编译应用程序所用的命令和选项。

  • 使用 DSS 实用工具从 Windows 命令提示符下载并运行应用程序。

第 2 阶段:使用 MATLAB 实现和测试嵌入式串行 rtiostream 并启动自动化

  • 扩展串行应用程序以实现用于回显数据的 rtiostream API 函数。编写 rtIOStreamOpen 来执行常规板卡初始化,包括配置串行端口。

  • 使用 rtiostream_wrapper 函数验证通过嵌入式处理器从 MATLAB 发送和接收串行数据。

  • 通过使用系统命令调用 DSS 实用工具,从 MATLAB 下载并运行应用程序。

第 3 阶段:使用 Simulink 实现和测试连接配置

  • 创建一个连接配置类以配置主机端串行通信,指定必须在编译过程包含 rtiostream 应用程序中的哪些目标端代码文件,指定如何访问将用于收集探查数据的计时器,并集成调用 DSS 实用工具以启动嵌入式应用程序。

  • 创建一个工具设定联编文件 (target_tools.mk),它指定编译器、链接器和打包器的命令和选项。此联编文件将包含在模板联编文件 (target_tools.mk) 中。

  • 创建包含 target_tools.mk 的模板联编文件 (ec_target.tmf)。

  • 确定可能依赖于安装的参数,并将其存储为 MATLAB 预设项。

  • 创建一个 Simulink 自定义文件,用于指定 PIL 实现什么时候是有效的。

        与 PIL 实现相关联的文件包含在 Embedded Coder 中,但不在 MATLAB 路径上。要浏览这些文件,可以将它们复制到本地文件夹中。您可以通过将文件夹添加到 MATLAB 路径并刷新 Simulink 自定义来注册 PIL 实现。

addpath(genpath(fullfile('.','examplePilF28335')))
sl_refresh_customizations

        使用 MATLAB 预设项指定路径信息和主机串行 COM 端口号。如果直接使用 PIL 实现,则必须根据配置指定这些预设项。

setpref('examplePilF28335','examplePilF28335Dir', fullfile('.','examplePilF28335'));
setpref('examplePilF28335','CCSRootDir',          'C:\Program Files\Texas Instruments\ccsv4');
setpref('examplePilF28335','TI_F28xxx_SysSWDir',  'C:\Program Files\Texas Instruments\TI_F28xxx_SysSW');
setpref('examplePilF28335','targetConfigFile',    fullfile('.','examplePilF28335','f28335_ezdsp.ccxml'));
setpref('examplePilF28335','baudRate',            115200);
setpref('examplePilF28335','cpuClockRateMHz',     150);
setpref('examplePilF28335','boardConfigPLL',      10);
setpref('examplePilF28335','COMPort',             'COM4');

        请注意,TI_F28xxx_SysSWDir 预设项指向 Texas Instruments 在其 C2000 Experimenter Kit Application Software (sprc675.zip) 中提供的一个文件夹。这些文件不包括在 Embedded Coder 中。

        现在即可使用该 PIL 实现。

准备用于 PIL 测试的控制器模型

        查看用于注册 PIL 实现的自定义文件,设置模型的配置参数以使用 PIL 实现,并启用控制器输出和执行探查数据的记录。

        当开始 PIL 仿真时,Simulink 会检查注册的 PIL 实现是否有效。自定义文件指定哪些配置参数对应于有效的 PIL 实现。可以通过调用以下命令来浏览该实现的自定义文件。

edit(fullfile('.','examplePilF28335','sl_customization.m'));

        请注意,该文件指定使用 PIL 实现所需的硬件设备和模板联编文件的设置。可以修改控制器模型中的配置参数以匹配设置。可以通过“配置参数”对话框进行修改,或以编程方式进行修改,如下所示。

set_param('PMSMControllerLocal',...
       'ProdHWDeviceType', 'Texas Instruments->C2000',...
       'TemplateMakefile', 'ec_target.tmf',...
       'GenCodeOnly', 'off',...
       'SimulationMode', 'processor-in-the-loop (pil)')

        对于 PIL 仿真,请启用代码执行探查,从而将执行时间度量记录在变量 executionProfile 中。

set_param('PMSMControllerLocal',...
    'CodeExecutionProfiling', 'on',...
    'CodeExecutionProfileVariable','executionProfile',...
    'CodeProfilingSaveOptions','AllData');
save_system('PMSMControllerLocal.slx')

        现在,可以运行控制器模型的 PIL 仿真。

测试生成的代码的行为和执行时间

        在本节中,在 PIL 模式下运行控制器模型,并了解行为和执行的探查结果。验证编译的控制器代码的行为是否与参考仿真行为一致,然后验证代码的执行是否符合计时要求。

        可以运行模型并绘制 PIL 仿真结果。当您第一次运行该模型时,Embedded Coder 会生成算法代码,将算法代码与串行通信接口代码链接,编译嵌入式应用程序,将应用程序下载到板卡,并开始进行目标系统上的仿真。请注意,在后续的 PIL 仿真过程中,仅当更改模型时,才会重新生成代码。由于存在与串行通信接口相关联的开销,PIL 仿真的运行速度可能比普通模式仿真慢。

        以下 MATLAB 命令有意被注释掉,因为它们需要连接到硬件和使用前面所述的嵌入式开发工具。如果您连接了硬件并安装了嵌入式开发工具,请取消注释并执行这些行以运行模型,绘制结果,并验证其行为在数值上等同于普通模式仿真。否则,请继续阅读本节以了解 PIL 执行分析选项。

% UNCOMMENT THE BELOW LINES TO RUN THE SIMULATION AND PLOT THE RESULTS
% if exist('slprj','dir'), rmdir('slprj','s'); end
% out = sim('PMSMControllerLocal')
% pwm_compare_pil = out.logsout.getElement('pwm_compare').Values;
% pmsmfoc_plotpwmcompare_pil(controller_mode, pwm_compare_pil, executionProfile)

如图所示:

        上一张图是控制器 PWM Compare 的输出。请注意,PIL 仿真输出看起来与“建立控制器模型的参考行为”一节中所示的普通模式仿真输出相同。要检查数值等效性,可以从 PIL 仿真输出中减去普通模式仿真输出:

% UNCOMMENT THE BELOW LINE TO VERIFY NUMERIC EQUIVALENCE OF THE OUTPUTS
% pilErrorWithRespectToReference = sum(abs(pwm_compare_pil.Data - pwm_compare_pil.Data))
pilErrorWithRespectToReference =
   0     0     0

        下图是在每个仿真时间步中执行控制器模型所花费的时间。“Stand By”状态需要的时间最少。执行时间中存在周期性小峰值,这是因为控制器是多速率、单任务型。周期性峰值对应于在同一任务中同时运行基本速率和 5 毫秒速率代码所需的时间。

        由于控制器在嵌入式处理器上必须以 25 kHz 的速度执行,因此该算法必须在 40 微秒内完成执行(减去其他代码的额外余量要求,这些代码也可能在最终应用程序上执行)。探查结果表明,该算法将在为嵌入式环境的配置分配的时间内执行。

        现在已经验证,生成的代码可提供在数值上等同的结果,并满足测试用例的执行计时要求。

close_system('PMSMControllerLocal',0);
close_system('power_utile',0);

        此 PIL 实现中使用的 MATLAB 预设项在各 MATLAB 会话之间持久保留。如果要删除预设项,请运行以下命令:

rmpref('examplePilF28335');
rmexamplePilF28335hooks();

结论

        该示例使用永磁同步电机的磁场定向控制算法,说明如何使用系统级仿真和算法代码生成来探索控制器算法的功能性行为。该示例还展示嵌入式处理器的目标集成、功能测试和执行探查的一般方法。一旦算法行为正确,您就可以从控制器模型生成代码,并在目标处理器上测试和探查代码。要进行进一步测试,可以将验证过的算法代码和与电机硬件对接的嵌入式软件集成在一起。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式事务完美解决方案:消息中间件(kafka)+ 本地事物 + 消息校对

前言 分布式事务是要保证多个服务下的多个数据库操作的一致性。分布式事务常见解决方案有:二阶段、三阶段和TCC实现强一致性事务,其实还有一种广为人知的方案就是利用消息队列来实现分布式事务,保证数据的最终一致性,也就是我们常…

带大家做一个,易上手的家常香干炒腊肉

从冰箱那一块腊肉 套个食品级的袋子 然后用冷水化冰 准备两块香干 香干切成片 不要太薄 当然也别厚了 一把青蒜 青蒜切成段 干和叶子分开装 腊肉去掉下面的肉皮 然后切小块 锅中加入清水 下入少量油和盐 开小火 水起泡泡后下入香干 过水 半分钟左右 香干捞出备用 将腊…

Geoserver扩展发布MySQL视图功能

Geoserver中并不自带mysql数据发布功能,需要扩展外部插件。 1、示例以geoserver-2.20.5版本进行演示,所以MySQL插件需要到该版本对应的“Extensions”标题下查找,下载地址:GeoServer,详见下图 2、选择MySQL进入下载页…

【北邮国院大四上】Business Technology Strategy 企业技术战略

北邮国院电商大四在读,本笔记仅为PPT内容的整理与翻译,并不代表本课程的考纲及重点,仅为本人复习时方便阅读与思考之作。 写在前面 大家好,欢迎来到大学期间的最后一门课程,本门课程是中方课,所以很庆幸的…

小微企业在银行信贷相关产品和机器学习建模案例_论文科研_企业调研

各银行小微企业贷款业务 互联网的时代,大量新信息技术的涌现和网络的无处不在,想要抢占这片金融天地,必须重视小微金融业务,小微企业是一直具有重大潜力的客户,商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…

C#编程-显示运算符重载

重载函数的概念也可以应用于运算符。在将C#运算符应用到用户定义的数据类型时,运算符重载为它们提供额外的能力。只可以重载预定义的C#运算符组。 运算符重载的必要性 大多数内置数据类型都有与它们相关的预定义运算符。例如:带有运算符+、-、*和/的C#数据类型int为数学运算…

JavaScript面向对象编程实战

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 面向对象编程(OOP)是JavaScript中非常重要的一个概念。掌握OOP可以帮助我们写出更加清晰、…

synchronized、volatile关键字

Java中的synchronized关键字 synchronized关键字介绍 synchronized块是Java提供的一种原子性内置锁,Java中的每个对象都可以把它当作一个同步锁来使用,这些Java内置的使用者看不到的锁被称为内部锁,也叫作监视器锁。 线程的执行代码在进入…

LLM Agent之RAG的反思:放弃了压缩还是智能么?

已经唠了三章的RAG,是时候回头反思一下,当前的RAG是解决幻觉的终点么?我给不出直接的答案,不过感觉当前把RAG当作传统搜索框架在大模型时代下的改良,这个思路的天花板高度有限~ 反思来源于对RAG下模型回答的直观感受&…

【软考中级-软件设计师】day3:程序设计语言基础知识

概述 练习题 程序设计语言的基本成分 练习题 编译程序基本原理 名词解释 词法分析 词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作…

Duboo-入门到学废【下篇】

目录 🥓1.dubbo-admin 🌭2.序列化 🧂3.超时 🥚4.重试 ❤️5.多版本 🧇6.负载均衡 🍟7.集群容错 1.dubbo-admin 💕💕💕 1.1dubbo-admin是什么 1.duboo-admin是一…

【大数据】Flink CDC 的概览和使用

Flink CDC 的概览和使用 1.什么是 CDC2.什么是 Flink CDC3.Flink CDC 前生今世3.1 Flink CDC 1.x3.2 Flink CDC 2.x3.3 Flink CDC 3.x 4.Flink CDC 使用5.Debezium 标准 CDC Event 格式详解 1.什么是 CDC CDC(Change Data Capture,数据变更抓取&#xf…

SpringCloud-高级篇(十三)

前面的主从集群可以应对Redis高并发读的问题,Redis主从之间可以做同步,为了提高主从同步时的性能,单节点Redis的内存不要设置太高,如果内存占用过多,做RDB的持久化,或者做全量同步的时候,导致大…

Kubernetes复习总结(二):Kubernetes容器网络

2、Kubernetes容器网络 1)、Docker网络原理 Docker默认使用的网络模型是bridge,这里只讲bridge网络模型 1)容器之间通信原理 当安装完docker之后,docker会在宿主机上创建一个名叫docker0的网桥,默认IP是172.17.0.1…

家具电子图册制作方法

​随着互联网的普及,越来越多的人选择在线购物,家具行业也不例外。为了满足消费者对高品质家具的需求,家具电子图册应运而生。与传统纸质图册相比,家具电子图册具有更高的转化率、更低的成本和更快的更新速度。 一、与纸质版相比有…

Linux 目录结构及其说明

Linux 操作系统遵循一种标准的目录结构,称为 Filesystem Hierarchy Standard(文件系统层次结构标准),其定义了不同目录的用途和内容。 浅蓝色文字 /(根目录): /根目录是整个文件系统的起点&…

迁移学习|代码实现

还记得我们之前实现的猫狗分类器吗?在哪里,我们设计了一个网络,这个网络接受一张图片,最后输出这张图片属于猫还是狗。实现分类器的过程比较复杂,准备的数据也比较少。所以我们是否可以使用一种方法,在数据…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)添加 删除 修改 释放

在上篇文章(处理任务队列中的任务)中我们讲解了处理任务队列中的任务的具体流程,eventLoopProcessTask函数的作用: 处理队列中的任务,需要遍历链表并根据type进行对应处理,也就是处理dispatcher中的任务。 // 处理任…

Linux之Ubuntu环境Jenkins部署前端项目

今天分享Ubuntu环境Jenkins部署前端vue项目 一、插件安装 1、前端项目依赖nodejs,需要安装相关插件 点击插件管理,输入node模糊查询 选择NodeJS安装 安装成功 2、配置nodejs 点击后进入 点击新增 NodeJS 配置脚手架类型:如果不填 默认npm …

华为HarmonyOS 创建第一个鸿蒙应用 运行Hello World

使用DevEco Studio创建第一个项目 Hello World 1.创建项目 创建第一个项目,命名为HelloWorld,点击Finish 选择Empty Ability模板,点击Next Hello World 项目已经成功创建,接来下看看效果 2.预览 Hello World 点击右侧的预…