永磁同步电机模型微服务实现

2022-03-25 04:45刘子杰
软件导刊 2022年3期
关键词:服务端同步电机永磁

刘子杰,王 凯,2

(1.上海理工大学光电信息与计算机工程学院;2.上海出版印刷高等专科学校,上海 200093)

0 引言

生产生活中电机扮演着至关重要的角色,其中永磁同步电机(PMSM)具有运行可靠性高、转矩波动小、体积小、控制精度高等特点,在新能源汽车、生产设备、机器人等方面大量使用[1]。永磁同步电机系统虽然在很多方面都有优势,但是它是一个集控制、电气、机械等领域于一体的复杂系统,耦合性高、模型复杂、非线性。为了更好地研究电机系统的复杂特性,一般使用Simulink 等工具进行仿真,但是无法脱离平台使用,而且模型重用性很差,微服务应运而生。

微服务[2-3]是将单个应用程序实现为一组小型且独立的服务,服务之间通过轻量级机制相互通信。微服务具有可伸缩、易维护、可独立部署和可扩展等优点。随着工业互联网的兴起,微服务体系架构[4]成为软件开发的新趋势。在此背景下,本文提出一种可将传统电机模型转变成微服务并在微服务架构上运行的方法。该方法可提高模型的重用率,模型可脱离平台运行,可通过网页对模型进行远程调参以及实时查看模型的波形变化。

永磁同步电机模型仿真研究较多。文献[5]设计了永磁同步电机调速系统仿真,文献[6]对永磁同步电机的空间矢量控制进行研究,文献[7]基于OpenModelica 进行永磁同步电机系统仿真研究,文献[8]基于Spring Cloud 对微服务架构应用进行研究。这些永磁同步电机建模在使用不同控制策略基础上采用传统建模方法进行建模,微服务架构研究也大多是商业性的。针对上述问题,本文提出一个永磁同步电机模型微服务的实现方法,该方法总结了永磁同步电机建模和商业微服务的优点,以OpenModelica 平台为建模工具,Spring Cloud 为微服务架构,实现了永磁同步电机微服务。

1 研究思路

1.1 微服务化步骤

永磁同步电机模型微服务化步骤如下:①根据电机运行原理建立数学模型,使用Modelica 语言[9]进行动态建模仿真,导出.FMU 文件;②将.FMU 文件通过Python、Java 语言进行封装调用;③在微服务框架上进行微服务部署。

1.2 微服务框架选择

Spring Cloud[10]是 由Pivotal团队研发用于实现微服务架构应用的框架集合,包括Spring Cloud Consul、Spring Cloud Netflix、Spring Cloud Config 等,它还提供配置管理、服务发现、数据监控、熔断降级、负载均衡等功能,这些功能都可通过Spring Cloud的子项目实现,如由服务发现(Eureka)、智能路由(Zuul)、客户端负载均衡(Ribbon)等组件组成的Spring Cloud Netflix,可以解决服务间通信、服务注册发现、负载均衡等问题;通过Spring Cloud Config 可以统一管理配置,实现统一配置中心。因为Spring Cloud 功能强大,开发效率高,所以本文将其作为微服务框架。

1.3 Modelica 语言及平台选择

Modelica 是一种面向对象的语言[11],该语言主要通过文本方式和图形建模工具两种方式建模,与一些传统的建模工具相比优势明显。如Simulink 仿真需要每个模型都有明确的输入和输出信号,因此用户必须先将组件的微分方程和代数方程转换成带有输入和输出的块,根据输入和输出关系建立组件模型,这种方法使电机的动态仿真受限于繁琐和复杂的计算。

Modelica 遵循FMI 标准,FMI 标准是一个在全球广泛应用、可以实现联合仿真和模型重用的接口标准。通过FMI标准可以将模型导出为以.FMU 结尾的文件压缩包形式,将模型转化成FMU 文件是将模型微服务化的必备环节。目前,基于Modelica 语言进行建模与动态仿真的平台很多,如MWorks、Dymola、SimulationX 和OpenModelica 等,其中OpenModelica 是一个由非盈利组织(OSMC)研发的开源仿真平台。综上所述,传统建模多使用Simulink 进行动态仿真,使用OpenModelica 平台进行PMSM 建模是一种尝试,采用OpenModelica 是本文建模平台的最佳选择。

2 模块建模及组合

