第5章 公共事件

HarmonyOS通过公共事件服务为应用程序提供订阅、发布、退订公共事件的能力。

5.1 公共事件概述

在应用里面,往往会有事件。比如,朋友给我手机发了一条信息,未读信息会在手机的通知栏给出提示。

5.1.1 公共事件的分类

公共事件(Common Event Service,CES)根据事件发送方不同,可分为系统公共事件和自定义公共事件,如图所示。

1.系统公共事件:系统将收集到的事件信息根据系统策略发送给订阅该事件的用户程序。 公共事件包括终端设备用户可感知的亮灭屏事件,以及系统关键服务发布的系统事件(例如USB插拔、网络连接、系统升级)等。

2.自定义公共事件:由应用自身定义的期望特定订阅者可以接收到的公共事件,这些公共事件往往与应用自身的业务逻辑相关。

每个应用都可以按需订阅公共事件,订阅成功且公共事件发布,系统会把其发送和公共事件取消订阅开发。

5.1.2 公共事件的开发

公共事件的开发主要涉及3部分,即公共事件订阅开发、公共事件发布开发和公共事件取消订阅开发。

1.公共事件订阅开发

当需要订阅某个公共事件,获取某个公共事件传递的参数时,可以创建一个订阅者对象,用于作为订阅公共事件的载体,订阅公共事件并获取公共事件传递而来的参数。 发送粘性事件必须是系统应用或系统服务, 且需要申请ohos.permission.COMMONEVENT_STICKY权限 。 ​ 公共事件订阅开发的接口如下:

创建订阅者对象(callback):createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback: AsyncCallback)。 ​ 创建订阅者对象(promise):createSubscriber(subscribeInfo: CommonEventSubscribeInfo)。 订阅公共事件:subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback)。

2.公共事件发布开发

当需要发布某个自定义公共事件时,可以通过此方法发布事件。发布的公共事件可以携带数据,供订阅者解析并进行下一步处理。 ​ 公共事件发布开发的接口如下:

发布公共事件:publish(event: string, callback: AsyncCallback)。 ​ 指定发布信息并发布公共事件:publish(event: string, options: CommonEventPublishData, callback: AsyncCallback)。

3.公共事件取消订阅开发

订阅者需要取消已订阅的某个公共事件时,可以通过此方法取消订阅事件。 ​ 公共事件取消订阅开发的接口如下:

取消订阅公共事件:unsubscribe(subscriber: CommonEventSubscriber, callback?: AsyncCallback)。

5.2 订阅、发布、取消公共事件

打开DevEco Studio,选择一个Empty Ability工程模板,创建一个名为ArkTSCommonEventService的工程为演示示例。

5.2.1 添加按钮

在Index.ets的Text组件下,添加4个按钮,代码如下:

@Entry
@Component
struct Index {@State message: string = 'Hello World'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//创建订阅者Button(('创建订阅者'), { type: ButtonType.Capsule }).fontSize(40).fontWeight(FontWeight.Medium).margin({ top: 10, bottom: 10 }).onClick(() => {//创建订阅者// this.createSubscriber()})//订阅事件Button(('订阅事件'), { type: ButtonType.Capsule }).fontSize(40).fontWeight(FontWeight.Medium).margin({ top: 10, bottom: 10 }).onClick(() => {//订阅事件// this.subscriberCommonEvent()})//发送事件Button(('发送事件'), { type: ButtonType.Capsule }).fontSize(40).fontWeight(FontWeight.Medium).margin({ top: 10, bottom: 10 }).onClick(() => {//发送事件// this.publishCommonEvent()})//取消订阅事件Button(('取消订阅'), { type: ButtonType.Capsule }).fontSize(40).fontWeight(FontWeight.Medium).margin({ top: 10, bottom: 10 }).onClick(() => {//取消订阅事件// this.unsubscribeCommonEvent()})}.width('100%')}.height('100%')}
}

5.2.2 添加Text显示接收的事件