电机模块、控制驱动模块[12]以及逆变器模块组成了基本的永磁同步电机运行系统。本文基于OpenModelica 平台分别对上述3 个模块进行建模,然后根据各个模块预留的接口进行连接,拼装成一个完整的系统后进行电机动态仿真。模块化建模有很多优点,例如可以提高模块的复用率、节约建模时间,可拓展性高,可根据需要随时在该模块上添加组件,同时不会影响其他模块运行等。

2.1 电机模块数学建模

作为一项成熟的技术,永磁同步电机应用非常广泛,该电机由一个定子和一个转子组成。通过两相同步旋转d-q 坐标系搭建永磁同步电机数学模型[13]。为了简化分析步骤,假设定子和转子的绕组在空间上呈正弦分布,不考虑磁滞和傅科电流损耗,机器参数在运行过程中恒定,不考虑饱和效应和集肤效应。

经过坐标系旋转后,定子电压方程表示为:

式(1)中,umq、umd分别代表经过坐标旋转后的定子电压,Rs为定子电阻,imq、imd分别代表q、d 轴上的定子电流,Ψmq、Ψmd分别代表q、d 轴上的定子磁链大小,ωv为转子角速度。

磁链方程如下:

式(2)中,Ψfm代表永磁体磁链,Lq、Ld分别代表q、d 轴上的定子电感。

根据磁链方程可计算出电磁转矩方程如下:

如果永磁同步电机为表贴式永磁电动机[14],则Ld=Lq,即无凸级效应,没有转矩磁阻。上式可进一步化简为:

式(3)、式(4)中的np代表极对数。

转子运动方程如下:

式(5)中,TL代表负载转矩;J代表转动惯量。

根据上述方程以及永磁同步电机运行原理,使用OpenModelica 对电机模块进行非因果建模。复用Modelica语言标准库,通过组件建模建立电机模块仿真,如图1 所示。该电机模型主要包含永磁体、三相空间相量变换模块(spacePhasorS)、定子电感、电阻、气隙(airGapR)模块等。输入电流通过三相空间相量变换模块进行Park 变换。气隙模块结合按式(4)计算磁链并且输出。通过恒电流方式励磁等价于永磁体模块。另外,为了更符合现实系统,在图1 中还添加了损耗模块。一般来说,永磁同步电机损耗主要由铁耗、铜耗、杂散耗和机械损耗组成。对损耗机理的分析可查阅文献[15-16]。

Fig.1 Motor simulation model图1 电机仿真模型

2.2 控制模块

本文讨论的永磁同步电机是不具有位置传感器的电机[17-18],主要有两种方法驱动该类型电机:①矢量控制[19]。磁极位置主要通过电机电流、电动势以及d-q 轴上的电感来判断;②V/F 开环控制[20]。V/F 控制中的V 和F 分别代表输出电压和频率,也就是通过V 和F 成正比来保证恒定磁通。OpenModelica 平台标准库中有VFcontroller 模块,可以直接使用,所以本设计选择V/F 开环控制。

2.3 逆变器模块

在运行系统中,PMSM 运行需要交流电供电,直流电源若想驱动电机则需要通过DC/AC 逆变器变成三相交流电,并经过电机模型内部的Park 变换才可以驱动电机。本文的逆变器模型以简单方式建模,使用OpenModelica 标准库设计逆变器模型。理想状态下,逆变器的输入输出功率相等,所以直流端的输入电流可通过式(6)计算得到。另外,交流端功率由OpenModelica 组件库中的功率传感器测量,直流端电压由电压传感器测量,再通过绝对值模块求绝对值,信号电流模块可以控制直流端电流大小。逆变器模型设计如图2 所示。

Fig.2 Inverter model图2 逆变器模型

2.4 模块组合及参数设置

基于OpenModelica 平台将封装好的逆变器模型、电机模型、V/F 控制器模型、模拟负载等通过接口进行连接,最终达到PMSM 动态仿真目的,具体连接如图3 所示。电机模型的正常运行需要设置合适的参数,smpmData 模块主要对电机参数进行设置,角度传感器模块主要是检测转子滞后角,ramp 模块主要提供斜坡信号。

Fig.3 PMSM system simulation model图3 永磁同步电机系统仿真模型

电机模型在OpenModelica 平台上建立和拼接完成后,因为平台遵循FMI 标准,所以模型可以输出FMU 压缩文件。对FMU 文件进行封装调用,实现模型的微服务化。

3 模型微服务技术实现

根据导出的FMU 压缩包还不能实现模型微服务,需要采用Python、Java 语言进行封装调用,以及在微服务架构上进行部署。操作流程如图4 所示。

Fig.4 Model microservice implementation process图4 模型微服务实现流程

3.1 RESTful API 实现

API[21]指应用程序编程接口,描述了与外界进行通信的规则:怎样接受响应和发送请求。顾名思义,RESTful API[22]就是具有RESTful风格的应用程序编程接口,其 中RESTful 在互联网中指一个软件架构。RESTful API的实现需要两步操作:①在Python 中安装pyfmi 包,使得Python 可以调用FMU 文件;②使用flask 框架对第①步中调用的文件进行处理,生成带有RESTful API 接口的服务,部分代码如图5 所示。

Fig.5 RESTful API interface implementation code图5 RESTful API 接口实现代码

3.2 微服务封装与部署

微服务封装后依靠IDEA 开发工具搭建Eureka 服务注册中心。搭建Eureka 服务端(即服务注册中心)和客户端(电机模型微服务)方法大同小异,以搭建Eureka 服务端为例,步骤如下:①一个maven 项目由IDEA 开发工具建立;②将项目相关的依赖添加到pom.xml 文件中;③建立一个项目启动类;④在resources 文件夹下建立一个以.yml 结尾的配置文件,并在该文件下配置Eureka 服务端的端口号和IP 地址等;⑤配置结束启动类运行;⑥在浏览器中输入Eureka 服务端的端口号和IP 地址,查看服务器端启动情况。Eureka 服务端结构如图6 所示。

Fig.6 Eureka server structure图6 Eureka 服务端结构

Eureka 客户端即电机模型微服务,将该服务在Eureka服务端进行注册并运行启动类。在浏览器中输入Eureka服务端的端口号和IP 地址,即可看到运行界面,如图7所示。

Fig.7 Eureka service registry center图7 Eureka 服务注册中心

从服务注册中心的界面可以看到端口号为8503的电机模型微服务,为验证电机模型微服务的正确性,对该微服务进行调用,看是否能产生正确波形。

4 仿真分析

电机模型微服务中的默认仿真时间为0~10s,该模型由ramp 模块产生一个斜率为1的频率信号驱动,在0~1s的时间内频率信号从0 增加到50 Hz,并在后续运行过程中保持不变。为了验证电机模型微服务界面的参数设置是否有效,同时便于观察波形,电机模型微服务实验时将界面中的仿真开始时间和结束时间设置为0 和2。另外,虽然可以在注册中心观察到电机模型微服务,但是不能判断电机模型微服务是否能够正常输出波形,以及输出的波形是否精确,本文通过运行电机模型微服务进行验证。

在电机模型微服务运行过程中,V/F 控制器产生的电压控制信号随着ramp 模块输出的斜坡信号变化而变化,逆变器输出电压的大小由V/F 控制器决定,逆变器输出的电压信号如图8 所示。

Fig.8 Phase voltage signal图8 相电压信号

负载力矩变化以及电机转速曲线如图9、图10 所示。从图9 可以看出,电机在1.2s 时添加了一个负载。从图10中可以看出:因为电机启动不是空载运行,所以转速上升很快,在1.1s 左右达到电机额定转速,在1.2 s 时对电机施加一个负载,负载的加入使电机转速在1.2s 处产生振荡,短时间内会恢复同步转速。

Fig.9 Load moment variation图9 负载力矩变化

Fig.10 Motor speed curve图10 电机转速曲线

从上述仿真结果波形图可以看出,电机模型微服务的仿真波形和实际分析结果一样,界面参数设置有效。实验证明将传统模型转变成微服务的设计可行。

5 结语

随着工业互联网的发展,工业微服务变得非常流行。本文在传统建模仿真基础上,使用Python、Java 语言对通过OpenModelic 平台导出的FMU 文件进行封装调用,形成电机模型微服务,最后部署在Spring Cloud 架构上。通过对电机模型微服务的实验仿真可知,将传统模型转变成微服务是可行的。虽然实验已经达到预期效果,但是微服务架构中部署的微服务用例只有电机模型微服务,后续研究将逐渐完善注册中心的微服务用例,并通过用例之间的接口进行组合,形成具有新功能的微服务。

猜你喜欢
服务端同步电机永磁
永磁同步电动机的节能计算
永磁同步电机两种高频信号注入法的比较
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
永磁同步电机调速系统的自抗扰控制
一种同步电机参数识别的简便算法
基于SVPWM的永磁直线同步电机直接推力控制系统
简述永磁减速起动机
摸清黑客套路防范木马侵入