为了能显示接收到的事件的信息,在4个按钮下添加一个Text组件,代码如下:

//用于接收事件数据
@State eventData: string = ''
//接收到的事件数据
Text(this.eventData).fontSize(50).fontWeight(FontWeight.Bold)

Text组件的显示内容通过@State绑定了eventData变量。当eventData变量变化时,Text的显示内容也会实时更新。

5.2.3 设置按钮的单击事件方法

4个按钮的单击事件方法如下:

//用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作
private subscriber = null 
//导入commonEvent模块
import commonEvent from '@ohos.commonEvent';
  private createSubscriber() {if (this.subscriber) {this.message = "subscriber already created";} else {commonEvent.createSubscriber({ 		//创建订阅者events: ["testEvent"] 			//指定订阅的事件名称}, (err, subscriber) => { 			//创建结果的回调if (err) {this.message = "create subscriber failure"} else {this.subscriber = subscriber; 		//创建订阅成功this.message = "create subscriber success";}})}}

在第一个按钮的点击事件中调用该方法 代码如下:this.createSubscriber()

点击第一个按钮,看到如下效果:

添加订阅事件的方法:

  private subscriberCommonEvent() {if (this.subscriber) {//根据创建的subscriber开始订阅事件commonEvent.subscribe(this.subscriber, (err, data) => {if (err) {//异常处理this.eventData = "subscribe event failure: " + err;} else {//接收到事件this.eventData = "subscribe event success: " + JSON.stringify(data);}})} else {this.message = "please create subscriber";}}

订阅事件前先判断是否创建订阅事件。在第二个按钮中调用该方法,代码如下:this.subscriberCommonEvent()

点击第二个按钮,看到如下效果:

发送事件:

  private publishCommonEvent() {//发布公共事件commonEvent.publish("testEvent", (err) => { //结果回调if (err) {this.message = "publish event error: " + err;} else {this.message = "publish event with data success";}})}

在第三个按钮中添加调用该方法的代码:this.publishCommonEvent()

点击第三个按钮,效果如下:

取消订阅的代码如下:

private unsubscribeCommonEvent() {
if (this.subscriber) {commonEvent.unsubscribe(this.subscriber, (err) => { //取消订阅事件if (err) {this.message = "unsubscribe event failure: " + err;} else {this.subscriber = null;this.message = "unsubscribe event success";}})
} else {this.message = "already subscribed";
}
}

在第四个按钮中添加调用代码:this.unsubscribeCommonEvent()

点击第四个按钮,效果如下:

5.3 支持交互事件

5.3.1 交互事件概述

通用事件按照触发类型来分类,包括触屏事件、键鼠事件和焦点事件。

  • 触屏事件:手指或手写笔在触屏上的单指或单笔操作。

  • 键鼠事件

    :包括外设鼠标或触控板的操作事件和外设键盘的按键事件。

    • 鼠标事件是指通过连接和使用外设鼠标/触控板操作时所响应的事件。

    • 按键事件是指通过连接和使用外设键盘操作时所响应的事件。

  • 焦点事件:通过以上方式控制组件焦点的能力和响应的事件。

手势事件由绑定手势方法和绑定的手势组成,绑定的手势可以分为单一手势和组合手势两种类型,根据手势的复杂程度进行区分。

  • 绑定手势方法:用于在组件上绑定单一手势或组合手势,并声明所绑定的手势的响应优先级。

  • 单一手势:手势的基本单元,是所有复杂手势的组成部分。

  • 组合手势:由多个单一手势组合而成,可以根据声明的类型将多个单一手势按照一定规则组合成组合手势,并进行使用。

5.3.2 使用通用事件

1.触屏事件

触屏事件指当手指/手写笔在组件上按下、滑动、抬起时触发的回调事件。包括点击事件、拖拽事件和触摸事件。

点击事件

点击事件是指通过手指或手写笔做出一次完整的按下和抬起动作。当发生点击事件时,会触发以下回调函数:

onClick(event: (event?: ClickEvent) => void)

event参数提供点击事件相对于窗口或组件的坐标位置,以及发生点击的事件源。

例如通过按钮的点击事件控制图片的显示和隐藏。

@Entry
@Component
struct A1 {@State flag: boolean = true;@State btnMsg: string = 'show';build() {Column() {Button(this.btnMsg).width(80).height(30).margin(30).onClick(() => {if (this.flag) {this.btnMsg = 'hide';} else {this.btnMsg = 'show';}// 点击Button控制Image的显示和消失this.flag = !this.flag;})if (this.flag) {Image($r('app.media.icon')).width(200).height(200)}}.height('100%').width('100%')}
}

根据代码,自行查看点击效果,该点击事件是最常用的事件。

拖拽事件

拖拽事件指手指/手写笔长按组件(>=500ms),并拖拽到接收区域释放的事件。拖拽事件触发流程:

拖拽事件的触发通过长按、拖动平移判定,手指平移的距离达到5vp即可触发拖拽事件。ArkUI支持应用内、跨应用的拖拽事件。

拖拽事件提供以下接口:

接口名称描述
onDragStart(event: (event?: DragEvent, extraParams?: string) => CustomBuilder | DragItemInfo)拖拽启动接口。当前仅支持自定义pixelmap和自定义组件。
onDragEnter(event: (event?: DragEvent, extraParams?: string) => void)拖拽进入组件接口。DragEvent定义拖拽发生位置,extraParmas表示用户自定义信息
onDragLeave(event: (event?: DragEvent, extraParams?: string) => void)拖拽离开组件接口。DragEvent定义拖拽发生位置,extraParmas表示拖拽事件额外信息。
onDragMove(event: (event?: DragEvent, extraParams?: string) => void)拖拽移动接口。DragEvent定义拖拽发生位置,extraParmas表示拖拽事件额外信息。
onDrop(event: (event?: DragEvent, extraParams?: string) => void)拖拽释放组件接口。DragEvent定义拖拽发生位置,extraParmas表示拖拽事件额外信息。

触摸事件

当手指或手写笔在组件上触碰时,会触发不同动作所对应的事件响应,包括按下(Down)、滑动(Move)、抬起(Up)事件:

onTouch(event: (event?: TouchEvent) => void)
  • event.type为TouchType.Down:表示手指按下。

  • event.type为TouchType.Up:表示手指抬起。

  • event.type为TouchType.Move:表示手指按住移动。

触摸事件可以同时多指触发,通过event参数可获取触发的手指位置、手指唯一标志、当前发生变化的手指和输入的设备源等信息。

2.键鼠事件

键鼠事件指键盘,鼠标外接设备的输入事件。

鼠标事件

支持的鼠标事件包含通过外设鼠标、触控板触发的事件。

鼠标事件可触发以下回调:

名称描述
onHover(event: (isHover: boolean) => void)鼠标进入或退出组件时触发该回调。isHover:表示鼠标是否悬浮在组件上,鼠标进入时为true, 退出时为false。
onMouse(event: (event?: MouseEvent) => void)当前组件被鼠标按键点击时或者鼠标在组件上悬浮移动时,触发该回调,event返回值包含触发事件时的时间戳、鼠标按键、动作、鼠标位置在整个屏幕上的坐标和相对于当前组件的坐标。

当组件绑定onHover回调时,可以通过hoverEffect属性设置该组件的鼠标悬浮态显示效果。

鼠标事件传递到ArkUI之后,会先判断鼠标事件是否是左键的按下/抬起/移动,然后做出不同响应:

  • 是:鼠标事件先转换成相同位置的触摸事件,执行触摸事件的碰撞测试、手势判断和回调响应。接着去执行鼠标事件的碰撞测试和回调响应。

  • 否:事件仅用于执行鼠标事件的碰撞测试和回调响应。

说明

所有单指可响应的触摸事件/手势事件,均可通过鼠标左键来操作和响应。例如当我们需要开发单击Button跳转页面的功能、且需要支持手指点击和鼠标左键点击,那么只绑定一个点击事件(onClick)就可以实现该效果。若需要针对手指和鼠标左键的点击实现不一样的效果,可以在onClick回调中,使用回调参数中的source字段即可判断出当前触发事件的来源是手指还是鼠标。

onHover(event: (isHover?: boolean) => void)

鼠标悬浮事件回调。参数isHover类型为boolean,表示鼠标进入组件或离开组件。该事件不支持自定义冒泡设置,默认父子冒泡。

若组件绑定了该接口,当鼠标指针从组件外部进入到该组件的瞬间会触发事件回调,参数isHover等于true;鼠标指针离开组件的瞬间也会触发该事件回调,参数isHover等于false。

说明

事件冒泡:在一个树形结构中,当子节点处理完一个事件后,再将该事件交给它的父节点处理。

@Entry
@Component
struct A2 {@State isHovered: boolean = false;build() {Column() {Button(this.isHovered ? 'Hovered!' : 'Not Hover').width(200).height(100).backgroundColor(this.isHovered ? Color.Green : Color.Gray).onHover((isHover: boolean) => { // 使用onHover接口监听鼠标是否悬浮在Button组件上this.isHovered = isHover;})}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}

该示例创建了一个Button组件,初始背景色为灰色,内容为“Not Hover”。示例中的Button组件绑定了onHover回调,在该回调中将this.isHovered变量置为回调参数:isHover。

当鼠标从Button外移动到Button内的瞬间,回调响应,isHover值等于true,isHovered的值变为true,将组件的背景色改成Color.Green,内容变为“Hovered!”。

当鼠标从Button内移动到Button外的瞬间,回调响应,isHover值等于false,又将组件变成了初始的样式。

onMouse

onMouse(event: (event?: MouseEvent) => void)

鼠标事件回调。绑定该API的组件每当鼠标指针在该组件内产生行为(MouseAction)时,触发事件回调,参数为MouseEvent对象,表示触发此次的鼠标事件。该事件支持自定义冒泡设置,默认父子冒泡。常见用于开发者自定义的鼠标行为逻辑处理。

开发者可以通过回调中的MouseEvent对象获取触发事件的坐标(screenX/screenY/x/y)、按键(MouseButton)、行为(MouseAction)、时间戳(timestamp)、交互组件的区域(EventTarget)、事件来源(SourceType)等。MouseEvent的回调函数stopPropagation用于设置当前事件是否阻止冒泡。

onKeyEvent

onKeyEvent(event: (event?: KeyEvent) => void)

按键事件回调,当绑定该方法的组件处于获焦状态下,外设键盘的按键事件会触发该API的回调响应,回调参数为KeyEvent,可由该参数获得当前按键事件的按键行为(KeyType)、键码(keyCode)、按键英文名称(keyText)、事件来源设备类型(KeySource)、事件来源设备id(deviceId)、元键按压状态(metaKey)、时间戳(timestamp)、阻止冒泡设置(stopPropagation)。

@Entry
@Component
struct A2 {@State buttonText: string = '';@State buttonType: string = '';@State columnText: string = '';@State columnType: string = '';build() {Column() {Button('onKeyEvent').width(140).height(70).onKeyEvent((event: KeyEvent) => { // 给Button设置onKeyEvent事件if (event.type === KeyType.Down) {this.buttonType = 'Down';}if (event.type === KeyType.Up) {this.buttonType = 'Up';}this.buttonText = 'Button: \n' +'KeyType:' + this.buttonType + '\n' +'KeyCode:' + event.keyCode + '\n' +'KeyText:' + event.keyText;})Divider()Text(this.buttonText).fontColor(Color.Green)Divider()Text(this.columnText).fontColor(Color.Red)}.width('100%').height('100%').justifyContent(FlexAlign.Center).onKeyEvent((event: KeyEvent) => { // 给父组件Column设置onKeyEvent事件if (event.type === KeyType.Down) {this.columnType = 'Down';}if (event.type === KeyType.Up) {this.columnType = 'Up';}this.columnText = 'Column: \n' +'KeyType:' + this.buttonType + '\n' +'KeyCode:' + event.keyCode + '\n' +'KeyText:' + event.keyText;})}
}

打开应用后,依次在键盘上按这些按键:“空格、回车、左Ctrl、左Shift、字母A、字母Z”。

  1. 由于onKeyEvent事件默认是冒泡的,所以Button和Column的onKeyEvent都可以响应。

  2. 每个按键都有2次回调,分别对应KeyType.Down和KeyType.Up,表示按键被按下、然后抬起。

如果要阻止冒泡,即仅Button响应键盘事件,Column不响应,在Button的onKeyEvent回调中加入event.stopPropagation()方法即可,如下:

Button('onKeyEvent').width(140).height(70).onKeyEvent((event: KeyEvent) => {// 通过stopPropagation阻止事件冒泡event.stopPropagation();if (event.type === KeyType.Down) {this.buttonType = 'Down';}if (event.type === KeyType.Up) {this.buttonType = 'Up';}this.buttonText = 'Button: \n' +'KeyType:' + this.buttonType + '\n' +'KeyCode:' + event.keyCode + '\n' +'KeyText:' + event.keyText;
})

5.3 小结

本章介绍了在HarmonyOS中的公共事件的概念以及用法,并演示了公共事件的订阅、发布和取消操作。这里只介绍了部分事件,如果想要学习更多的事件,可以进入官网查看API文档进行学习。

5.4 习题

1.判断题

(1)事件方法:用于添加组件对事件的响应逻辑,统一通过事件方法进行设置,如跟随在Button后面的onClick()。( )

(2)公共事件的开发主要涉及3部分,即公共事件订阅开发、公共事件发布开发和公共事件取消订阅开发。( )

2.多选题

公共事件(Common Event Service,CES)根据事件发送方不同可分为哪几类?( )

A. 系统公共事件 B. 自定义公共事件

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(三)QT——信号与槽机制——计数器程序

目录 前言 信号(Signal)与槽(Slot)的定义 一、系统自带的信号和槽 二、自定义信号和槽 三、信号和槽的扩展 四、Lambda 表达式 总结 前言 信号与槽机制是 Qt 中的一种重要的通信机制,用于不同对象之间的事件响…

【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)

本文项目编号 T 165 ,文末自助获取源码 \color{red}{T165,文末自助获取源码} T165,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)

春节忙完一轮,总算可以继续来写博客了。希望在春节假期结束之前能多更新几篇。 这一篇会偏理论多一点。笔者本没打算在这一系列里面重点讲理论,所以像相机矩阵推导这种网上已经很多优质文章的内容,笔者就一笔带过。 然而关于负缩放&#xf…

[论文阅读] (37)CCS21 DeepAID:基于深度学习的异常检测(解释)

祝大家新春快乐,蛇年吉祥! 《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正&#xff0…

AutoDL 云服务器:xfce4 远程桌面 终端乱码 + 谷歌浏览器

/usr/bin/google-chrome-stable --no-sandbox --proxy-server"127.0.0.1:7890" 打开新的PowerShell ssh -p 54521 rootconnect.yza1.seetacloud.com /opt/TurboVNC/bin/vncserver -kill :1 rm -rf /tmp/.X1* USERroot /opt/TurboVNC/bin/vncserver :1 -desktop …

Contrastive Imitation Learning

机器人模仿学习中对比解码的一致性采样 摘要 本文中,我们在机器人应用的对比模仿学习中,利用一致性采样来挖掘演示质量中的样本间关系。通过在排序后的演示对比解码过程中,引入相邻样本间的一致性机制,我们旨在改进用于机器人学习…

DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”

当算力博弈升级为网络战争:拆解DDoS攻击背后的技术攻防战——从DeepSeek遇袭看全球网络安全新趋势 在数字化浪潮席卷全球的当下,网络已然成为人类社会运转的关键基础设施,深刻融入经济、生活、政务等各个领域。从金融交易的实时清算&#xf…

【二叉搜索树】

二叉搜索树 一、认识二叉搜索树二、二叉搜索树实现2.1插入2.2查找2.3删除 总结 一、认识二叉搜索树 二叉搜索树(Binary Search Tree,简称 BST)是一种特殊的二叉树,它具有以下特征: 若它的左子树不为空,则…

FreeRTOS学习 --- 中断管理

什么是中断? 让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断 中断执行机制,可简单概括为三步: 1,中断请求 外设产生中断请求(GPIO外部中断、定时器中断…

使用 Ollama 和 Kibana 在本地为 RAG 测试 DeepSeek R1

作者:来自 Elastic Dave Erickson 及 Jakob Reiter 每个人都在谈论 DeepSeek R1,这是中国对冲基金 High-Flyer 的新大型语言模型。现在他们推出了一款功能强大、具有开放权重的思想链推理 LLM,这则新闻充满了对行业意味着什么的猜测。对于那些…

灵芝黄金基因组注释-文献精读109

The golden genome annotation of Ganoderma lingzhi reveals a more complex scenario of eukaryotic gene structure and transcription activity 灵芝(Ganoderma lingzhi)的黄金基因组注释揭示了更复杂的真核基因结构和转录活性情况 摘要 背景 普遍…

【回溯+剪枝】组合问题!

文章目录 77. 组合解题思路:回溯剪枝优化 77. 组合 77. 组合 ​ 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 ​ 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,…

Python的那些事第六篇:从定义到应用,Python函数的奥秘

新月人物传记:人物传记之新月篇-CSDN博客 目录 一、函数的定义与调用 二、函数的参数 三、返回值(return语句) 四、作用域 五、匿名函数(lambda表达式) 六、总结 Python函数的奥秘:从定义到应用 编程…

java后端之登录认证

基础登录功能:根据提供的用户名和密码判断是否存在于数据库 LoginController.java RestController Slf4j public class LoginController {Autowiredprivate UserService userService;PostMapping("/login")public Result login(RequestBody User user) {…

嵌入式知识点总结 Linux驱动 (七)-Linux驱动常用函数 uboot命令 bootcmd bootargs get_part env_get

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.ioremap 2.open 3.read 4.write 5.copy_to_user 6.copy_from_user 7.总结相关uboot命令以及函数 1.bootcmd 1.1.NAND Flash操作命令 2.bootargs 2.1 root 2.2 rootf…

DS并查集(17)

文章目录 前言一、何为并查集?二、并查集的实现?并查集的初始化查找元素所在的集合判断两个元素是否在同一个集合合并两个元素所在的集合获取并查集中集合的个数并查集的路径压缩 三、来两道题练练手?省份的数量等式方程的可满足性 总结 前言…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<2>

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们来学习const修饰指针,包括const修饰变量,const修饰指针变量&#xff1b…

DeepSeek 云端部署,释放无限 AI 潜力!

1.简介 目前,OpenAI、Anthropic、Google 等公司的大型语言模型(LLM)已广泛应用于商业和私人领域。自 ChatGPT 推出以来,与 AI 的对话变得司空见惯,对我而言没有 LLM 几乎无法工作。 国产模型「DeepSeek-R1」的性能与…

小程序的数据绑定与事件绑定

1.数据绑定的基本原则 2.在data中定义页面的数据 3.Mustache语法的格式 (其实可以把他理解为插值表达式) 动态绑定属性 三元运算 算数运算 4.事件绑定 事件绑定基本使用

实验一---典型环节及其阶跃响应---自动控制原理实验课

一 实验目的 1.掌握典型环节阶跃响应分析的基本原理和一般方法。 2. 掌握MATLAB编程分析阶跃响应方法。 二 实验仪器 1. 计算机 2. MATLAB软件 三 实验内容及步骤 利用MATLAB中Simulink模块构建下述典型一阶系统的模拟电路并测量其在阶跃响应。 1.比例环节的模拟电路 提…